<?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>217213</bug_id>
          
          <creation_ts>2020-10-02 04:20:00 -0700</creation_ts>
          <short_desc>Refactor WebGL implementation to use only GraphicsContextGL part 1</short_desc>
          <delta_ts>2020-10-27 02:13:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Mac</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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>217212</dependson>
    
    <dependson>217374</dependson>
          <blocked>217211</blocked>
    
    <blocked>217216</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1694028</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-02 04:20:00 -0700</bug_when>
    <thetext>Refactor WebGL implementation to use only GraphicsContextGL

Current implementation uses GraphicsContextGLOpenGL. This cannot support remote WebGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694029</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-02 04:20:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/69876105&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697686</commentid>
    <comment_count>2</comment_count>
      <attachid>411315</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-14 05:59:45 -0700</bug_when>
    <thetext>Created attachment 411315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697690</commentid>
    <comment_count>3</comment_count>
      <attachid>411317</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-14 06:03:36 -0700</bug_when>
    <thetext>Created attachment 411317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697800</commentid>
    <comment_count>4</comment_count>
      <attachid>411353</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-14 11:45:31 -0700</bug_when>
    <thetext>Created attachment 411353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698083</commentid>
    <comment_count>5</comment_count>
      <attachid>411433</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-15 05:48:17 -0700</bug_when>
    <thetext>Created attachment 411433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698325</commentid>
    <comment_count>6</comment_count>
      <attachid>411353</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-10-15 15:50:21 -0700</bug_when>
    <thetext>Comment on attachment 411353
Patch

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

&gt; Source/WebCore/ChangeLog:24
&gt; +        Introduce a virtual member fuction in GraphicsContextGL for

typo function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698482</commentid>
    <comment_count>7</comment_count>
      <attachid>411539</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-15 23:50:16 -0700</bug_when>
    <thetext>Created attachment 411539
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698495</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-16 01:18:32 -0700</bug_when>
    <thetext>kkinnunen@apple.com does not have reviewer permissions according to https://svn.webkit.org/repository/webkit/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

Rejecting attachment 411539 from commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698522</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-16 03:56:05 -0700</bug_when>
    <thetext>Committed r268578: &lt;https://trac.webkit.org/changeset/268578&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411539.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698523</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-16 03:57:13 -0700</bug_when>
    <thetext>patches still left</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698525</commentid>
    <comment_count>11</comment_count>
      <attachid>411554</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-16 04:18:30 -0700</bug_when>
    <thetext>Created attachment 411554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698529</commentid>
    <comment_count>12</comment_count>
      <attachid>411555</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-16 04:25:01 -0700</bug_when>
    <thetext>Created attachment 411555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698530</commentid>
    <comment_count>13</comment_count>
      <attachid>411556</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-16 04:28:59 -0700</bug_when>
    <thetext>Created attachment 411556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698531</commentid>
    <comment_count>14</comment_count>
      <attachid>411557</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-16 04:37:17 -0700</bug_when>
    <thetext>Created attachment 411557
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411315</attachid>
            <date>2020-10-14 05:59:45 -0700</date>
            <delta_ts>2020-10-14 06:03:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201014155943.patch</filename>
            <type>text/plain</type>
            <size>115886</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM2MWU1NjIxMzA1OTdj
NzY0NWVkZDY1MzgwMDlkMzIwNzk0M2JkMi4uZmMwMWNjYTNlMDZkZDIzM2FiNTcwZmZjZDU5YTI5
MTQxNzE1ZWY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTE0ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2Vi
R0wgaW1wbGVtZW50YXRpb24gdG8gdXNlIG9ubHkgR3JhcGhpY3NDb250ZXh0R0wgcGFydCAxCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTMKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnQgMSBvZiB3b3JrIHRvd2FyZHMgV2ViR0wgaW1w
bGVtZW50YXRpb24gd2hpY2ggdXNlcworICAgICAgICBHcmFwaGljc0NvbnRleHRHTCBhYnN0cmFj
dCBiYXNlIGNsYXNzIGluc3RlYWQgb2YKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
Y29uY3JldGUgY2xhc3MuCisKKyAgICAgICAgTW92ZSBwaXhlbCBkYXRhIHJlbGF0ZWQgc3RhdGlj
IGhlbHBlciBmdW5jaW9ucyBmcm9tCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHRv
IEdyYXBoaWNzQ29udGV4dEdMLiBUaGVzZSBhcmUKKyAgICAgICAgbm9ybWFsIHBpeGVsIGZvcm1h
dCBjYWxjdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgaGF2ZQorICAgICAgICBjb25jcmV0
ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNb3ZlIHBpeGVsIHBhY2sgcmVsYXRlZAor
ICAgICAgICBzdHJ1Y3R1cmVzIHRvIEdyYXBoaWNzQ29udGV4dEdMLgorCisgICAgICAgIFJlbmFt
ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgdG8KKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci4gVGhlIEdyYXBoaWNzQ29udGV4dEdMIGNsYXNz
CisgICAgICAgIGludGVyZmFjZSBpcyBhbHJlYWR5IHF1aXRlIGxlbmd0aHkgYW5kIHRoZSBpbWFn
ZSBleHRyYWN0b3IKKyAgICAgICAgaXMgbm90IHZlcnkgdGllZCB0byB0aGUgY29udGV4dCBjbGFz
cy4KKworICAgICAgICBJbnRyb2R1Y2UgYSB2aXJ0dWFsIG1lbWJlciBmdWN0aW9uIGluIEdyYXBo
aWNzQ29udGV4dEdMIGZvcgorICAgICAgICBlYWNoIGNhbGwgdGhhdCBpcyBsaWtlbHkgbmVlZGVk
IGZvciB0aGUgV2ViR0wgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBh
IHJlZmFjdG9yLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFy
YW1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleGVsQnl0ZXNGb3JGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OnBhY2tJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RUZXh0dXJlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnQ6On5DbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmFkZENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yOjpleHRyYWN0U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlUGl4ZWxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
aW1hZ2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvcjo6aW1hZ2VBbHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlSHRt
bERvbVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKwogMjAyMC0xMC0x
NCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT046IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS5odG1sIGZh
aWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNGMwNzU3ODA5NmY0NmNmYTE3YzQ4MGYzMzUzNWQ3ZTNjNDhhOTliZC4uYWU4ZDM5
YTMyNDM3YTJjMzljMDM2MDc5ODJhYWIxMThhYjNhZTM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjIxOCw2ICsyMjE4LDgg
QEAKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVG
MzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkIzNEExNTI1MzQ1Nzkx
MDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBMTMyNTM0NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5
ZXJDbGllbnQuaCAqLzsgfTsKIAkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEFOR0xFVXRpbGl0aWVzLmggKi87IH07CisJCTdCQjM0QTNDMjUzNTk1RDUwMDAyOUQwOCAv
KiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEEzOTI1MzU5NUQ0MDAwMjlEMDggLyogR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCQjM0QTNFMjUzNTk1RTMwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTNCMjUzNTk1RDQwMDAyOUQwOCAvKiBHcmFwaGlj
c0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLzsgfTsKIAkJN0JFNzQyNzM4MUZBOTA2RkJC
NEYwRjJDIC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4RTJGOTkgLyogSlNTVkdH
cmFwaGljc0VsZW1lbnQuaCAqLzsgfTsKIAkJN0MwMjlDNkUyNDkzQzhGODAwMjY4MjA0IC8qIENv
bG9yVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDI5QzZEMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5cGVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxODQzRkUxQzhCNzI4MzAwMkVC
OTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAwNjgsNiArMTAwNzAs
OCBAQAogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEExMzI1MzQ1NzkxMDAwMjlEMDggLyogV2ViR0xM
YXllckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHTExheWVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjM0QTE2MjUzNDVDQjIw
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JCMzRBMzkyNTM1OTVENDAwMDI5RDA4IC8q
IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QkIzNEEzQjI1MzU5NUQ0MDAwMjlEMDggLyogR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMTFGM0QyNEZBRDM2MDAwNUJFRjEwIC8qIFNldHRpbmdzLmNw
cC5lcmIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU2V0dGluZ3MuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MwMTFGM0UyNEZBRDM2MDAwNUJFRjEwIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQu
Y3BwLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNGMjRGQUQzNjAwMDVCRUYxMCAvKiBJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmlkbC5lcmIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5pZGwuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYxNDIsNiArMjYxNDYs
OCBAQAogCQkJCTMxM0RFODZEMjNBOTY5NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5j
cHAgKi8sCiAJCQkJMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdM
LmggKi8sCiAJCQkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcy5oICovLAorCQkJCTdCQjM0QTNCMjUzNTk1RDQwMDAyOUQwOCAvKiBHcmFwaGlj
c0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLywKKwkJCQk3QkIzNEEzOTI1MzU5NUQ0MDAw
MjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAogCQkJCTBGMDAx
MjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKIAkJCQkw
RjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJ
CTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKQEAgLTMw
NjU0LDcgKzMwNjYwLDYgQEAKIAkJCQk1MTc0MUQwRjBCMDcyNTlBMDBFRDQ0MkMgLyogQmFja0Zv
cndhcmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDODFFMTFFM0QzNjkwMDgxMkZC
NyAvKiBCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTFCODdE
MjA4N0M0QzAwMDk3OUE3NSAvKiBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjk0NzIxNzI1MzIzQzIxMDBGMTUzQzggLyogQmFja2dyb3VuZEltYWdlR2Vv
bWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTI0RUU4MEMyNjQxQ0QwMDlFMjM0OSAvKiBC
YXJQcm9wLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjBCQjYxNjFEMEExQkYwMDAyMjE4MTIgLyog
QmFzZTY0VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzE5OEZCRjI0QTE2MEREMDA0
MjBCMDUgLyogQmFzZUF1ZGlvQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDgwOSw2ICsz
NDgxNCw3IEBACiAJCQkJMUFCN0ZDODgwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoVmFyaWFibGVS
ZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUU4QjlDMjQxMzE5NTAwMEU3OTRENiAv
KiBYUkVudmlyb25tZW50QmxlbmRNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVFOEI5NzI0
MTMxOTUwMDBFNzk0RDYgLyogWFJFeWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQjM0QTNDMjUz
NTk1RDUwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUVFOEI4RjI0MTMxOTUwMDBFNzk0RDYgLyogWFJGcmFtZVJlcXVlc3RD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRThCOTIyNDEzMTk1MDAwRTc5NEQ2IC8q
IFhSSGFuZGVkbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRThCOUYyNDEzMTk1MDAwRTc5
NEQ2IC8qIFhSSW5wdXRTb3VyY2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTg0MCw2ICsz
NTg0Niw3IEBACiAJCQkJREU1Rjg1MTMxRkExQTRGODAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U0
MTcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MTQxRkExQTRGODAwNkRCNjNBIC8qIFVu
aWZpZWRTb3VyY2U0MTguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MTUxRkExQTRGODAw
NkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U0MTkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0JCMzRB
M0UyNTM1OTVFMzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MTYxRkExQTRGODAwNkRCNjNBIC8qIFVuaWZpZWRT
b3VyY2U0MjAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MTcxRkExQTRGODAwNkRCNjNB
IC8qIFVuaWZpZWRTb3VyY2U0MjEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MTgxRkEx
QTRGODAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U0MjIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwCmluZGV4IGI1ZmNmOTNkODcyYWFlMzVjYzhjYjY4NmM4Njk0YTVmZTZhZTMzYjkuLmEzMWZl
YTAzMTFkMDIxYzBiODJhYTMzNmU1ZWIyOGNjOTk3MDMyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zMDAy
LDkgKzMwMDIsOSBAQCBHQ0dMdWludCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjptYXhUcmFuc2Zv
cm1GZWVkYmFja1NlcGFyYXRlQXR0cmlicygpIGNvbnN0CiAgICAgcmV0dXJuIG1fbWF4VHJhbnNm
b3JtRmVlZGJhY2tTZXBhcmF0ZUF0dHJpYnM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhY2tQaXhlbFN0
b3JlUGFyYW1zKCkgY29uc3QKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlBpeGVsU3RvcmVQ
YXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBj
b25zdAogewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBh
cmFtczsKKyAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKICAgICBwYXJhbXMuYWxpZ25tZW50
ID0gbV9wYWNrQWxpZ25tZW50OwogICAgIHBhcmFtcy5yb3dMZW5ndGggPSBtX3BhY2tSb3dMZW5n
dGg7CiAgICAgcGFyYW1zLnNraXBQaXhlbHMgPSBtX3BhY2tTa2lwUGl4ZWxzOwpAQCAtMzAxMiw5
ICszMDEyLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3QKICAgICByZXR1cm4gcGFyYW1zOwog
fQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9u
IGRpbWVuc2lvbikgY29uc3QKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlBpeGVsU3RvcmVQ
YXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhU
ZXhJbWFnZURpbWVuc2lvbiBkaW1lbnNpb24pIGNvbnN0CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOworICAgIFBpeGVsU3RvcmVQYXJhbXMg
cGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBtX3VucGFja0FsaWdubWVudDsKICAgICBw
YXJhbXMucm93TGVuZ3RoID0gbV91bnBhY2tSb3dMZW5ndGg7CiAgICAgcGFyYW1zLnNraXBQaXhl
bHMgPSBtX3VucGFja1NraXBQaXhlbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNTAzYzUwZDc3MjQ0Mjk3NzBjYThh
ZGVlNTg2ZTU3YWNjNWY3MWRmNC4uYmVjZDI5M2IxZDZkMDZlYjU4MmE1ZTBhNDEzMDBmMmNkYWU5
MjVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaApAQCAtMjU2LDggKzI1Niw4IEBAIHB1YmxpYzoKIAogICAgIEdDR0x1aW50
IG1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVBdHRyaWJzKCkgY29uc3Q7CiAKLSAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBnZXRQYWNrUGl4ZWxTdG9yZVBh
cmFtcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhl
bFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24p
IGNvbnN0IG92ZXJyaWRlOworICAgIFBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1Bp
eGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA3
NzY5MzkzODFmNmNhMDMyMGRjNTM5ZjUzMzhlZjlkNzcxODQ0YjQ5Li5hMzRjYTg1NWQ3NWI1OGQy
ZDQ5NWY2Nzk5MWE5N2U0ZDZhOWVkYzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNTAsNiArNTAs
NyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQu
aCIKQEAgLTQ4ODgsNyArNDg4OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIoVGV4SW1hZ2VGdW5jdGlvbklECiAgICAgICAg
IEFTU0VSVChzb3VyY2VUeXBlID09IFRleEltYWdlRGltZW5zaW9uOjpUZXgyRCk7CiAgICAgICAg
IC8vIE9ubHkgZW50ZXIgaGVyZSBpZiB3aWR0aCBvciBoZWlnaHQgaXMgbm9uLXplcm8uIE90aGVy
d2lzZSwgY2FsbCB0byB0aGUKICAgICAgICAgLy8gdW5kZXJseWluZyBkcml2ZXIgdG8gZ2VuZXJh
dGUgYXBwcm9wcmlhdGUgR0wgZXJyb3JzIGlmIG5lZWRlZC4KLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgdW5wYWNrUGFyYW1zID0gZ2V0VW5wYWNrUGl4
ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbjo6VGV4MkQpOworICAgICAgICBQaXhlbFN0
b3JlUGFyYW1zIHVucGFja1BhcmFtcyA9IGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1h
Z2VEaW1lbnNpb246OlRleDJEKTsKICAgICAgICAgR0NHTGludCBkYXRhU3RvcmVXaWR0aCA9IHVu
cGFja1BhcmFtcy5yb3dMZW5ndGggPyB1bnBhY2tQYXJhbXMucm93TGVuZ3RoIDogd2lkdGg7CiAg
ICAgICAgIGlmICh1bnBhY2tQYXJhbXMuc2tpcFBpeGVscyArIHdpZHRoID4gZGF0YVN0b3JlV2lk
dGgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiSW52YWxpZCB1bnBhY2sgcGFyYW1zIGNv
bWJpbmF0aW9uLiIpOwpAQCAtNDk0NSw3ICs0OTQ2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhJbWFnZUltcGwoVGV4SW1hZ2VGdW5jdGlvbklEIGZ1bmN0aW9uSUQsIEdD
R0wKICAgICBpZiAobV91bnBhY2tGbGlwWSkKICAgICAgICAgYWRqdXN0ZWRTb3VyY2VJbWFnZVJl
Y3Quc2V0WShpbWFnZS0+aGVpZ2h0KCkgLSBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5tYXhZKCkp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0
cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUsIGlnbm9yZU5hdGl2ZUlt
YWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhh
LCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMOjpOT05F
LCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIGlmICghaW1h
Z2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJiYWQg
aW1hZ2UgZGF0YSIpOwogICAgICAgICByZXR1cm47CkBAIC02MzA3LDE3ICs2MzA4LDE3IEBAIFJl
ZlB0cjxJbnQzMkFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFy
cmF5UGFyYW1ldGVyKEdDR0xlbnVtCiAgICAgcmV0dXJuIEludDMyQXJyYXk6OnRyeUNyZWF0ZSh2
YWx1ZSwgbGVuZ3RoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQ
YXJhbXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFja1BpeGVsU3RvcmVQYXJhbXMo
KSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxTdG9yZVBhcmFtcygpIGNvbnN0CiB7
Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwor
ICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBtX3Bh
Y2tBbGlnbm1lbnQ7CiAgICAgcmV0dXJuIHBhcmFtczsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5w
YWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbiBkaW1lbnNpb24pIGNvbnN0CitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24g
ZGltZW5zaW9uKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShkaW1lbnNpb24pOwotICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICBQaXhl
bFN0b3JlUGFyYW1zIHBhcmFtczsKICAgICBwYXJhbXMuYWxpZ25tZW50ID0gbV91bnBhY2tBbGln
bm1lbnQ7CiAgICAgcmV0dXJuIHBhcmFtczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAppbmRleCAyMDZhY2UzNTUw
YWI5YTE2MzFjNTM1MzY0ZmFjMTkyM2Y4NTVlYmVlLi5lMmEwN2E1YmM1NmRhMDI0ZGFlMDIxMTdj
ZjczYmZiNDQ5N2Y5Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCkBAIC04NTEsOSArODUxLDkgQEAgcHJvdGVj
dGVkOgogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMc2l6ZWkgYnl0ZUxlbmd0aCwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIHRleFN1
YkltYWdlMkRCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ5dGVMZW5ndGgsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGdldFRleEltYWdlRnVuY3Rpb25OYW1lKFRleEltYWdlRnVuY3Rpb25JRCk7Ci0K
LSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdl
dFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRl
eEltYWdlRGltZW5zaW9uKSBjb25zdDsKKyAgICB1c2luZyBQaXhlbFN0b3JlUGFyYW1zID0gR3Jh
cGhpY3NDb250ZXh0R0w6OlBpeGVsU3RvcmVQYXJhbXM7CisgICAgdmlydHVhbCBQaXhlbFN0b3Jl
UGFyYW1zIGdldFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3Q7CisgICAgdmlydHVhbCBQaXhl
bFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24p
IGNvbnN0OwogCiAjaWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggMTZjYzEwYzc3ZTJmNjZk
ZTBhYTc5ODAzOWI3ODM2NGVhOTZkZjg3OS4uYTE2ZjU4ZGIzYTQwYTRhZTU3ZmY5YTdhYzExNThk
Nzg3MWEzZWZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMzEsOSArMzEsMzc5IEBACiAjaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKyNpbmNs
dWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZ2V0RGF0YUZvcm1h
dChHQ0dMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0NHTGVudW0gZGVzdGluYXRpb25UeXBlKQor
eworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlw
ZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgICAgIHN3aXRjaCAo
ZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVE
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOF9TOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHOF9TOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOF9TOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOF9TOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVEOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
ODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzg7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
X0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJBODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CisgICAgICAgIHN3aXRjaCAoZGVzdGlu
YXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVH
RVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjE2X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSRzE2X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZfUzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2
X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBzd2l0Y2ggKGRlc3Rp
bmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRF
R0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlIxNjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6RDE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lO
VEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6CisgICAgICAgIHN3aXRjaCAoZGVzdGlu
YXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVH
RVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyX1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSRzMyX1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJfUzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMy
X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5h
dGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdF
UjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSMzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRF
R0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkEzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJl
X2hhbGZfZmxvYXQKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgorICAg
ICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZGOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JH
QjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0IxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3Rl
eHR1cmVfZmxvYXQKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyRjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpB
MzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxVTUlOQU5DRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkY7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkQzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMy
RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTU1NTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX1NIT1JUXzVfNl81OgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCNTY1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1OTk5OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkRTMjRfODsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZf
MTFGX1JFVjoKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjEwRjExRjExRjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gZHN0Rm9ybWF0OworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB1bnNpZ25l
ZCB0ZXhlbEJ5dGVzRm9yRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlI4X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTg6CisgICAg
ICAgIHJldHVybiAxOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
ODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzhfUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkE0NDQ0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkQxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0I4X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QkdSODoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQThfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCODoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBODoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjMyX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEyXzEwXzEwXzEwOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjEwRjExRjExRjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1OTk5OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkcxNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMzJGOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkRTMjRfODoKKyAgICAgICAgcmV0dXJuIDQ7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY6CisgICAgICAgIHJldHVybiA2OworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHMzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukcz
Ml9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJGOgorICAg
ICAgICByZXR1cm4gODsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMl9TOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjoKKyAgICAgICAg
cmV0dXJuIDEyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEz
MjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJfUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOgorICAgICAgICBy
ZXR1cm4gMTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisK
Ky8vIEhlbHBlciBmb3IgcGFja0ltYWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4dHJhY3RUZXh0
dXJlRGF0YSB3aGljaCBpbXBsZW1lbnQgcGFja2luZyBvZiBwaXhlbAorLy8gZGF0YSBpbnRvIHRo
ZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KKy8vIEEgc291
cmNlVW5wYWNrQWxpZ25tZW50IG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIHNvdXJjZQorLy8g
ZGF0YSBpcyB0aWdodGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtlIGEgc2xvdyBw
YXRoLgorLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVuIHJvd3Mu
CitzdGF0aWMgYm9vbCBwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHNvdXJj
ZURhdGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlRGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxw
aGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVChk
ZXB0aCA+PSAxKTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlRGF0YUhlaWdodCk7IC8vIERlcml2
ZWQgZnJvbSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpLgorICAgIGlmICghdW5wYWNr
SW1hZ2VIZWlnaHQpCisgICAgICAgIHVucGFja0ltYWdlSGVpZ2h0ID0gc291cmNlRGF0YVN1YlJl
Y3RhbmdsZS5oZWlnaHQoKTsKKyAgICBpbnQgdmFsaWRTcmMgPSBzb3VyY2VEYXRhV2lkdGggKiB0
ZXhlbEJ5dGVzRm9yRm9ybWF0KHNvdXJjZURhdGFGb3JtYXQpOworICAgIGludCByZW1haW5kZXIg
PSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpIDogMDsKKyAgICBpbnQgc3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlkU3JjICsgc291
cmNlVW5wYWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOworICAgIGludCBzcmNS
b3dPZmZzZXQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLngoKSAqIHRleGVsQnl0ZXNGb3JGb3Jt
YXQoc291cmNlRGF0YUZvcm1hdCk7CisKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dCBkc3REYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChkZXN0aW5hdGlvbkZvcm1hdCwgZGVzdGlu
YXRpb25UeXBlKTsKKyAgICBpbnQgZHN0U3RyaWRlID0gc291cmNlRGF0YVN1YlJlY3RhbmdsZS53
aWR0aCgpICogdGV4ZWxCeXRlc0ZvckZvcm1hdChkc3REYXRhRm9ybWF0KTsKKyAgICBpZiAoZmxp
cFkpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRl
c3RpbmF0aW9uRGF0YSkgKyBkc3RTdHJpZGUgKiAoKGRlcHRoICogc291cmNlRGF0YVN1YlJlY3Rh
bmdsZS5oZWlnaHQoKSkgLSAxKTsKKyAgICAgICAgZHN0U3RyaWRlID0gLWRzdFN0cmlkZTsKKyAg
ICB9CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHRHTDo6aGFzQWxwaGEoc291cmNlRGF0YUZvcm1h
dCkgfHwgIUdyYXBoaWNzQ29udGV4dEdMOjpoYXNDb2xvcihzb3VyY2VEYXRhRm9ybWF0KSB8fCAh
R3JhcGhpY3NDb250ZXh0R0w6Omhhc0NvbG9yKGRzdERhdGFGb3JtYXQpKQorICAgICAgICBhbHBo
YU9wID0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZzsKKworICAgIGlmIChz
b3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nKSB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJh
c2VQdHIgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1YlJlY3RhbmdsZS55
KCk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3Ry
aWRlICogc291cmNlRGF0YVN1YlJlY3RhbmdsZS5tYXhZKCk7CisKKyAgICAgICAgLy8gSWYgcGFj
a2luZyBtdWx0aXBsZSBpbWFnZXMgaW50byBhIDNEIHRleHR1cmUsIGFuZCBmbGlwWSBpcyB0cnVl
LAorICAgICAgICAvLyB0aGVuIHRoZSBzdWItcmVjdGFuZ2xlIGlzIHBvaW50aW5nIGF0IHRoZSBz
dGFydCBvZiB0aGUKKyAgICAgICAgLy8gImJvdHRvbW1vc3QiIG9mIHRob3NlIGltYWdlcy4gU2lu
Y2UgdGhlIHNvdXJjZSBwb2ludGVyIHN0cmlkZXMgaW4KKyAgICAgICAgLy8gdGhlIHBvc2l0aXZl
IGRpcmVjdGlvbiwgd2UgbmVlZCB0byBiYWNrIGl0IHVwIHRvIHBvaW50IGF0IHRoZQorICAgICAg
ICAvLyBsYXN0LCBvciAidG9wbW9zdCIsIG9mIHRoZXNlIGltYWdlcy4KKyAgICAgICAgaWYgKGZs
aXBZICYmIGRlcHRoID4gMSkgeworICAgICAgICAgICAgY29uc3QgcHRyZGlmZl90IGRpc3RhbmNl
VG9Ub3BJbWFnZSA9IChkZXB0aCAtIDEpICogc3JjU3RyaWRlICogdW5wYWNrSW1hZ2VIZWlnaHQ7
CisgICAgICAgICAgICBiYXNlUHRyIC09IGRpc3RhbmNlVG9Ub3BJbWFnZTsKKyAgICAgICAgICAg
IGJhc2VFbmQgLT0gZGlzdGFuY2VUb1RvcEltYWdlOworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgcm93U2l6ZSA9IChkc3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsK
KyAgICAgICAgdWludDhfdCogZHN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9u
RGF0YSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKSB7CisgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBiYXNlUHRyOworICAgICAgICAgICAgY29uc3Qg
dWludDhfdCogcHRyRW5kID0gYmFzZUVuZDsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBwdHJF
bmQpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0LCBwdHIgKyBzcmNSb3dPZmZzZXQsIHJv
d1NpemUpOworICAgICAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7CisgICAgICAgICAgICAg
ICAgZHN0ICs9IGRzdFN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJhc2VQdHIg
Kz0gdW5wYWNrSW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7CisgICAgICAgICAgICBiYXNlRW5kICs9
IHVucGFja0ltYWdlSGVpZ2h0ICogc3JjU3RyaWRlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIoCisgICAgICAg
IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUsIGRlcHRoLAorICAgICAgICB1bnBhY2tJbWFnZUhlaWdo
dCwgc291cmNlRGF0YSwgZGVzdGluYXRpb25EYXRhLAorICAgICAgICBzcmNTdHJpZGUsIHNyY1Jv
d09mZnNldCwgZHN0U3RyaWRlKTsKKyAgICBjb252ZXJ0ZXIuY29udmVydChzb3VyY2VEYXRhRm9y
bWF0LCBkc3REYXRhRm9ybWF0LCBhbHBoYU9wKTsKKyAgICBpZiAoIWNvbnZlcnRlci5zdWNjZXNz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCiBHcmFw
aGljc0NvbnRleHRHTDo6R3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJzLCBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0wqKQog
ICAgIDogbV9hdHRycyhhdHRycykKICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCkBA
IC0xODQsNiArNTU0LDMzMiBAQCB1aW50OF90IEdyYXBoaWNzQ29udGV4dEdMOjpnZXRDaGFubmVs
Qml0c0J5Rm9ybWF0KEdDR0xlbnVtIGZvcm1hdCkKICAgICB9CiB9CiAKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0R0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBi
eXRlc1BlckNvbXBvbmVudCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlO
QU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfQ09NUE9ORU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6
IC8vIFRyZWF0IGl0IGFzIG9uZSBjb21wb25lbnQuCisgICAgICAgICpjb21wb25lbnRzUGVyUGl4
ZWwgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhl
bCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAzOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9
IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpCWVRFOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGJ5dGUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
OgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVieXRlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CisgICAgICAgICpi
eXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMc2hvcnQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgKmJ5dGVz
UGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICpjb21wb25lbnRz
UGVyUGl4ZWwgPSAxOworICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVz
aG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoK
KyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xpbnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
ICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAg
KmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNp
emVvZihHQ0dMdWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICAqYnl0ZXNQZXJDb21wb25l
bnQgPSBzaXplb2YoR0NHTGZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxG
X0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICAqYnl0ZXNQZXJD
b21wb25lbnQgPSBzaXplb2YoR0NHTGhhbGZmbG9hdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKKyAg
ICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCkgKyBzaXplb2YoR0NH
THVpbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHQ0dMZW51bSBHcmFwaGljc0NvbnRl
eHRHTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwg
Y29uc3QgUGl4ZWxTdG9yZVBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRl
cywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5dGVzKQor
eworICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVzKTsKKyAgICBBU1NFUlQocGFyYW1zLmFsaWdu
bWVudCA9PSAxIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gMiB8fCBwYXJhbXMuYWxpZ25tZW50ID09
IDQgfHwgcGFyYW1zLmFsaWdubWVudCA9PSA4KTsKKyAgICBBU1NFUlQocGFyYW1zLnJvd0xlbmd0
aCA+PSAwKTsKKyAgICBBU1NFUlQocGFyYW1zLmltYWdlSGVpZ2h0ID49IDApOworICAgIEFTU0VS
VChwYXJhbXMuc2tpcFBpeGVscyA+PSAwKTsKKyAgICBBU1NFUlQocGFyYW1zLnNraXBSb3dzID49
IDApOworICAgIEFTU0VSVChwYXJhbXMuc2tpcEltYWdlcyA+PSAwKTsKKyAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDAgfHwgZGVwdGggPCAwKQorICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0IHx8ICFk
ZXB0aCkgeworICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7CisgICAgICAgIGlmIChwYWRk
aW5nSW5CeXRlcykKKyAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7CisgICAgICAgIGlm
IChza2lwU2l6ZUluQnl0ZXMpCisgICAgICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gMDsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKKyAgICB9CisKKyAgICBp
bnQgcm93TGVuZ3RoID0gcGFyYW1zLnJvd0xlbmd0aCA+IDAgPyBwYXJhbXMucm93TGVuZ3RoIDog
d2lkdGg7CisgICAgaW50IGltYWdlSGVpZ2h0ID0gcGFyYW1zLmltYWdlSGVpZ2h0ID4gMCA/IHBh
cmFtcy5pbWFnZUhlaWdodCA6IGhlaWdodDsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9u
ZW50LCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21w
b25lbnQpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTTsK
KyAgICB1bnNpZ25lZCBieXRlc1Blckdyb3VwID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25l
bnRzUGVyUGl4ZWw7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihyb3dMZW5ndGgpOworICAgIGNoZWNrZWRW
YWx1ZSAqPSBieXRlc1Blckdyb3VwOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisK
KyAgICB1bnNpZ25lZCBsYXN0Um93U2l6ZTsKKyAgICBpZiAocGFyYW1zLnJvd0xlbmd0aCA+IDAg
JiYgcGFyYW1zLnJvd0xlbmd0aCAhPSB3aWR0aCkgeworICAgICAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gdG1wID0gd2lkdGg7CisgICAgICAgIHRtcCAqPSBieXRlc1Blckdy
b3VwOworICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICAgICAgbGFzdFJvd1NpemUg
PSB0bXAudW5zYWZlR2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGxhc3RSb3dTaXplID0gY2hl
Y2tlZFZhbHVlLnVuc2FmZUdldCgpOworCisgICAgdW5zaWduZWQgcGFkZGluZyA9IDA7CisgICAg
dW5zaWduZWQgcmVzaWR1YWwgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCkgJSBwYXJhbXMuYWxp
Z25tZW50OworICAgIGlmIChyZXNpZHVhbCkgeworICAgICAgICBwYWRkaW5nID0gcGFyYW1zLmFs
aWdubWVudCAtIHJlc2lkdWFsOworICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFkZGluZzsKKyAg
ICB9CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCBwYWRkZWRS
b3dTaXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworCisgICAgQ2hlY2tlZDx1aW50MzJf
dCwgUmVjb3JkT3ZlcmZsb3c+IHJvd3MgPSBpbWFnZUhlaWdodDsKKyAgICByb3dzICo9IChkZXB0
aCAtIDEpOworICAgIC8vIExhc3QgaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IElNQUdFX0hFSUdI
VCBwYXJhbWV0ZXIuCisgICAgcm93cyArPSBoZWlnaHQ7CisgICAgaWYgKHJvd3MuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7
CisgICAgY2hlY2tlZFZhbHVlICo9IChyb3dzIC0gMSk7CisgICAgLy8gTGFzdCByb3cgaXMgbm90
IGFmZmVjdGVkIGJ5IFJPV19MRU5HVEggcGFyYW1ldGVyLgorICAgIGNoZWNrZWRWYWx1ZSArPSBs
YXN0Um93U2l6ZTsKKyAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICppbWFnZVNp
emVJbkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworICAgIGlmIChwYWRkaW5nSW5C
eXRlcykKKyAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKKworICAgIENoZWNrZWQ8
dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBza2lwU2l6ZSA9IDA7CisgICAgaWYgKHBhcmFtcy5z
a2lwSW1hZ2VzID4gMCkgeworICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gdG1wID0gcGFkZGVkUm93U2l6ZTsKKyAgICAgICAgdG1wICo9IGltYWdlSGVpZ2h0OworICAg
ICAgICB0bXAgKj0gcGFyYW1zLnNraXBJbWFnZXM7CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFOworICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7CisgICAgfQorICAgIGlm
IChwYXJhbXMuc2tpcFJvd3MgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29y
ZE92ZXJmbG93PiB0bXAgPSBwYWRkZWRSb3dTaXplOworICAgICAgICB0bXAgKj0gcGFyYW1zLnNr
aXBSb3dzOworICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICAgICAgc2tpcFNpemUg
Kz0gdG1wLnVuc2FmZUdldCgpOworICAgIH0KKyAgICBpZiAocGFyYW1zLnNraXBQaXhlbHMgPiAw
KSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBieXRl
c1Blckdyb3VwOworICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBQaXhlbHM7CisgICAgICAgIGlm
ICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7
CisgICAgfQorICAgIGlmIChza2lwU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICBpZiAoc2tpcFNpemVJbkJ5
dGVzKQorICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gc2tpcFNpemUudW5zYWZlR2V0KCk7CisK
KyAgICBjaGVja2VkVmFsdWUgKz0gc2tpcFNpemUudW5zYWZlR2V0KCk7CisgICAgaWYgKGNoZWNr
ZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9S
OworfQorCisjaWYgIVVTRShBTkdMRSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OnBvc3NpYmxl
Rm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
Q0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSkKK3sKKyNkZWZpbmUgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1hY3Jv
KSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86IFwKKyAgICAgICAgZm9ybWF0ID0gZm9ybWF0TWFj
cm87IFwKKyAgICAgICAgdHlwZSA9IHR5cGVNYWNybzsgXAorICAgICAgICBicmVhazsKKworICAg
IHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSR0IsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUkdCQSwgUkdCQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoTFVNSU5BTkNFX0FMUEhBLCBMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVE
X0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKExVTUlOQU5DRSwgTFVN
SU5BTkNFLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShBTFBIQSwgQUxQSEEsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFI4LCBSRUQsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFI4X1NOT1JNLCBSRUQsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFIxNkYsIFJFRCwgSEFMRl9GTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUjMyRiwgUkVELCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoUjhVSSwgUkVEX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFI4SSwgUkVEX0lOVEVHRVIsIEJZVEUpOworICAgICAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxNlVJLCBSRURfSU5URUdFUiwgVU5TSUdORURf
U0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxNkksIFJFRF9JTlRF
R0VSLCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjMyVUksIFJF
RF9JTlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKFIzMkksIFJFRF9JTlRFR0VSLCBJTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKFJHOCwgUkcsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFJHOF9TTk9STSwgUkcsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFJHMTZGLCBSRywgSEFMRl9GTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoUkczMkYsIFJHLCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUkc4VUksIFJHX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHOEksIFJHX0lOVEVHRVIsIEJZVEUpOworICAgICAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHMTZVSSwgUkdfSU5URUdFUiwgVU5TSUdORURfU0hP
UlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHMTZJLCBSR19JTlRFR0VS
LCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkczMlVJLCBSR19J
TlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KFJHMzJJLCBSR19JTlRFR0VSLCBJTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKFJHQjgsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoU1JHQjgsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkdCNTY1LCBSR0IsIFVOU0lHTkVEX1NIT1JUXzVfNl81KTsKKyAgICAg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4X1NOT1JNLCBSR0IsIEJZVEUpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxMUZfRzExRl9CMTBGLCBSR0IsIFVOU0lH
TkVEX0lOVF8xMEZfMTFGXzExRl9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKFJHQjlfRTUsIFJHQiwgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWKTsKKyAgICAgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxNkYsIFJHQiwgSEFMRl9GTE9BVCk7CisgICAgICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJGLCBSR0IsIEZMT0FUKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4VUksIFJHQl9JTlRFR0VSLCBVTlNJR05FRF9C
WVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4SSwgUkdCX0lOVEVH
RVIsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjE2VUksIFJH
Ql9JTlRFR0VSLCBVTlNJR05FRF9TSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkdCMTZJLCBSR0JfSU5URUdFUiwgU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFJHQjMyVUksIFJHQl9JTlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjMySSwgUkdCX0lOVEVHRVIsIElOVCk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCQTgsIFJHQkEsIFVOU0lHTkVEX0JZ
VEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFNSR0I4X0FMUEhBOCwgUkdC
QSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdC
QThfU05PUk0sIFJHQkEsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KFJHQjVfQTEsIFJHQkEsIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQkE0LCBSR0JBLCBVTlNJR05FRF9TSE9SVF80XzRfNF80KTsK
KyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxMF9BMiwgUkdCQSwgVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSR0JBMTZGLCBSR0JBLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSR0JBMzJGLCBSR0JBLCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUkdCQThVSSwgUkdCQV9JTlRFR0VSLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOEksIFJHQkFfSU5URUdFUiwgQllURSk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMTBfQTJVSSwgUkdCQV9JTlRFR0VS
LCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFJHQkExNlVJLCBSR0JBX0lOVEVHRVIsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMTZJLCBSR0JBX0lOVEVHRVIsIFNIT1JU
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMzJJLCBSR0JBX0lOVEVH
RVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCQTMyVUksIFJH
QkFfSU5URUdFUiwgVU5TSUdORURfSU5UKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShERVBUSF9DT01QT05FTlQxNiwgREVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEhfQ09NUE9ORU5ULCBERVBU
SF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShERVBUSF9DT01QT05FTlQyNCwgREVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9JTlQp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERFUFRIX0NPTVBPTkVOVDMyRiwg
REVQVEhfQ09NUE9ORU5ULCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoREVQVEhfU1RFTkNJTCwgREVQVEhfU1RFTkNJTCwgVU5TSUdORURfSU5UXzI0XzgpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERFUFRIMjRfU1RFTkNJTDgsIERFUFRIX1NU
RU5DSUwsIFVOU0lHTkVEX0lOVF8yNF84KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShERVBUSDMyRl9TVEVOQ0lMOCwgREVQVEhfU1RFTkNJTCwgRkxPQVRfMzJfVU5TSUdORURf
SU5UXzI0XzhfUkVWKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNp
b25zR0w6OlNSR0JfRVhULCBFeHRlbnNpb25zR0w6OlNSR0JfRVhULCBVTlNJR05FRF9CWVRFKTsK
KyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zR0w6OlNSR0JfQUxQ
SEFfRVhULCBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhULCBVTlNJR05FRF9CWVRFKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI3VuZGVmIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmIC8vICFVU0Uo
QU5HTEUpCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OnBhY2tJbWFnZURhdGEoSW1hZ2UqIGlt
YWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
Ym9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5z
aWduZWQgc291cmNlSW1hZ2VXaWR0aCwgdW5zaWduZWQgc291cmNlSW1hZ2VIZWlnaHQsIGNvbnN0
IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNv
dXJjZVVucGFja0FsaWdubWVudCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhcGl4ZWxzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1dCBkYXRhIGlz
IHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgUGl4ZWxTdG9yZVBhcmFtcyBw
YXJhbXM7CisgICAgcGFyYW1zLmFsaWdubWVudCA9IDE7CisgICAgaWYgKGNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwg
c291cmNlSW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRT
aXplLCBudWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAg
IGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMp
LCBzb3VyY2VGb3JtYXQsIHNvdXJjZUltYWdlV2lkdGgsIHNvdXJjZUltYWdlSGVpZ2h0LCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5wYWNr
SW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9
IGltYWdlLT5pbWFnZU9ic2VydmVyKCkpCisgICAgICAgIG9ic2VydmVyLT5kaWREcmF3KCppbWFn
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJh
Y3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwg
aW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQor
eworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHdp
ZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBpbWFnZURhdGEtPmhl
aWdodCgpOworCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRwdXQgZGF0YSBp
cyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAgIFBpeGVsU3RvcmVQYXJhbXMg
cGFyYW1zOworICAgIHBhcmFtcy5hbGlnbm1lbnQgPSAxOworICAgIGlmIChjb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLndpZHRoKCks
IHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLmhlaWdodCgpLCBkZXB0aCwgcGFyYW1zLCAmcGFja2Vk
U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CisKKyAg
ICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1
bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFP
cDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZ
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
U3RvcmVQYXJhbXMmIHVucGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICAv
LyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQu
CisgICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQs
IHR5cGUpOworCisgICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIHVuc2lnbmVk
IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYgKCFjb21wdXRl
Rm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVs
LCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJQaXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50
OworICAgIGRhdGEucmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhlbCk7CisKKyAg
ICB1bnNpZ25lZCBpbWFnZVNpemVJbkJ5dGVzLCBza2lwU2l6ZUluQnl0ZXM7CisgICAgY29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCB1bnBhY2tQ
YXJhbXMsICZpbWFnZVNpemVJbkJ5dGVzLCBudWxscHRyLCAmc2tpcFNpemVJbkJ5dGVzKTsKKyAg
ICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBp
eGVscyk7CisgICAgaWYgKHNraXBTaXplSW5CeXRlcykKKyAgICAgICAgc3JjRGF0YSArPSBza2lw
U2l6ZUluQnl0ZXM7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMoc3JjRGF0YSwgc291cmNlRGF0YUZv
cm1hdCwgdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGggOiB3
aWR0aCwgaGVpZ2h0LCBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCAxLCB1bnBhY2tQYXJh
bXMuYWxpZ25tZW50LCAwLCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhhID8gQWxwaGFP
cDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0YSgpLCBmbGlw
WSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAppbmRl
eCA5ZmVlNzJmMmM3MmIxYjZlZmVjZWM3NzhkNTZkMGVlNTViMjkxYjBlLi5jMDMyZTA0YjFkYmQ4
YjQzNmE0YTJiODg0NDBmMzQ2NjU3OWQ1NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTg4OCw2
ICs4ODksMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgY2xhc3MgQ2xpZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tcG9zaXRlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VD
b250ZXh0TG9zdCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGVDb250ZXh0KCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNh
dGlvbigpID0gMDsKKyAgICB9OworCiAgICAgc3RydWN0IEFjdGl2ZUluZm8gewogICAgICAgICBT
dHJpbmcgbmFtZTsKICAgICAgICAgR0NHTGVudW0gdHlwZTsKQEAgLTg5Nyw2ICs5MDcsOSBAQCBw
dWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
LCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dEdM
KiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0
R0woKSA9IGRlZmF1bHQ7CiAKKyAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNsaWVudCkgeyBt
X2NsaWVudHMuYWRkKCZjbGllbnQpOyB9CisgICAgdm9pZCByZW1vdmVDbGllbnQoQ2xpZW50JiBj
bGllbnQpIHsgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsgfQorCiAgICAgLy8gPT09PT09PT09
PSBXZWJHTCAxIGVudHJ5IHBvaW50cy4KIAogICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJl
KEdDR0xlbnVtIHRleHR1cmUpID0gMDsKQEAgLTEyNTMsMTMgKzEyNjYsOTAgQEAgcHVibGljOgog
CiAgICAgLy8gPT09PT09PT09PSBOb24tV2ViR0wgYmFzZWQgZW50cnkgcG9pbnRzLgogCisgICAg
dmlydHVhbCB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpID0gMDsKKworICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlVXNlZEZv
ckNyZWF0aW9uKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBTeW50aGVzaXplcyBhbiBPcGVuR0wgZXJyb3Igd2hp
Y2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEKKyAgICAvLyBsYXRlciBjYWxsIHRvIGdldEVycm9y
LiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBPcGVuR0wgRVMKKyAgICAvLyAyLjAgYmVoYXZpb3Ig
b24gdGhlIGRlc2t0b3AgYW5kIHRvIGVuZm9yY2UgYWRkaXRpb25hbCBlcnJvcgorICAgIC8vIGNo
ZWNraW5nIG1hbmRhdGVkIGJ5IFdlYkdMLgorICAgIC8vCisgICAgLy8gUGVyIHRoZSBiZWhhdmlv
ciBvZiBnbEdldEVycm9yLCB0aGlzIHN0b3JlcyBhdCBtb3N0IG9uZQorICAgIC8vIGluc3RhbmNl
IG9mIGFueSBnaXZlbiBlcnJvciwgYW5kIHJldHVybnMgdGhlbSBmcm9tIGNhbGxzIHRvCisgICAg
Ly8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZC4KKyAgICB2aXJ0dWFsIHZv
aWQgc3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHByZXBhcmVGb3JEaXNwbGF5KCkgPSAwOworCisjaWYgIVVTRShBTkdMRSkKKyAgICAvLyBIZWxw
ZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6
ZWQgdG8gMC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXpl
ZC4KKyAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0
IHNldHRpbmcuCisgICAgdmlydHVhbCBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpID0gIDA7CisjZW5kaWYK
KworICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVy
biBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOyB9CisKICAgICBzdGF0
aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQ0dMZW51bSk7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5Rm9ybWF0KEdDR0xlbnVtKTsKIAogICAgIHN0
YXRpYyB1aW50OF90IGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0NHTGVudW0pOwogCisgICAgc3Ry
dWN0IFBpeGVsU3RvcmVQYXJhbXMgZmluYWwgeworICAgICAgICBHQ0dMaW50IGFsaWdubWVudCB7
IDQgfTsKKyAgICAgICAgR0NHTGludCByb3dMZW5ndGggeyAwIH07CisgICAgICAgIEdDR0xpbnQg
aW1hZ2VIZWlnaHQgeyAwIH07CisgICAgICAgIEdDR0xpbnQgc2tpcFBpeGVscyB7IDAgfTsKKyAg
ICAgICAgR0NHTGludCBza2lwUm93cyB7IDAgfTsKKyAgICAgICAgR0NHTGludCBza2lwSW1hZ2Vz
IHsgMCB9OworICAgIH07CisKKyAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBwZXIgcGl4
ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKKyAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBh
bmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGVpdGhlciB3YXMg
YW4gaW52YWxpZCBlbnVtLgorICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFy
YW1ldGVycyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21wb25l
bnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCk7CisKKyAgICAvLyBDb21w
dXRlcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMgaXMgbm90IG51
bGwsIHBhZGRpbmcKKyAgICAvLyBpcyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJuLiBSZXR1cm5z
IE5PX0VSUk9SIGlmIHN1Y2NlZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVybiB0aGUgc3VnZ2Vz
dGVkIEdMIGVycm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlOgorICAgIC8v
ICAgSU5WQUxJRF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Igb3ZlcmZsb3cg
aGFwcGVucy4KKyAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2Fs
LgorICAgIHN0YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTHNpemVpIGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWduZWQqIGltYWdl
U2l6ZUluQnl0ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXpl
SW5CeXRlcyk7CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9y
bWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dM
ZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSk7CisjZW5kaWYgLy8gIVVTRShBTkdMRSkKKwor
ICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8g
dGhlIHBhc3NlZCBWZWN0b3IsCisgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKKyAgICAvLyBhbmQgb2JleWluZyB0aGUg
ZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQorICAgIC8vIHVw
b24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSos
IERhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBpbnQg
ZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZXh0cmFjdHMgdGhlIHVzZXIt
c3VwcGxpZWQgdGV4dHVyZQorICAgIC8vIGRhdGEsIGFwcGx5aW5nIHRoZSBmbGlwWSBhbmQgcHJl
bXVsdGlwbHlBbHBoYSBwYXJhbWV0ZXJzLgorICAgIC8vIElmIHRoZSBkYXRhIGlzIG5vdCB0aWdo
dGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZAorICAgIC8vIHVucGFja1BhcmFtcywg
dGhlIG91dHB1dCBkYXRhIHdpbGwgYmUgdGlnaHRseSBwYWNrZWQuCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGFueSBlcnJvciBvY2N1cnJlZC4KKyAgICBzdGF0
aWMgYm9vbCBleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1z
JiB1bnBhY2tQYXJhbXMsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgY29uc3Qg
dm9pZCogcGl4ZWxzLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgLy8gUGFja3MgdGhl
IGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wg
aW50byB0aGUgcGFzc2VkIFZlY3RvcgorICAgIC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9y
bWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIEFscGhhT3AgZmxhZ3MuCisg
ICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBwYWNrSW1h
Z2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1
bnNpZ25lZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29u
c3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQg
c291cmNlVW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSk7CisKICAgICBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIGludCBtX2N1cnJlbnRXaWR0
aCB7IDAgfTsKKyAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OworICAgIEhhc2hTZXQ8Q2xp
ZW50Kj4gbV9jbGllbnRzOworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBtX2F0dHJzOwogICAgIERlc3RpbmF0aW9uIG1fZGVzdGluYXRpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZjUxNDcyZjExMDg1ODM4
ZjJkYmVjMWVkNTMzNWU0ZWUzZjI2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VI
dG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9u
KQoreworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGlt
YWdlSHRtbERvbVNvdXJjZTsKKyAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2Uo
cHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGlnbm9yZU5hdGl2
ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5YjBjOWZiMWU2MzlkOTlm
OTgzN2ZlMDZkZjBhYzcwMjk2Yzk3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaApAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3RvciB7CitwdWJsaWM6CisgICAgdXNpbmcg
RE9NU291cmNlID0gR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTsKKyAgICB1c2luZyBEYXRh
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ7CisgICAgdXNpbmcgQWxwaGFP
cCA9IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOworICAgIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IoSW1hZ2UqLCBET01Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhh
UHJlbXVsdGlwbGljYXRpb24pOworCisgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUg
YW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNl
IHJlc291cmNlcworICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgor
ICAgIH5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCk7CisKKyAgICBib29sIGV4dHJh
Y3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4dHJhY3RTdWNjZWVkZWQ7IH0KKyAgICBjb25zdCB2
b2lkKiBpbWFnZVBpeGVsRGF0YSgpIHsgcmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7IH0KKyAgICB1
bnNpZ25lZCBpbWFnZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9CisgICAgdW5zaWdu
ZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9CisgICAgRGF0YUZvcm1h
dCBpbWFnZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7IH0KKyAg
ICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQorICAgIHVuc2ln
bmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudDsgfQorICAgIERPTVNvdXJjZSBpbWFnZUh0bWxEb21Tb3VyY2UoKSB7IHJl
dHVybiBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQorcHJpdmF0ZToKKyAgICAvLyBFYWNoIHBsYXRm
b3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KKyAgICAv
LyBFeHRyYWN0cyB0aGUgaW1hZ2UgYW5kIGtlZXBzIHRyYWNrIG9mIGl0cyBzdGF0dXMsIHN1Y2gg
YXMgd2lkdGgsIGhlaWdodCwgU291cmNlIEFsaWdubWVudCwgZm9ybWF0IGFuZCBBbHBoYU9wIGV0
YywKKyAgICAvLyBuZWVkcyB0byBsb2NrIHRoZSByZXNvdXJjZXMgb3IgcmVsZXZhbnQgZGF0YSBp
ZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MKKyAgICBib29sIGV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworI2lm
IFVTRShDQUlSTykKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlU3VyZmFjZTsK
KyNlbGlmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOworICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKKyAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBtX3BpeGVsRGF0YTsKKyAgICBVbmlxdWVBcnJheTx1aW50OF90PiBtX2Zvcm1hbGl6
ZWRSR0JBOERhdGE7CisjZW5kaWYKKyAgICBJbWFnZSogbV9pbWFnZTsKKyAgICBET01Tb3VyY2Ug
bV9pbWFnZUh0bWxEb21Tb3VyY2U7CisgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVkZWQ7CisgICAg
Y29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKKyAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7
CisgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKKyAgICBEYXRhRm9ybWF0IG1faW1hZ2VTb3Vy
Y2VGb3JtYXQ7CisgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAgdW5zaWduZWQgbV9pbWFnZVNv
dXJjZVVucGFja0FsaWdubWVudDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwCmluZGV4IGQ0NzFjNDIyY2M0NzI4YmZlY2YzMGU5MWY2OTI3ZjE0ZTE3
MjZkYzUuLjQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0ZTEwYjhlMzgwNTgxYzkxYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC03MDcsMTEgKzcwNyw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IGdsOjpGbHVzaCgpOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXggMDY5
NzVhNDEzOWExOWRhNzc3NmUwMjA4MjE0NDJmZTViY2IyZTBmNy4uZmFkYjI0M2U2NzhiNzI3ZjEw
YjBiNmIzYjJlOTBmMDU4YmQzOTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYg
VVNFKENBSVJPKQogCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCkBA
IC0zOSw5ICs0MCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CitH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjp+R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCitib29sIEdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCmluZGV4IDdjYzM5NjkyZGUy
YzFjN2Y4NDY2ZjQ1YTk2YWUxNWE1NTQ3MTBmNWUuLmJiOTFkZWM5MTIyNGQ0MTk3ZWNhODFiYmRi
YzRlMDU2N2U0M2MwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCkBAIC0zMTcsOSArMzE4LDkgQEAgdm9pZCBj
b252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNy
Y0Zvcm1hdCwgY29uc3QgdWkKIAogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VF
eHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZh
dWx0OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0
cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdu
b3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIGlmICghbV9pbWFn
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5jcHAKaW5kZXggYzFmOTI2NWIxNjk1YTVkNjRjMzdjZmFmNWM4YzA0ZGMwOWM1ODFiMC4uNWJl
NWE5ZDY3M2I2ZGEwOWRmMjNkOGI1MjRmZDgyM2NiNmM4OTNkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwCkBAIC0zMSwyNDYgKzMxLDEwIEBACiAjaWYgRU5BQkxFKEdS
QVBISUNTX0NPTlRFWFRfR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKLSNpbmNsdWRl
ICJGb3JtYXRDb252ZXJ0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVl
QXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgewotCi1HcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdDR0xlbnVtIGRlc3RpbmF0aW9u
Rm9ybWF0LCBHQ0dMZW51bSBkZXN0aW5hdGlvblR5cGUpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkE4OwotICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QllURToKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0I4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQkE4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdF
UjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKLSAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Ci0g
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTg7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTSE9SVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZfUzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZf
UzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IxNl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpE
MTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSRzE2OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTY7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OklOVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJfUzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJf
UzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IzMl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJfUzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6Ci0g
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMy
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
X0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkczMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRp
b25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZG
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0IxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6Ukc6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkcxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJFRDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAgICBz
d2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyRjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U1JHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81
XzlfOV85X1JFVjoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQjU5OTk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgotICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVY6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBMl8xMF8xMF8xMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBkc3RGb3JtYXQ7
Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZXNldEJ1ZmZlcnNUb0F1dG9DbGVhcigpCiB7CiAgICAgR0NHTHVpbnQgYnVmZmVy
cyA9IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUOwpAQCAtMzA3LDEzICs3MSwx
NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVQcmVzZXJ2ZURyYXdpbmdC
dWZmZXIoKQogICAgIG1fYnVmZmVyc1RvQXV0b0NsZWFyID0gMDsKIH0KIAorI2lmICFVU0UoQU5H
TEUpCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1lbnQpCiB7CiAg
ICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8
IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKICAgICBVbmlx
dWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBzaXplOwotICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgcGFyYW1zOwogICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxpZ25tZW50Owog
ICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwgbnVsbHB0cik7
CiAgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKQEAg
LTMyOSw0ODQgKzk0LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGUKICAgICB9CiAgICAgcmV0
dXJuIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKIH0KKyNlbmRpZgogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMo
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCB1bnNpZ25lZCogY29tcG9uZW50c1BlclBp
eGVsLCB1bnNpZ25lZCogYnl0ZXNQZXJDb21wb25lbnQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9TVEVOQ0lMOiAvLyBUcmVhdCBpdCBhcyBvbmUgY29tcG9uZW50LgotICAgICAgICAq
Y29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUOgotICAgICAgICAqY29tcG9uZW50c1Bl
clBpeGVsID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkJHUkFfRVhUOiAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAgICAgICpjb21w
b25lbnRzUGVyUGl4ZWwgPSA0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6QllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDR0xieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdD
R0x1Ynl0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNI
T1JUOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHNob3J0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdXNob3J0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82
XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAg
ICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50
ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dM
aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfSU5UOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVpbnQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRf
MjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8x
MUZfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85
X1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8x
MF9SRVY6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAg
KmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAg
ICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xoYWxmZmxvYXQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05FRF9J
TlRfMjRfOF9SRVY6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMZmxv
YXQpICsgc2l6ZW9mKEdDR0x1aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmICFV
U0UoQU5HTEUpCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFu
ZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0m
IGZvcm1hdCwgR0NHTGVudW0mIHR5cGUpCi17Ci0jZGVmaW5lIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoaW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGVNYWNybykgY2FzZSBp
bnRlcm5hbEZvcm1hdE1hY3JvOiBcCi0gICAgICAgIGZvcm1hdCA9IGZvcm1hdE1hY3JvOyBcCi0g
ICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3JvOyBcCi0gICAg
ICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAg
ICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkxV
TUlOQU5DRSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSAgICAgICwgVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpBTFBIQSAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjggICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAgLCBVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJF
RCAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZGICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6UjMyRiAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAg
ICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4VUkgICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSOEkgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAs
IEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjE2VUkgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkkg
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgU0hPUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjMySSAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHOCAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAg
ICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk0gICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRyAgICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UkcxNkYgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAg
ICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
RzhVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdfSU5URUdFUiAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSSAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURf
U0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSRzE2SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R19JTlRFR0VSICAgICAsIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHMzJJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVH
RVIgICAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4ICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6U1JHQjggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAg
LCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NSAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4
X1NOT1JNICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEJZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEYgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTUgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfSU5U
XzVfOV85XzlfUkVWICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IxNkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ig
ICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJGICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjhVSSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VS
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SSAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCMTZVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBV
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJ
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVE
X0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UkdCMzJJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4ICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpTUkdCOF9BTFBIQTggICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAg
ICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThfU05PUk0gICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjVfQTEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAg
ICwgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNCAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdC
MTBfQTIgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJ
R05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkEgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkdCQThVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QV9JTlRFR0VSICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SSAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgQllURSAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IxMF9BMlVJICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVH
RVIgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUkgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkExNkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwg
U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMy
VUkgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05F
RF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2ICwgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05F
TlQgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5ULCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRiwg
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgRkxPQVQgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9TVEVOQ0lMICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lM
ICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMOCAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCAgLCBVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIMzJGX1NURU5DSUw4ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICwgRkxP
QVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQgICAgICAgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6
U1JHQl9FWFQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhU
ICAgICAgICAgLCBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUICAgICAgLCBVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0jdW5kZWYgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKLQotR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKAotICAgIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFy
YW1zJiBwYXJhbXMsCi0gICAgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsIHVuc2lnbmVkKiBw
YWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcykKLXsKLSAgICBBU1NFUlQo
aW1hZ2VTaXplSW5CeXRlcyk7Ci0gICAgQVNTRVJUKHBhcmFtcy5hbGlnbm1lbnQgPT0gMSB8fCBw
YXJhbXMuYWxpZ25tZW50ID09IDIgfHwgcGFyYW1zLmFsaWdubWVudCA9PSA0IHx8IHBhcmFtcy5h
bGlnbm1lbnQgPT0gOCk7Ci0gICAgQVNTRVJUKHBhcmFtcy5yb3dMZW5ndGggPj0gMCk7Ci0gICAg
QVNTRVJUKHBhcmFtcy5pbWFnZUhlaWdodCA+PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLnNraXBQ
aXhlbHMgPj0gMCk7Ci0gICAgQVNTRVJUKHBhcmFtcy5za2lwUm93cyA+PSAwKTsKLSAgICBBU1NF
UlQocGFyYW1zLnNraXBJbWFnZXMgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwIHx8IGRlcHRoIDwgMCkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCB8fCAhZGVwdGgpIHsKLSAgICAg
ICAgKmltYWdlU2l6ZUluQnl0ZXMgPSAwOwotICAgICAgICBpZiAocGFkZGluZ0luQnl0ZXMpCi0g
ICAgICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSAwOwotICAgICAgICBpZiAoc2tpcFNpemVJbkJ5
dGVzKQotICAgICAgICAgICAgKnNraXBTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Ci0gICAgfQotCi0gICAgaW50IHJvd0xlbmd0aCA9
IHBhcmFtcy5yb3dMZW5ndGggPiAwID8gcGFyYW1zLnJvd0xlbmd0aCA6IHdpZHRoOwotICAgIGlu
dCBpbWFnZUhlaWdodCA9IHBhcmFtcy5pbWFnZUhlaWdodCA+IDAgPyBwYXJhbXMuaW1hZ2VIZWln
aHQgOiBoZWlnaHQ7Ci0KLSAgICB1bnNpZ25lZCBieXRlc1BlckNvbXBvbmVudCwgY29tcG9uZW50
c1BlclBpeGVsOwotICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1h
dCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU07Ci0gICAgdW5zaWduZWQg
Ynl0ZXNQZXJHcm91cCA9IGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9uZW50c1BlclBpeGVsOwot
ICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkVmFsdWUgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocm93TGVuZ3RoKTsKLSAgICBjaGVja2VkVmFsdWUgKj0gYnl0ZXNQ
ZXJHcm91cDsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotCi0gICAgdW5zaWduZWQg
bGFzdFJvd1NpemU7Ci0gICAgaWYgKHBhcmFtcy5yb3dMZW5ndGggPiAwICYmIHBhcmFtcy5yb3dM
ZW5ndGggIT0gd2lkdGgpIHsKLSAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IHRtcCA9IHdpZHRoOwotICAgICAgICB0bXAgKj0gYnl0ZXNQZXJHcm91cDsKLSAgICAgICAg
aWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgICAgIGxhc3RSb3dTaXplID0gdG1wLnVuc2FmZUdl
dCgpOwotICAgIH0gZWxzZQotICAgICAgICBsYXN0Um93U2l6ZSA9IGNoZWNrZWRWYWx1ZS51bnNh
ZmVHZXQoKTsKLQotICAgIHVuc2lnbmVkIHBhZGRpbmcgPSAwOwotICAgIHVuc2lnbmVkIHJlc2lk
dWFsID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpICUgcGFyYW1zLmFsaWdubWVudDsKLSAgICBp
ZiAocmVzaWR1YWwpIHsKLSAgICAgICAgcGFkZGluZyA9IHBhcmFtcy5hbGlnbm1lbnQgLSByZXNp
ZHVhbDsKLSAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7Ci0gICAgfQotICAgIGlmIChj
aGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgdW5zaWduZWQgcGFkZGVkUm93U2l6ZSA9IGNoZWNr
ZWRWYWx1ZS51bnNhZmVHZXQoKTsKLQotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJm
bG93PiByb3dzID0gaW1hZ2VIZWlnaHQ7Ci0gICAgcm93cyAqPSAoZGVwdGggLSAxKTsKLSAgICAv
LyBMYXN0IGltYWdlIGlzIG5vdCBhZmZlY3RlZCBieSBJTUFHRV9IRUlHSFQgcGFyYW1ldGVyLgot
ICAgIHJvd3MgKz0gaGVpZ2h0OwotICAgIGlmIChyb3dzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgIGNoZWNrZWRW
YWx1ZSAqPSAocm93cyAtIDEpOwotICAgIC8vIExhc3Qgcm93IGlzIG5vdCBhZmZlY3RlZCBieSBS
T1dfTEVOR1RIIHBhcmFtZXRlci4KLSAgICBjaGVja2VkVmFsdWUgKz0gbGFzdFJvd1NpemU7Ci0g
ICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IGNo
ZWNrZWRWYWx1ZS51bnNhZmVHZXQoKTsKLSAgICBpZiAocGFkZGluZ0luQnl0ZXMpCi0gICAgICAg
ICpwYWRkaW5nSW5CeXRlcyA9IHBhZGRpbmc7Ci0KLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gc2tpcFNpemUgPSAwOwotICAgIGlmIChwYXJhbXMuc2tpcEltYWdlcyA+IDAp
IHsKLSAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRtcCA9IHBhZGRl
ZFJvd1NpemU7Ci0gICAgICAgIHRtcCAqPSBpbWFnZUhlaWdodDsKLSAgICAgICAgdG1wICo9IHBh
cmFtcy5za2lwSW1hZ2VzOwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAg
c2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgpOwotICAgIH0KLSAgICBpZiAocGFyYW1zLnNraXBS
b3dzID4gMCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG1w
ID0gcGFkZGVkUm93U2l6ZTsKLSAgICAgICAgdG1wICo9IHBhcmFtcy5za2lwUm93czsKLSAgICAg
ICAgaWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVH
ZXQoKTsKLSAgICB9Ci0gICAgaWYgKHBhcmFtcy5za2lwUGl4ZWxzID4gMCkgewotICAgICAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG1wID0gYnl0ZXNQZXJHcm91cDsKLSAg
ICAgICAgdG1wICo9IHBhcmFtcy5za2lwUGl4ZWxzOwotICAgICAgICBpZiAodG1wLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRTsKLSAgICAgICAgc2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgpOwotICAgIH0KLSAgICBp
ZiAoc2tpcFNpemUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgaWYgKHNraXBTaXplSW5CeXRlcykKLSAgICAgICAg
KnNraXBTaXplSW5CeXRlcyA9IHNraXBTaXplLnVuc2FmZUdldCgpOwotCi0gICAgY2hlY2tlZFZh
bHVlICs9IHNraXBTaXplLnVuc2FmZUdldCgpOwotICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUU7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXM6OlBpeGVsU3RvcmVQYXJhbXMoKQot
ICAgIDogYWxpZ25tZW50KDQpCi0gICAgLCByb3dMZW5ndGgoMCkKLSAgICAsIGltYWdlSGVpZ2h0
KDApCi0gICAgLCBza2lwUGl4ZWxzKDApCi0gICAgLCBza2lwUm93cygwKQotICAgICwgc2tpcElt
YWdlcygwKQotewotfQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6
OkltYWdlRXh0cmFjdG9yKEltYWdlKiBpbWFnZSwgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJj
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
LCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKLXsKLSAgICBt
X2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBpbWFnZUh0bWxEb21T
b3VyY2U7Ci0gICAgbV9leHRyYWN0U3VjY2VlZGVkID0gZXh0cmFjdEltYWdlKHByZW11bHRpcGx5
QWxwaGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBpZ25vcmVOYXRpdmVJbWFnZUFscGhh
UHJlbXVsdGlwbGljYXRpb24pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
YWNrSW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AgYWxwaGFPcCwgRGF0YUZv
cm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNv
dXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
aW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFn
ZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXBp
eGVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgcGFja2VkU2l6ZTsK
LSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgot
ICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwotICAgIHBhcmFtcy5hbGlnbm1lbnQgPSAxOwot
ICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLndpZHRoKCksIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLmhlaWdodCgpLCBk
ZXB0aCwgcGFyYW1zLCAmcGFja2VkU2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikgIT0gR3JhcGhpY3ND
b250ZXh0R0w6Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGF0YS5yZXNp
emUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRm9ybWF0LCBzb3VyY2VJbWFnZVdpZHRoLCBz
b3VyY2VJbWFnZUhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFscGhhT3As
IGRhdGEuZGF0YSgpLCBmbGlwWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBv
YnNlcnZlci0+ZGlkRHJhdygqaW1hZ2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpleHRyYWN0SW1hZ2VEYXRhKAotICAgIEltYWdlRGF0YSog
aW1hZ2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNv
dXJjZUltYWdlU3ViUmVjdGFuZ2xlLAotICAgIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVp
Z2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICghaW1hZ2VE
YXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53
aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFnZURhdGEtPmhlaWdodCgpOwotCi0gICAgdW5z
aWduZWQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAo
YWxpZ25tZW50ID09IDEpLgotICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwotICAgIHBhcmFt
cy5hbGlnbm1lbnQgPSAxOwotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLndpZHRoKCksIHNvdXJjZUltYWdlU3ViUmVj
dGFuZ2xlLmhlaWdodCgpLCBkZXB0aCwgcGFyYW1zLCAmcGFja2VkU2l6ZSwgbnVsbHB0ciwgbnVs
bHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMo
aW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1bnBhY2tJbWFnZUhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6
IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMm
IHVucGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2
b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKLXsKLSAgICAvLyBBc3N1bWVzIGZv
cm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCi0gICAgRGF0YUZv
cm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQsIHR5cGUpOwotCi0g
ICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQ
ZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlw
ZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJD
b21wb25lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgYnl0ZXNQZXJQ
aXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50OwotICAgIGRhdGEu
cmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhlbCk7Ci0KLSAgICB1bnNpZ25lZCBp
bWFnZVNpemVJbkJ5dGVzLCBza2lwU2l6ZUluQnl0ZXM7Ci0gICAgY29tcHV0ZUltYWdlU2l6ZUlu
Qnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCB1bnBhY2tQYXJhbXMsICZpbWFn
ZVNpemVJbkJ5dGVzLCBudWxscHRyLCAmc2tpcFNpemVJbkJ5dGVzKTsKLSAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyk7Ci0gICAg
aWYgKHNraXBTaXplSW5CeXRlcykKLSAgICAgICAgc3JjRGF0YSArPSBza2lwU2l6ZUluQnl0ZXM7
Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMoc3JjRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgdW5wYWNr
UGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGggOiB3aWR0aCwgaGVpZ2h0
LCBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCAxLCB1bnBhY2tQYXJhbXMuYWxpZ25tZW50
LCAwLCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVtdWx0
aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0YSgpLCBmbGlwWSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIHVu
c2lnbmVkIFRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQg
Zm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UjhfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODoK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHOF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTQ0NDQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEx
NkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6RDE2OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjhfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpCR1I4OgotICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFS
R0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEz
MkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSRzE2X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
RDMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMkY6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OgotICAgICAgICByZXR1
cm4gNDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjoKLSAgICAgICAgcmV0dXJuIDY7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkczMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSRzMyX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY6
Ci0gICAgICAgIHJldHVybiA4OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMy
X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOgotICAg
ICAgICByZXR1cm4gMTI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9T
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY6Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhY2tQaXhlbHMoY29uc3QgdWludDhf
dCogc291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCBzb3Vy
Y2VEYXRhV2lkdGgsIHVuc2lnbmVkIHNvdXJjZURhdGFIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNv
dXJjZURhdGFTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxp
Z25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0
LCB1bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AgYWxwaGFPcCwgdm9pZCogZGVzdGlu
YXRpb25EYXRhLCBib29sIGZsaXBZKQotewotICAgIEFTU0VSVChkZXB0aCA+PSAxKTsKLSAgICBV
TlVTRURfUEFSQU0oc291cmNlRGF0YUhlaWdodCk7IC8vIERlcml2ZWQgZnJvbSBzb3VyY2VEYXRh
U3ViUmVjdGFuZ2xlLmhlaWdodCgpLgotICAgIGlmICghdW5wYWNrSW1hZ2VIZWlnaHQpCi0gICAg
ICAgIHVucGFja0ltYWdlSGVpZ2h0ID0gc291cmNlRGF0YVN1YlJlY3RhbmdsZS5oZWlnaHQoKTsK
LSAgICBpbnQgdmFsaWRTcmMgPSBzb3VyY2VEYXRhV2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0
KHNvdXJjZURhdGFGb3JtYXQpOwotICAgIGludCByZW1haW5kZXIgPSBzb3VyY2VVbnBhY2tBbGln
bm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpIDogMDsKLSAgICBpbnQg
c3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlkU3JjICsgc291cmNlVW5wYWNrQWxpZ25tZW50
IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOwotICAgIGludCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VE
YXRhU3ViUmVjdGFuZ2xlLngoKSAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1h
dCk7Ci0KLSAgICBEYXRhRm9ybWF0IGRzdERhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3Rp
bmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5cGUpOwotICAgIGludCBkc3RTdHJpZGUgPSBzb3Vy
Y2VEYXRhU3ViUmVjdGFuZ2xlLndpZHRoKCkgKiBUZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFG
b3JtYXQpOwotICAgIGlmIChmbGlwWSkgewotICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKSArIGRzdFN0cmlkZSAqICgoZGVwdGgg
KiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpKSAtIDEpOwotICAgICAgICBkc3RTdHJp
ZGUgPSAtZHN0U3RyaWRlOwotICAgIH0KLSAgICBpZiAoIWhhc0FscGhhKHNvdXJjZURhdGFGb3Jt
YXQpIHx8ICFoYXNDb2xvcihzb3VyY2VEYXRhRm9ybWF0KSB8fCAhaGFzQ29sb3IoZHN0RGF0YUZv
cm1hdCkpCi0gICAgICAgIGFscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7Ci0KLSAgICBpZiAo
c291cmNlRGF0YUZvcm1hdCA9PSBkc3REYXRhRm9ybWF0ICYmIGFscGhhT3AgPT0gQWxwaGFPcDo6
RG9Ob3RoaW5nKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VQdHIgPSBzb3VyY2VEYXRh
ICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1YlJlY3RhbmdsZS55KCk7Ci0gICAgICAgIGNvbnN0
IHVpbnQ4X3QqIGJhc2VFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1
YlJlY3RhbmdsZS5tYXhZKCk7Ci0KLSAgICAgICAgLy8gSWYgcGFja2luZyBtdWx0aXBsZSBpbWFn
ZXMgaW50byBhIDNEIHRleHR1cmUsIGFuZCBmbGlwWSBpcyB0cnVlLAotICAgICAgICAvLyB0aGVu
IHRoZSBzdWItcmVjdGFuZ2xlIGlzIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiB0aGUKLSAgICAg
ICAgLy8gImJvdHRvbW1vc3QiIG9mIHRob3NlIGltYWdlcy4gU2luY2UgdGhlIHNvdXJjZSBwb2lu
dGVyIHN0cmlkZXMgaW4KLSAgICAgICAgLy8gdGhlIHBvc2l0aXZlIGRpcmVjdGlvbiwgd2UgbmVl
ZCB0byBiYWNrIGl0IHVwIHRvIHBvaW50IGF0IHRoZQotICAgICAgICAvLyBsYXN0LCBvciAidG9w
bW9zdCIsIG9mIHRoZXNlIGltYWdlcy4KLSAgICAgICAgaWYgKGZsaXBZICYmIGRlcHRoID4gMSkg
ewotICAgICAgICAgICAgY29uc3QgcHRyZGlmZl90IGRpc3RhbmNlVG9Ub3BJbWFnZSA9IChkZXB0
aCAtIDEpICogc3JjU3RyaWRlICogdW5wYWNrSW1hZ2VIZWlnaHQ7Ci0gICAgICAgICAgICBiYXNl
UHRyIC09IGRpc3RhbmNlVG9Ub3BJbWFnZTsKLSAgICAgICAgICAgIGJhc2VFbmQgLT0gZGlzdGFu
Y2VUb1RvcEltYWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgcm93U2l6ZSA9IChk
c3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKLSAgICAgICAgdWludDhfdCog
ZHN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCB1aW50
OF90KiBwdHIgPSBiYXNlUHRyOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogcHRyRW5kID0g
YmFzZUVuZDsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBwdHJFbmQpIHsKLSAgICAgICAgICAg
ICAgICBtZW1jcHkoZHN0LCBwdHIgKyBzcmNSb3dPZmZzZXQsIHJvd1NpemUpOwotICAgICAgICAg
ICAgICAgIHB0ciArPSBzcmNTdHJpZGU7Ci0gICAgICAgICAgICAgICAgZHN0ICs9IGRzdFN0cmlk
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJhc2VQdHIgKz0gdW5wYWNrSW1hZ2VIZWln
aHQgKiBzcmNTdHJpZGU7Ci0gICAgICAgICAgICBiYXNlRW5kICs9IHVucGFja0ltYWdlSGVpZ2h0
ICogc3JjU3RyaWRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIoCi0gICAgICAgIHNvdXJjZURhdGFTdWJSZWN0
YW5nbGUsIGRlcHRoLAotICAgICAgICB1bnBhY2tJbWFnZUhlaWdodCwgc291cmNlRGF0YSwgZGVz
dGluYXRpb25EYXRhLAotICAgICAgICBzcmNTdHJpZGUsIHNyY1Jvd09mZnNldCwgZHN0U3RyaWRl
KTsKLSAgICBjb252ZXJ0ZXIuY29udmVydChzb3VyY2VEYXRhRm9ybWF0LCBkc3REYXRhRm9ybWF0
LCBhbHBoYU9wKTsKLSAgICBpZiAoIWNvbnZlcnRlci5zdWNjZXNzKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAogI2lmICFQTEFURk9STShDT0NPQSkKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDI1MjE5ZjhmNTMxY2FkYTNhYmY1
ZDBlNDIxNTMzNWMxMzQ3MGZlMTguLjY5ODhiZDY5Y2EwZjAxMGZhMWI2OGY2NjUzMDc4M2ViZmM2
M2Y0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC04NywyOSArODcs
MjAgQEAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNoYWRlck5hbWVI
YXNoOwogCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU7CiAKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMCitjbGFzcyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTAog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgcHJpdmF0ZSBXZWJHTExheWVyQ2xpZW50CiAjZW5k
aWYKIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dmlydHVhbCB+Q2xpZW50KCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3NpdGUo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgPSAwOwotICAgIH07Ci0K
ICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5h
dGlvbjo6T2Zmc2NyZWVuKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHRH
TE9wZW5HTD4gY3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBzaGFyZWRDb250
ZXh0KTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KLSAgICBQbGF0
Zm9ybUdMT2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
dGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9
CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9CisgICAgUGxhdGZvcm1HTE9i
amVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RleHR1cmU7IH0K
KyAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQogICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheU9iajsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxh
dGZvcm1Db25maWcoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ09iajsgfQogICAgIHN0YXRpYyBH
Q0dMZW51bSBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCk7CkBAIC0xMzAsOSArMTIxLDYgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIHJlbGVhc2VDdXJyZW50Q29udGV4dChSZWxlYXNlQmVoYXZp
b3IpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNsaWVudCkgeyBtX2Ns
aWVudHMuYWRkKCZjbGllbnQpOyB9Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoQ2xpZW50JiBjbGll
bnQpIHsgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsgfQotCiAgICAgLy8gV2l0aCBtdWx0aXNh
bXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCiAgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCkBAIC0xNDUsODEgKzEzMywxMSBAQCBwdWJsaWM6CiAg
ICAgLy8gQ29tcGlsZSBhIHNoYWRlciB3aXRob3V0IGdvaW5nIHRocm91Z2ggQU5HTEUuCiAgICAg
dm9pZCBjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QpOwogCi0gICAgLy8gSGVs
cGVyIHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxp
emVkIHRvIDAuCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6
ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVs
dCBzZXR0aW5nLgotICAgIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCk7Ci0KLSAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdDsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMg
Zm9yIHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFjay4KLSAgICAvLwotCi0gICAg
c3RydWN0IFBpeGVsU3RvcmVQYXJhbXMgZmluYWwgewotICAgICAgICBQaXhlbFN0b3JlUGFyYW1z
KCk7Ci0KLSAgICAgICAgR0NHTGludCBhbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xpbnQgcm93TGVu
Z3RoOwotICAgICAgICBHQ0dMaW50IGltYWdlSGVpZ2h0OwotICAgICAgICBHQ0dMaW50IHNraXBQ
aXhlbHM7Ci0gICAgICAgIEdDR0xpbnQgc2tpcFJvd3M7Ci0gICAgICAgIEdDR0xpbnQgc2tpcElt
YWdlczsKLSAgICB9OwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGNvbXBvbmVudHMgcGVyIHBpeGVs
IGFuZCBieXRlcyBwZXIgY29tcG9uZW50Ci0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5k
IHR5cGUgY29tYmluYXRpb24uIFJldHVybnMgZmFsc2UgaWYKLSAgICAvLyBlaXRoZXIgd2FzIGFu
IGludmFsaWQgZW51bS4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFt
ZXRlcnMoR0NHTGVudW0gZm9ybWF0LAotICAgICAgICBHQ0dMZW51bSB0eXBlLAotICAgICAgICB1
bnNpZ25lZCogY29tcG9uZW50c1BlclBpeGVsLAotICAgICAgICB1bnNpZ25lZCogYnl0ZXNQZXJD
b21wb25lbnQpOwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGltYWdlIHNpemUgaW4gYnl0ZXMuIElm
IHBhZGRpbmdJbkJ5dGVzIGlzIG5vdCBudWxsLCBwYWRkaW5nCi0gICAgLy8gaXMgYWxzbyBjYWxj
dWxhdGVkIGluIHJldHVybi4gUmV0dXJucyBOT19FUlJPUiBpZiBzdWNjZWVkLCBvdGhlcndpc2UK
LSAgICAvLyByZXR1cm4gdGhlIHN1Z2dlc3RlZCBHTCBlcnJvciBpbmRpY2F0aW5nIHRoZSBjYXVz
ZSBvZiB0aGUgZmFpbHVyZToKLSAgICAvLyAgIElOVkFMSURfVkFMVUUgaWYgd2lkdGgvaGVpZ2h0
IGlzIG5lZ2F0aXZlIG9yIG92ZXJmbG93IGhhcHBlbnMuCi0gICAgLy8gICBJTlZBTElEX0VOVU0g
aWYgZm9ybWF0L3R5cGUgaXMgaWxsZWdhbC4KLSAgICBzdGF0aWMgR0NHTGVudW0gY29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoR0NHTGVudW0gZm9ybWF0LAotICAgICAgICBHQ0dMZW51bSB0eXBlLAot
ICAgICAgICBHQ0dMc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdDR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgIEdDR0xzaXplaSBkZXB0aCwKLSAgICAgICAgY29uc3QgUGl4ZWxTdG9yZVBhcmFtcyYsCi0g
ICAgICAgIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLAotICAgICAgICB1bnNpZ25lZCogcGFk
ZGluZ0luQnl0ZXMsCi0gICAgICAgIHVuc2lnbmVkKiBza2lwU2l6ZUluQnl0ZXMpOwotCiAjaWYg
IVVTRShBTkdMRSkKLSAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRl
cm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZvcm1hdCwgR0NH
TGVudW0mIHR5cGUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCisgICAgYm9vbCB0ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQg
PSA0KSBmaW5hbDsKKyNlbmRpZgogCi0gICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKLSAgICAvLyBwYWNraW5n
IHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAot
ICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4g
UmV0dXJucyB0cnVlCi0gICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4dHJh
Y3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwKLSAgICAgICAgRGF0YUZvcm1hdCwKLSAgICAgICAgY29u
c3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsCi0gICAgICAgIGludCBkZXB0aCwK
LSAgICAgICAgaW50IHVucGFja0ltYWdlSGVpZ2h0LAotICAgICAgICBHQ0dMZW51bSBmb3JtYXQs
Ci0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1zdXBwbGllZCB0
ZXh0dXJlCi0gICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFs
cGhhIHBhcmFtZXRlcnMuCi0gICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0bHkgcGFja2Vk
IGFjY29yZGluZyB0byB0aGUgcGFzc2VkCi0gICAgLy8gdW5wYWNrUGFyYW1zLCB0aGUgb3V0cHV0
IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3Vj
Y2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgotICAgIHN0YXRpYyBib29sIGV4
dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotICAgICAg
ICBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIGNvbnN0IFBpeGVsU3Rv
cmVQYXJhbXMmIHVucGFja1BhcmFtcywKLSAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLAotICAgICAgICBjb25zdCB2b2lkKiBwaXhlbHMsCi0gICAgICAgIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CisgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3QgZmluYWw7
CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgpA
QCAtNTM3LDcgKzQ1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QnVmZmVyc1RvQXV0b0Ns
ZWFyKCk7CiAgICAgdm9pZCBzZXRCdWZmZXJzVG9BdXRvQ2xlYXIoR0NHTGJpdGZpZWxkKTsKICAg
ICBHQ0dMYml0ZmllbGQgZ2V0QnVmZmVyc1RvQXV0b0NsZWFyKCkgY29uc3Q7Ci0gICAgdm9pZCBl
bmFibGVQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSBvdmVycmlkZTsKKyAgICB2b2lkIGVuYWJsZVBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGZpbmFsOwogCiAgICAgdm9pZCBkaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCk7CiAgICAgdm9pZCBzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCk7
CkBAIC01NTAsMTcgKzQ2OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmltaXRpdmVSZXN0YXJ0
SW5kZXgoR0NHTHVpbnQpIGZpbmFsOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wgYmluZERpc3Bs
YXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tpbmcsIHZvaWQq
IHBidWZmZXIpOwotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgUExB
VEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlQ0dMQ29udGV4dCgpOwogI2VuZGlmCi0jZW5kaWYg
Ly8gUExBVEZPUk0oQ09DT0EpCiAKLSAgICB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wp
OworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CiAKLSAgICBHcmFw
aGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbjsgfQor
ICAgIEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRG
b3JDcmVhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZv
ckNyZWF0aW9uOyB9CiAKICAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRl
bGV0aW9uCiAgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVCdWZmZXIoKSBmaW5hbDsKQEAgLTU3
NywxNSArNDkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3QpIGZpbmFsOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0KSBm
aW5hbDsKIAotICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxsIGJl
IHJldHVybmVkIGZyb20gYQotICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMg
dXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUwotICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUgZGVz
a3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCi0gICAgLy8gY2hlY2tpbmcgbWFu
ZGF0ZWQgYnkgV2ViR0wuCi0gICAgLy8KLSAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGdsR2V0
RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCi0gICAgLy8gaW5zdGFuY2Ugb2YgYW55IGdp
dmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KLSAgICAvLyBnZXRFcnJv
ciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJy
b3IoR0NHTGVudW0gZXJyb3IpOworICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0g
ZXJyb3IpIGZpbmFsOwogCiAgICAgLy8gUmVhZCByZWFsIE9wZW5HTCBlcnJvcnMsIGFuZCBtb3Zl
IHRoZW0gdG8gdGhlIHN5bnRoZXRpYwogICAgIC8vIGVycm9yIGxpc3QuIFJldHVybiB0cnVlIGlm
IGF0IGxlYXN0IG9uZSBlcnJvciBpcyBtb3ZlZC4KQEAgLTU5Nyw1OSArNTAzLDggQEAgcHVibGlj
OgogICAgIC8vIGRldGVybWluZSB0aGlzLgogICAgIEV4dGVuc2lvbnNHTCYgZ2V0RXh0ZW5zaW9u
cygpIGZpbmFsOwogCi0gICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNv
bnN0OwotCi0gICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSB3aGlj
aCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3RvcgotICAgIC8vIGFj
Y29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0aGUgZmxp
cFkgYW5kIEFscGhhT3AgZmxhZ3MuCi0gICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4K
LSAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxz
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERh
dGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5n
bGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNr
SW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KLSAgICBjbGFzcyBJbWFnZUV4
dHJhY3RvciB7Ci0gICAgcHVibGljOgotICAgICAgICBJbWFnZUV4dHJhY3RvcihJbWFnZSosIERP
TVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0K
LSAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24g
b2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNlIHJlc291cmNlcwotICAgICAg
ICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlIGlmIG5lZWRlZC4KLSAgICAgICAgfkltYWdl
RXh0cmFjdG9yKCk7Ci0KLSAgICAgICAgYm9vbCBleHRyYWN0U3VjY2VlZGVkKCkgeyByZXR1cm4g
bV9leHRyYWN0U3VjY2VlZGVkOyB9Ci0gICAgICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRh
KCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQotICAgICAgICB1bnNpZ25lZCBpbWFnZVdp
ZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlSGVp
Z2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBEYXRhRm9ybWF0IGltYWdl
U291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQotICAgICAgICBB
bHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQotICAgICAgICB1bnNp
Z25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VV
bnBhY2tBbGlnbm1lbnQ7IH0KLSAgICAgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgp
IHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
Ly8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBt
ZXRob2QuCi0gICAgICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2Yg
aXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3Jt
YXQgYW5kIEFscGhhT3AgZXRjLAotICAgICAgICAvLyBuZWVkcyB0byBsb2NrIHRoZSByZXNvdXJj
ZXMgb3IgcmVsZXZhbnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nl
c3MKLSAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbik7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOwotI2VsaWYgVVNFKENHKQotICAgICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOwotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gbV9kZWNvZGVkSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fcGl4ZWxE
YXRhOwotICAgICAgICBVbmlxdWVBcnJheTx1aW50OF90PiBtX2Zvcm1hbGl6ZWRSR0JBOERhdGE7
Ci0jZW5kaWYKLSAgICAgICAgSW1hZ2UqIG1faW1hZ2U7Ci0gICAgICAgIERPTVNvdXJjZSBtX2lt
YWdlSHRtbERvbVNvdXJjZTsKLSAgICAgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVkZWQ7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIG1faW1hZ2VQaXhlbERhdGE7Ci0gICAgICAgIHVuc2lnbmVkIG1faW1h
Z2VXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKLSAgICAgICAgRGF0YUZv
cm1hdCBtX2ltYWdlU291cmNlRm9ybWF0OwotICAgICAgICBBbHBoYU9wIG1fYWxwaGFPcDsKLSAg
ICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsKLSAgICB9OwotCi0g
ICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgeyBtX2ZhaWxOZXh0U3RhdHVzQ2hl
Y2sgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgZmluYWwg
eyBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOyB9CiAKLSAgICBHQ0dMZW51bSBhY3RpdmVU
ZXh0dXJlVW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQ7IH0K
LSAgICBHQ0dMZW51bSBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCk7IH0KLSAgICBHQ0dMZW51bSBjdXJyZW50Qm91bmRUYXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRhcmdldCgpOyB9CiAgICAg
dW5zaWduZWQgdGV4dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkgeyByZXR1cm4gbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmNvdW50KHRleHR1cmUpOyB9CiAKICNpZiBQTEFURk9STShNQUMpCkBA
IC02NTcsMTcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JlZW5EaWRDaGFuZ2UoUGxh
dGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCk7
CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdp
bmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKIAotICAgIC8vIEhlbHBlciBm
b3IgcGFja0ltYWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4dHJhY3RUZXh0dXJlRGF0YSB3aGlj
aCBpbXBsZW1lbnQgcGFja2luZyBvZiBwaXhlbAotICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lm
aWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCi0gICAgLy8gQSBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCi0gICAgLy8g
ZGF0YSBpcyB0aWdodGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtlIGEgc2xvdyBw
YXRoLgotICAgIC8vIERlc3RpbmF0aW9uIGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMgYmV0d2VlbiBy
b3dzLgotICAgIHN0YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0
YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VEYXRhV2lkdGgs
IHVuc2lnbmVkIHNvdXJjZURhdGFIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZURhdGFTdWJS
ZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBpbnQg
dW5wYWNrSW1hZ2VIZWlnaHQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNpZ25lZCBk
ZXN0aW5hdGlvblR5cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlw
WSk7CiAKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250
ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFu
ZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKQEAgLTY5NSwxMyArNTQ0
LDEyIEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBib29sIGFsbG93T2Zm
bGluZVJlbmRlcmVycygpIGNvbnN0OworICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNr
aW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CiAgICAgLy8gV2ViR0xMYXllckNs
aWVudCBvdmVycmlkZXMuCi0gICAgdm9pZCBkaWREaXNwbGF5KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkaWREaXNwbGF5KCkgZmluYWw7CiAjZW5kaWYKIAotICAgIGludCBtX2N1cnJlbnRXaWR0aCB7
IDAgfTsKLSAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwotCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKQEAgLTg4OCw4ICs3
MzYsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGU+IG1fcHJpdmF0ZTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxDbGllbnQqPiBt
X2NsaWVudHM7Ci0KICAgICBib29sIG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV91c2luZ0NvcmVQcm9maWxlIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNzQxZWU0YzE0ZWFhMjY2YTc5ZmViN2QxMjA2
MmFhYWEzY2ViNTFlMC4uYjE0YjYyZDVlNGZiZWE4ZWEyYzg3ODU2ZTdiZmVkNmI4ZDM4NjdiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC00
MjUsMTEgKzQyNSw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNN
YXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0
aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDllZjUzMWViZjk0MjI4
OTQ4ZTAzYzg2MjM0NGU0YTY4YWZkZTJiMWUuLmIxNDNmMWQ5Mzk4MzYxOWRmZjYyNWMxMWYzNjYw
MWE3MjQ1MDg4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKQEAgLTI5
LDE1ICsyOSwxNiBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoRElS
RUNUMkQpCiAKICNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
IDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJh
Y3RvcigpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwogCi1ib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVO
YXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCitib29sIEdyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uKQogewogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411317</attachid>
            <date>2020-10-14 06:03:36 -0700</date>
            <delta_ts>2020-10-14 11:45:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201014160334.patch</filename>
            <type>text/plain</type>
            <size>110480</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM2MWU1NjIxMzA1OTdj
NzY0NWVkZDY1MzgwMDlkMzIwNzk0M2JkMi4uZmMwMWNjYTNlMDZkZDIzM2FiNTcwZmZjZDU5YTI5
MTQxNzE1ZWY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTE0ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2Vi
R0wgaW1wbGVtZW50YXRpb24gdG8gdXNlIG9ubHkgR3JhcGhpY3NDb250ZXh0R0wgcGFydCAxCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTMKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnQgMSBvZiB3b3JrIHRvd2FyZHMgV2ViR0wgaW1w
bGVtZW50YXRpb24gd2hpY2ggdXNlcworICAgICAgICBHcmFwaGljc0NvbnRleHRHTCBhYnN0cmFj
dCBiYXNlIGNsYXNzIGluc3RlYWQgb2YKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
Y29uY3JldGUgY2xhc3MuCisKKyAgICAgICAgTW92ZSBwaXhlbCBkYXRhIHJlbGF0ZWQgc3RhdGlj
IGhlbHBlciBmdW5jaW9ucyBmcm9tCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHRv
IEdyYXBoaWNzQ29udGV4dEdMLiBUaGVzZSBhcmUKKyAgICAgICAgbm9ybWFsIHBpeGVsIGZvcm1h
dCBjYWxjdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgaGF2ZQorICAgICAgICBjb25jcmV0
ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNb3ZlIHBpeGVsIHBhY2sgcmVsYXRlZAor
ICAgICAgICBzdHJ1Y3R1cmVzIHRvIEdyYXBoaWNzQ29udGV4dEdMLgorCisgICAgICAgIFJlbmFt
ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgdG8KKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci4gVGhlIEdyYXBoaWNzQ29udGV4dEdMIGNsYXNz
CisgICAgICAgIGludGVyZmFjZSBpcyBhbHJlYWR5IHF1aXRlIGxlbmd0aHkgYW5kIHRoZSBpbWFn
ZSBleHRyYWN0b3IKKyAgICAgICAgaXMgbm90IHZlcnkgdGllZCB0byB0aGUgY29udGV4dCBjbGFz
cy4KKworICAgICAgICBJbnRyb2R1Y2UgYSB2aXJ0dWFsIG1lbWJlciBmdWN0aW9uIGluIEdyYXBo
aWNzQ29udGV4dEdMIGZvcgorICAgICAgICBlYWNoIGNhbGwgdGhhdCBpcyBsaWtlbHkgbmVlZGVk
IGZvciB0aGUgV2ViR0wgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBh
IHJlZmFjdG9yLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFy
YW1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleGVsQnl0ZXNGb3JGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OnBhY2tJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RUZXh0dXJlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnQ6On5DbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmFkZENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yOjpleHRyYWN0U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlUGl4ZWxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
aW1hZ2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvcjo6aW1hZ2VBbHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlSHRt
bERvbVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKwogMjAyMC0xMC0x
NCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT046IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS5odG1sIGZh
aWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IGI1ZmNmOTNkODcyYWFlMzVjYzhjYjY4NmM4Njk0YTVmZTZhZTMz
YjkuLmEzMWZlYTAzMTFkMDIxYzBiODJhYTMzNmU1ZWIyOGNjOTk3MDMyZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0zMDAyLDkgKzMwMDIsOSBAQCBHQ0dMdWludCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpt
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQXR0cmlicygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
bWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUF0dHJpYnM7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBh
Y2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3QKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlBp
eGVsU3RvcmVQYXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMoKSBjb25zdAogewotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3Jl
UGFyYW1zIHBhcmFtczsKKyAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKICAgICBwYXJhbXMu
YWxpZ25tZW50ID0gbV9wYWNrQWxpZ25tZW50OwogICAgIHBhcmFtcy5yb3dMZW5ndGggPSBtX3Bh
Y2tSb3dMZW5ndGg7CiAgICAgcGFyYW1zLnNraXBQaXhlbHMgPSBtX3BhY2tTa2lwUGl4ZWxzOwpA
QCAtMzAxMiw5ICszMDEyLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQ
YXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3QKICAgICByZXR1cm4g
cGFyYW1zOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdl
RGltZW5zaW9uIGRpbWVuc2lvbikgY29uc3QKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlBp
eGVsU3RvcmVQYXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5wYWNrUGl4ZWxTdG9y
ZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbiBkaW1lbnNpb24pIGNvbnN0CiB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOworICAgIFBpeGVsU3Rv
cmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBtX3VucGFja0FsaWdubWVu
dDsKICAgICBwYXJhbXMucm93TGVuZ3RoID0gbV91bnBhY2tSb3dMZW5ndGg7CiAgICAgcGFyYW1z
LnNraXBQaXhlbHMgPSBtX3VucGFja1NraXBQaXhlbHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNTAzYzUwZDc3MjQ0
Mjk3NzBjYThhZGVlNTg2ZTU3YWNjNWY3MWRmNC4uYmVjZDI5M2IxZDZkMDZlYjU4MmE1ZTBhNDEz
MDBmMmNkYWU5MjVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaApAQCAtMjU2LDggKzI1Niw4IEBAIHB1YmxpYzoKIAogICAg
IEdDR0x1aW50IG1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVBdHRyaWJzKCkgY29uc3Q7CiAK
LSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBnZXRQYWNrUGl4
ZWxTdG9yZVBhcmFtcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VE
aW1lbnNpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFja1Bp
eGVsU3RvcmVQYXJhbXMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQaXhlbFN0b3JlUGFyYW1zIGdl
dFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCBjaGVja0FuZFRyYW5zbGF0ZUF0dGFjaG1lbnRzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0NHTGVudW0sIFZlY3RvcjxHQ0dMZW51bT4mKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA3NzY5MzkzODFmNmNhMDMyMGRjNTM5ZjUzMzhlZjlkNzcxODQ0YjQ5Li5hMzRjYTg1
NWQ3NWI1OGQyZDQ5NWY2Nzk5MWE5N2U0ZDZhOWVkYzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
NTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRl
b0VsZW1lbnQuaCIKQEAgLTQ4ODgsNyArNDg4OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIoVGV4SW1hZ2VGdW5jdGlvbklE
CiAgICAgICAgIEFTU0VSVChzb3VyY2VUeXBlID09IFRleEltYWdlRGltZW5zaW9uOjpUZXgyRCk7
CiAgICAgICAgIC8vIE9ubHkgZW50ZXIgaGVyZSBpZiB3aWR0aCBvciBoZWlnaHQgaXMgbm9uLXpl
cm8uIE90aGVyd2lzZSwgY2FsbCB0byB0aGUKICAgICAgICAgLy8gdW5kZXJseWluZyBkcml2ZXIg
dG8gZ2VuZXJhdGUgYXBwcm9wcmlhdGUgR0wgZXJyb3JzIGlmIG5lZWRlZC4KLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgdW5wYWNrUGFyYW1zID0gZ2V0
VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbjo6VGV4MkQpOworICAgICAg
ICBQaXhlbFN0b3JlUGFyYW1zIHVucGFja1BhcmFtcyA9IGdldFVucGFja1BpeGVsU3RvcmVQYXJh
bXMoVGV4SW1hZ2VEaW1lbnNpb246OlRleDJEKTsKICAgICAgICAgR0NHTGludCBkYXRhU3RvcmVX
aWR0aCA9IHVucGFja1BhcmFtcy5yb3dMZW5ndGggPyB1bnBhY2tQYXJhbXMucm93TGVuZ3RoIDog
d2lkdGg7CiAgICAgICAgIGlmICh1bnBhY2tQYXJhbXMuc2tpcFBpeGVscyArIHdpZHRoID4gZGF0
YVN0b3JlV2lkdGgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiSW52YWxpZCB1bnBhY2sg
cGFyYW1zIGNvbWJpbmF0aW9uLiIpOwpAQCAtNDk0NSw3ICs0OTQ2LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZUltcGwoVGV4SW1hZ2VGdW5jdGlvbklEIGZ1bmN0
aW9uSUQsIEdDR0wKICAgICBpZiAobV91bnBhY2tGbGlwWSkKICAgICAgICAgYWRqdXN0ZWRTb3Vy
Y2VJbWFnZVJlY3Quc2V0WShpbWFnZS0+aGVpZ2h0KCkgLSBhZGp1c3RlZFNvdXJjZUltYWdlUmVj
dC5tYXhZKCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9y
IGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUsIGlnbm9y
ZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0
aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4
dEdMOjpOT05FLCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAg
IGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CiAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICByZXR1cm47CkBAIC02MzA3LDE3ICs2MzA4
LDE3IEBAIFJlZlB0cjxJbnQzMkFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRX
ZWJHTEludEFycmF5UGFyYW1ldGVyKEdDR0xlbnVtCiAgICAgcmV0dXJuIEludDMyQXJyYXk6OnRy
eUNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBp
eGVsU3RvcmVQYXJhbXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFja1BpeGVsU3Rv
cmVQYXJhbXMoKSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6UGl4ZWxTdG9yZVBh
cmFtcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxTdG9yZVBhcmFtcygp
IGNvbnN0CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMg
cGFyYW1zOworICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1l
bnQgPSBtX3BhY2tBbGlnbm1lbnQ7CiAgICAgcmV0dXJuIHBhcmFtczsKIH0KIAotR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbiBkaW1lbnNpb24p
IGNvbnN0CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VE
aW1lbnNpb24gZGltZW5zaW9uKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShkaW1lbnNpb24p
OwotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsK
KyAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKICAgICBwYXJhbXMuYWxpZ25tZW50ID0gbV91
bnBhY2tBbGlnbm1lbnQ7CiAgICAgcmV0dXJuIHBhcmFtczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAppbmRleCAy
MDZhY2UzNTUwYWI5YTE2MzFjNTM1MzY0ZmFjMTkyM2Y4NTVlYmVlLi5lMmEwN2E1YmM1NmRhMDI0
ZGFlMDIxMTdjZjczYmZiNDQ5N2Y5Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCkBAIC04NTEsOSArODUxLDkg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBHQ0dMc2l6ZWkgYnl0ZUxlbmd0aCwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKICAgICB2
b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTHNpemVpIGJ5dGVMZW5ndGgsIGNvbnN0IHZvaWQqIHBpeGVscyk7CiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGdldFRleEltYWdlRnVuY3Rpb25OYW1lKFRleEltYWdlRnVuY3Rp
b25JRCk7Ci0KLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3Jl
UGFyYW1zIGdldFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBnZXRVbnBhY2tQaXhlbFN0b3Jl
UGFyYW1zKFRleEltYWdlRGltZW5zaW9uKSBjb25zdDsKKyAgICB1c2luZyBQaXhlbFN0b3JlUGFy
YW1zID0gR3JhcGhpY3NDb250ZXh0R0w6OlBpeGVsU3RvcmVQYXJhbXM7CisgICAgdmlydHVhbCBQ
aXhlbFN0b3JlUGFyYW1zIGdldFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3Q7CisgICAgdmly
dHVhbCBQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VE
aW1lbnNpb24pIGNvbnN0OwogCiAjaWYgIVVTRShBTkdMRSkKICAgICBib29sIGNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKaW5kZXggMTZjYzEw
Yzc3ZTJmNjZkZTBhYTc5ODAzOWI3ODM2NGVhOTZkZjg3OS4uYTE2ZjU4ZGIzYTQwYTRhZTU3ZmY5
YTdhYzExNThkNzg3MWEzZWZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMzEsOSArMzEsMzc5IEBACiAj
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wu
aCIKKyNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZ2V0
RGF0YUZvcm1hdChHQ0dMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0NHTGVudW0gZGVzdGluYXRp
b25UeXBlKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKKyAgICBzd2l0Y2ggKGRlc3Rp
bmF0aW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVEOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
OF9TOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHOF9TOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOF9TOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOF9TOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9y
bWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTUkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVEOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURf
SU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
Rzg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CisgICAgICAgIHN3aXRj
aCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkVEX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjE2X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2X1M7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZfUzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVH
RVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTE2X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIxNjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDE2OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IxNjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6CisgICAgICAgIHN3aXRj
aCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkVEX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjMyX1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyX1M7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJfUzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVH
RVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTMyX1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgc3dpdGNo
IChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RURfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSMzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQV9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQkEzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9F
U190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZM
T0FUOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZGOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5B
TkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQ
SEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDog
Ly8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkg
eworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
RzMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpBTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVE
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlIzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQ
SEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTU1NTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1OTk5OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfODoKKyAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkRTMjRfODsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5U
XzEwRl8xMUZfMTFGX1JFVjoKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjEwRjExRjExRjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICByZXR1cm4gZHN0Rm9ybWF0OworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRp
YyB1bnNpZ25lZCB0ZXhlbEJ5dGVzRm9yRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlI4X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzhf
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZfUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkQxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I4X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QkdSODoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQThfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSODoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEyXzEwXzEwXzEwOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjEwRjExRjExRjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1OTk5OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkQzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMzJGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkRTMjRfODoKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZfUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY6CisgICAgICAgIHJldHVy
biA2OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHMzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkczMl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
MzJGOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0IzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjoK
KyAgICAgICAgcmV0dXJuIDEyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkEzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MzJfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOgor
ICAgICAgICByZXR1cm4gMTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCisKKy8vIEhlbHBlciBmb3IgcGFja0ltYWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4
dHJhY3RUZXh0dXJlRGF0YSB3aGljaCBpbXBsZW1lbnQgcGFja2luZyBvZiBwaXhlbAorLy8gZGF0
YSBpbnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4K
Ky8vIEEgc291cmNlVW5wYWNrQWxpZ25tZW50IG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIHNv
dXJjZQorLy8gZGF0YSBpcyB0aWdodGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtl
IGEgc2xvdyBwYXRoLgorLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3
ZWVuIHJvd3MuCitzdGF0aWMgYm9vbCBwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURh
dGEsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2ln
bmVkIHNvdXJjZURhdGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlRGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRp
b25Gb3JtYXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3AgYWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKQoreworICAg
IEFTU0VSVChkZXB0aCA+PSAxKTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlRGF0YUhlaWdodCk7
IC8vIERlcml2ZWQgZnJvbSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpLgorICAgIGlm
ICghdW5wYWNrSW1hZ2VIZWlnaHQpCisgICAgICAgIHVucGFja0ltYWdlSGVpZ2h0ID0gc291cmNl
RGF0YVN1YlJlY3RhbmdsZS5oZWlnaHQoKTsKKyAgICBpbnQgdmFsaWRTcmMgPSBzb3VyY2VEYXRh
V2lkdGggKiB0ZXhlbEJ5dGVzRm9yRm9ybWF0KHNvdXJjZURhdGFGb3JtYXQpOworICAgIGludCBy
ZW1haW5kZXIgPSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQpIDogMDsKKyAgICBpbnQgc3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlk
U3JjICsgc291cmNlVW5wYWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOworICAg
IGludCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLngoKSAqIHRleGVsQnl0
ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBkc3REYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChkZXN0aW5hdGlvbkZvcm1h
dCwgZGVzdGluYXRpb25UeXBlKTsKKyAgICBpbnQgZHN0U3RyaWRlID0gc291cmNlRGF0YVN1YlJl
Y3RhbmdsZS53aWR0aCgpICogdGV4ZWxCeXRlc0ZvckZvcm1hdChkc3REYXRhRm9ybWF0KTsKKyAg
ICBpZiAoZmxpcFkpIHsKKyAgICAgICAgZGVzdGluYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGRlc3RpbmF0aW9uRGF0YSkgKyBkc3RTdHJpZGUgKiAoKGRlcHRoICogc291cmNlRGF0
YVN1YlJlY3RhbmdsZS5oZWlnaHQoKSkgLSAxKTsKKyAgICAgICAgZHN0U3RyaWRlID0gLWRzdFN0
cmlkZTsKKyAgICB9CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHRHTDo6aGFzQWxwaGEoc291cmNl
RGF0YUZvcm1hdCkgfHwgIUdyYXBoaWNzQ29udGV4dEdMOjpoYXNDb2xvcihzb3VyY2VEYXRhRm9y
bWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0R0w6Omhhc0NvbG9yKGRzdERhdGFGb3JtYXQpKQorICAg
ICAgICBhbHBoYU9wID0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZzsKKwor
ICAgIGlmIChzb3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nKSB7CisgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIGJhc2VQdHIgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1YlJl
Y3RhbmdsZS55KCk7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VFbmQgPSBzb3VyY2VEYXRh
ICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1YlJlY3RhbmdsZS5tYXhZKCk7CisKKyAgICAgICAg
Ly8gSWYgcGFja2luZyBtdWx0aXBsZSBpbWFnZXMgaW50byBhIDNEIHRleHR1cmUsIGFuZCBmbGlw
WSBpcyB0cnVlLAorICAgICAgICAvLyB0aGVuIHRoZSBzdWItcmVjdGFuZ2xlIGlzIHBvaW50aW5n
IGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgLy8gImJvdHRvbW1vc3QiIG9mIHRob3NlIGlt
YWdlcy4gU2luY2UgdGhlIHNvdXJjZSBwb2ludGVyIHN0cmlkZXMgaW4KKyAgICAgICAgLy8gdGhl
IHBvc2l0aXZlIGRpcmVjdGlvbiwgd2UgbmVlZCB0byBiYWNrIGl0IHVwIHRvIHBvaW50IGF0IHRo
ZQorICAgICAgICAvLyBsYXN0LCBvciAidG9wbW9zdCIsIG9mIHRoZXNlIGltYWdlcy4KKyAgICAg
ICAgaWYgKGZsaXBZICYmIGRlcHRoID4gMSkgeworICAgICAgICAgICAgY29uc3QgcHRyZGlmZl90
IGRpc3RhbmNlVG9Ub3BJbWFnZSA9IChkZXB0aCAtIDEpICogc3JjU3RyaWRlICogdW5wYWNrSW1h
Z2VIZWlnaHQ7CisgICAgICAgICAgICBiYXNlUHRyIC09IGRpc3RhbmNlVG9Ub3BJbWFnZTsKKyAg
ICAgICAgICAgIGJhc2VFbmQgLT0gZGlzdGFuY2VUb1RvcEltYWdlOworICAgICAgICB9CisKKyAg
ICAgICAgdW5zaWduZWQgcm93U2l6ZSA9IChkc3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRz
dFN0cmlkZTsKKyAgICAgICAgdWludDhfdCogZHN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRl
c3RpbmF0aW9uRGF0YSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgKytp
KSB7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBiYXNlUHRyOworICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogcHRyRW5kID0gYmFzZUVuZDsKKyAgICAgICAgICAgIHdoaWxlIChw
dHIgPCBwdHJFbmQpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0LCBwdHIgKyBzcmNSb3dP
ZmZzZXQsIHJvd1NpemUpOworICAgICAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7CisgICAg
ICAgICAgICAgICAgZHN0ICs9IGRzdFN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJhc2VQdHIgKz0gdW5wYWNrSW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7CisgICAgICAgICAgICBi
YXNlRW5kICs9IHVucGFja0ltYWdlSGVpZ2h0ICogc3JjU3RyaWRlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIo
CisgICAgICAgIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUsIGRlcHRoLAorICAgICAgICB1bnBhY2tJ
bWFnZUhlaWdodCwgc291cmNlRGF0YSwgZGVzdGluYXRpb25EYXRhLAorICAgICAgICBzcmNTdHJp
ZGUsIHNyY1Jvd09mZnNldCwgZHN0U3RyaWRlKTsKKyAgICBjb252ZXJ0ZXIuY29udmVydChzb3Vy
Y2VEYXRhRm9ybWF0LCBkc3REYXRhRm9ybWF0LCBhbHBoYU9wKTsKKyAgICBpZiAoIWNvbnZlcnRl
ci5zdWNjZXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworCiBHcmFwaGljc0NvbnRleHRHTDo6R3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dHJzLCBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250
ZXh0R0wqKQogICAgIDogbV9hdHRycyhhdHRycykKICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCkBAIC0xODQsNiArNTU0LDMzMiBAQCB1aW50OF90IEdyYXBoaWNzQ29udGV4dEdMOjpn
ZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDR0xlbnVtIGZvcm1hdCkKICAgICB9CiB9CiAKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQ0dMZW51
bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsIHVu
c2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfQ09NUE9ORU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X1NURU5DSUw6IC8vIFRyZWF0IGl0IGFzIG9uZSBjb21wb25lbnQuCisgICAgICAgICpjb21wb25l
bnRzUGVyUGl4ZWwgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgKmNvbXBvbmVu
dHNQZXJQaXhlbCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwg
PSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQ
ZXJQaXhlbCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpCWVRFOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NH
TGJ5dGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9CWVRFOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVieXRl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6Cisg
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMc2hvcnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSAxOworICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXpl
b2YoR0NHTHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OklOVDoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xpbnQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6
CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoK
KyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBv
bmVudCA9IHNpemVvZihHQ0dMdWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICAq
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGhhbGZmbG9hdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVjoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCkgKyBz
aXplb2YoR0NHTHVpbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHQ0dMZW51bSBHcmFw
aGljc0NvbnRleHRHTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgY29uc3QgUGl4ZWxTdG9yZVBhcmFtcyYgcGFyYW1zLCB1bnNpZ25lZCogaW1hZ2VT
aXplSW5CeXRlcywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJ
bkJ5dGVzKQoreworICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVzKTsKKyAgICBBU1NFUlQocGFy
YW1zLmFsaWdubWVudCA9PSAxIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gMiB8fCBwYXJhbXMuYWxp
Z25tZW50ID09IDQgfHwgcGFyYW1zLmFsaWdubWVudCA9PSA4KTsKKyAgICBBU1NFUlQocGFyYW1z
LnJvd0xlbmd0aCA+PSAwKTsKKyAgICBBU1NFUlQocGFyYW1zLmltYWdlSGVpZ2h0ID49IDApOwor
ICAgIEFTU0VSVChwYXJhbXMuc2tpcFBpeGVscyA+PSAwKTsKKyAgICBBU1NFUlQocGFyYW1zLnNr
aXBSb3dzID49IDApOworICAgIEFTU0VSVChwYXJhbXMuc2tpcEltYWdlcyA+PSAwKTsKKyAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgZGVwdGggPCAwKQorICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgaWYgKCF3aWR0aCB8fCAhaGVp
Z2h0IHx8ICFkZXB0aCkgeworICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7CisgICAgICAg
IGlmIChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7Cisg
ICAgICAgIGlmIChza2lwU2l6ZUluQnl0ZXMpCisgICAgICAgICAgICAqc2tpcFNpemVJbkJ5dGVz
ID0gMDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKKyAgICB9
CisKKyAgICBpbnQgcm93TGVuZ3RoID0gcGFyYW1zLnJvd0xlbmd0aCA+IDAgPyBwYXJhbXMucm93
TGVuZ3RoIDogd2lkdGg7CisgICAgaW50IGltYWdlSGVpZ2h0ID0gcGFyYW1zLmltYWdlSGVpZ2h0
ID4gMCA/IHBhcmFtcy5pbWFnZUhlaWdodCA6IGhlaWdodDsKKworICAgIHVuc2lnbmVkIGJ5dGVz
UGVyQ29tcG9uZW50LCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgaWYgKCFjb21wdXRlRm9ybWF0
QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0
ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTTsKKyAgICB1bnNpZ25lZCBieXRlc1Blckdyb3VwID0gYnl0ZXNQZXJDb21wb25lbnQg
KiBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihyb3dMZW5ndGgpOworICAg
IGNoZWNrZWRWYWx1ZSAqPSBieXRlc1Blckdyb3VwOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFz
T3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUU7CisKKyAgICB1bnNpZ25lZCBsYXN0Um93U2l6ZTsKKyAgICBpZiAocGFyYW1zLnJvd0xl
bmd0aCA+IDAgJiYgcGFyYW1zLnJvd0xlbmd0aCAhPSB3aWR0aCkgeworICAgICAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG1wID0gd2lkdGg7CisgICAgICAgIHRtcCAqPSBi
eXRlc1Blckdyb3VwOworICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICAgICAgbGFz
dFJvd1NpemUgPSB0bXAudW5zYWZlR2V0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGxhc3RSb3dT
aXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworCisgICAgdW5zaWduZWQgcGFkZGluZyA9
IDA7CisgICAgdW5zaWduZWQgcmVzaWR1YWwgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCkgJSBw
YXJhbXMuYWxpZ25tZW50OworICAgIGlmIChyZXNpZHVhbCkgeworICAgICAgICBwYWRkaW5nID0g
cGFyYW1zLmFsaWdubWVudCAtIHJlc2lkdWFsOworICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFk
ZGluZzsKKyAgICB9CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25l
ZCBwYWRkZWRSb3dTaXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworCisgICAgQ2hlY2tl
ZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHJvd3MgPSBpbWFnZUhlaWdodDsKKyAgICByb3dz
ICo9IChkZXB0aCAtIDEpOworICAgIC8vIExhc3QgaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IElN
QUdFX0hFSUdIVCBwYXJhbWV0ZXIuCisgICAgcm93cyArPSBoZWlnaHQ7CisgICAgaWYgKHJvd3Mu
aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUU7CisgICAgY2hlY2tlZFZhbHVlICo9IChyb3dzIC0gMSk7CisgICAgLy8gTGFzdCBy
b3cgaXMgbm90IGFmZmVjdGVkIGJ5IFJPV19MRU5HVEggcGFyYW1ldGVyLgorICAgIGNoZWNrZWRW
YWx1ZSArPSBsYXN0Um93U2l6ZTsKKyAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQo
KSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAg
ICppbWFnZVNpemVJbkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworICAgIGlmIChw
YWRkaW5nSW5CeXRlcykKKyAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKKworICAg
IENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBza2lwU2l6ZSA9IDA7CisgICAgaWYg
KHBhcmFtcy5za2lwSW1hZ2VzID4gMCkgeworICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gdG1wID0gcGFkZGVkUm93U2l6ZTsKKyAgICAgICAgdG1wICo9IGltYWdlSGVp
Z2h0OworICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBJbWFnZXM7CisgICAgICAgIGlmICh0bXAu
aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFOworICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7CisgICAg
fQorICAgIGlmIChwYXJhbXMuc2tpcFJvd3MgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMy
X3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBwYWRkZWRSb3dTaXplOworICAgICAgICB0bXAgKj0g
cGFyYW1zLnNraXBSb3dzOworICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICAgICAg
c2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgpOworICAgIH0KKyAgICBpZiAocGFyYW1zLnNraXBQ
aXhlbHMgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0
bXAgPSBieXRlc1Blckdyb3VwOworICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBQaXhlbHM7Cisg
ICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5z
YWZlR2V0KCk7CisgICAgfQorICAgIGlmIChza2lwU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICBpZiAoc2tp
cFNpemVJbkJ5dGVzKQorICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gc2tpcFNpemUudW5zYWZl
R2V0KCk7CisKKyAgICBjaGVja2VkVmFsdWUgKz0gc2tpcFNpemUudW5zYWZlR2V0KCk7CisgICAg
aWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
Ok5PX0VSUk9SOworfQorCisjaWYgIVVTRShBTkdMRSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6
OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSkKK3sKKyNkZWZpbmUgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywg
dHlwZU1hY3JvKSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86IFwKKyAgICAgICAgZm9ybWF0ID0g
Zm9ybWF0TWFjcm87IFwKKyAgICAgICAgdHlwZSA9IHR5cGVNYWNybzsgXAorICAgICAgICBicmVh
azsKKworICAgIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKKyAgICAgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShSR0IsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkdCQSwgUkdCQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoTFVNSU5BTkNFX0FMUEhBLCBMVU1JTkFOQ0VfQUxQSEEs
IFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKExVTUlO
QU5DRSwgTFVNSU5BTkNFLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShBTFBIQSwgQUxQSEEsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFI4LCBSRUQsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFI4X1NOT1JNLCBSRUQsIEJZVEUpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxNkYsIFJFRCwgSEFMRl9GTE9BVCk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjMyRiwgUkVELCBGTE9BVCk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjhVSSwgUkVEX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOwor
ICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFI4SSwgUkVEX0lOVEVHRVIsIEJZVEUp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxNlVJLCBSRURfSU5URUdFUiwg
VU5TSUdORURfU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxNkks
IFJFRF9JTlRFR0VSLCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
UjMyVUksIFJFRF9JTlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFIzMkksIFJFRF9JTlRFR0VSLCBJTlQpOworICAgICAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKFJHOCwgUkcsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHOF9TTk9STSwgUkcsIEJZVEUpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHMTZGLCBSRywgSEFMRl9GTE9BVCk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkczMkYsIFJHLCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkc4VUksIFJHX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHOEksIFJHX0lOVEVHRVIsIEJZVEUpOwor
ICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHMTZVSSwgUkdfSU5URUdFUiwgVU5T
SUdORURfU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHMTZJLCBS
R19JTlRFR0VSLCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcz
MlVJLCBSR19JTlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFJHMzJJLCBSR19JTlRFR0VSLCBJTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFJHQjgsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoU1JHQjgsIFJHQiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCNTY1LCBSR0IsIFVOU0lHTkVEX1NIT1JUXzVfNl81
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4X1NOT1JNLCBSR0IsIEJZ
VEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFIxMUZfRzExRl9CMTBGLCBS
R0IsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFJHQjlfRTUsIFJHQiwgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWKTsKKyAg
ICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxNkYsIFJHQiwgSEFMRl9GTE9BVCk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJGLCBSR0IsIEZMT0FUKTsK
KyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4VUksIFJHQl9JTlRFR0VSLCBV
TlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I4SSwg
UkdCX0lOVEVHRVIsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJH
QjE2VUksIFJHQl9JTlRFR0VSLCBVTlNJR05FRF9TSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkdCMTZJLCBSR0JfSU5URUdFUiwgU0hPUlQpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjMyVUksIFJHQl9JTlRFR0VSLCBVTlNJR05FRF9JTlQp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjMySSwgUkdCX0lOVEVHRVIs
IElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCQTgsIFJHQkEsIFVO
U0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFNSR0I4X0FM
UEhBOCwgUkdCQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkdCQThfU05PUk0sIFJHQkEsIEJZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKFJHQjVfQTEsIFJHQkEsIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEpOworICAgICAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkE0LCBSR0JBLCBVTlNJR05FRF9TSE9SVF80
XzRfNF80KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxMF9BMiwgUkdC
QSwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShSR0JBMTZGLCBSR0JBLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShSR0JBMzJGLCBSR0JBLCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkdCQThVSSwgUkdCQV9JTlRFR0VSLCBVTlNJR05FRF9CWVRFKTsK
KyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOEksIFJHQkFfSU5URUdFUiwg
QllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMTBfQTJVSSwgUkdC
QV9JTlRFR0VSLCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQkExNlVJLCBSR0JBX0lOVEVHRVIsIFVOU0lHTkVEX1NIT1JU
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMTZJLCBSR0JBX0lOVEVH
RVIsIFNIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMzJJLCBS
R0JBX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdC
QTMyVUksIFJHQkFfSU5URUdFUiwgVU5TSUdORURfSU5UKTsKKyAgICAgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShERVBUSF9DT01QT05FTlQxNiwgREVQVEhfQ09NUE9ORU5ULCBVTlNJR05F
RF9TSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEhfQ09NUE9O
RU5ULCBERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShERVBUSF9DT01QT05FTlQyNCwgREVQVEhfQ09NUE9ORU5ULCBVTlNJ
R05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERFUFRIX0NPTVBP
TkVOVDMyRiwgREVQVEhfQ09NUE9ORU5ULCBGTE9BVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoREVQVEhfU1RFTkNJTCwgREVQVEhfU1RFTkNJTCwgVU5TSUdORURfSU5UXzI0
XzgpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERFUFRIMjRfU1RFTkNJTDgs
IERFUFRIX1NURU5DSUwsIFVOU0lHTkVEX0lOVF8yNF84KTsKKyAgICAgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShERVBUSDMyRl9TVEVOQ0lMOCwgREVQVEhfU1RFTkNJTCwgRkxPQVRfMzJf
VU5TSUdORURfSU5UXzI0XzhfUkVWKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShFeHRlbnNpb25zR0w6OlNSR0JfRVhULCBFeHRlbnNpb25zR0w6OlNSR0JfRVhULCBVTlNJR05F
RF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zR0w6
OlNSR0JfQUxQSEFfRVhULCBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhULCBVTlNJR05FRF9C
WVRFKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI3VuZGVm
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlm
IC8vICFVU0UoQU5HTEUpCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OnBhY2tJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZv
cm1hdCwgdW5zaWduZWQgc291cmNlSW1hZ2VXaWR0aCwgdW5zaWduZWQgc291cmNlSW1hZ2VIZWln
aHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVu
c2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhcGl4ZWxzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1
dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgUGl4ZWxTdG9y
ZVBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLmFsaWdubWVudCA9IDE7CisgICAgaWYgKGNvbXB1
dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUu
d2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMs
ICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9f
RVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXpl
KTsKKworICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHNvdXJjZUltYWdlV2lkdGgsIHNvdXJjZUltYWdlSGVp
Z2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIHNvdXJjZVVucGFja0FsaWdubWVu
dCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCks
IGZsaXBZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChJbWFnZU9ic2VydmVyKiBv
YnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkpCisgICAgICAgIG9ic2VydmVyLT5kaWRE
cmF3KCppbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0w6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURhdGEsIERhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGlu
dCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVt
IHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQoreworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOworICAgIGludCBoZWlnaHQgPSBpbWFn
ZURhdGEtPmhlaWdodCgpOworCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRw
dXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAgIFBpeGVsU3Rv
cmVQYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy5hbGlnbm1lbnQgPSAxOworICAgIGlmIChjb21w
dXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xl
LndpZHRoKCksIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLmhlaWdodCgpLCBkZXB0aCwgcGFyYW1z
LCAmcGFja2VkU2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5P
X0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS5yZXNpemUocGFja2VkU2l6
ZSk7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291
cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRl
cHRoLCAwLCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhh
ID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRh
KCksIGZsaXBZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsU3RvcmVQYXJhbXMmIHVucGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
K3sKKyAgICAvLyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2
YWxpZGF0ZWQuCisgICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1h
dChmb3JtYXQsIHR5cGUpOworCisgICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgorICAg
IHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYg
KCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50
c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVy
Q29tcG9uZW50OworICAgIGRhdGEucmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhl
bCk7CisKKyAgICB1bnNpZ25lZCBpbWFnZVNpemVJbkJ5dGVzLCBza2lwU2l6ZUluQnl0ZXM7Cisg
ICAgY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCB1bnBhY2tQYXJhbXMsICZpbWFnZVNpemVJbkJ5dGVzLCBudWxscHRyLCAmc2tpcFNpemVJbkJ5
dGVzKTsKKyAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHBpeGVscyk7CisgICAgaWYgKHNraXBTaXplSW5CeXRlcykKKyAgICAgICAgc3JjRGF0
YSArPSBza2lwU2l6ZUluQnl0ZXM7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMoc3JjRGF0YSwgc291
cmNlRGF0YUZvcm1hdCwgdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dM
ZW5ndGggOiB3aWR0aCwgaGVpZ2h0LCBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCAxLCB1
bnBhY2tQYXJhbXMuYWxpZ25tZW50LCAwLCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhh
ID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0
YSgpLCBmbGlwWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuaAppbmRleCA5ZmVlNzJmMmM3MmIxYjZlZmVjZWM3NzhkNTZkMGVlNTViMjkxYjBlLi5jMDMy
ZTA0YjFkYmQ4YjQzNmE0YTJiODg0NDBmMzQ2NjU3OWQ1NTI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTg4OCw2ICs4ODksMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgY2xhc3Mg
Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcG9zaXRlKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VDb250ZXh0TG9zdCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGVD
b250ZXh0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpID0gMDsKKyAgICB9OworCiAgICAgc3RydWN0IEFjdGl2ZUluZm8gewog
ICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAgR0NHTGVudW0gdHlwZTsKQEAgLTg5Nyw2ICs5
MDcsOSBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNz
Q29udGV4dEdMKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB+R3JhcGhp
Y3NDb250ZXh0R0woKSA9IGRlZmF1bHQ7CiAKKyAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNs
aWVudCkgeyBtX2NsaWVudHMuYWRkKCZjbGllbnQpOyB9CisgICAgdm9pZCByZW1vdmVDbGllbnQo
Q2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsgfQorCiAgICAgLy8g
PT09PT09PT09PSBXZWJHTCAxIGVudHJ5IHBvaW50cy4KIAogICAgIHZpcnR1YWwgdm9pZCBhY3Rp
dmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpID0gMDsKQEAgLTEyNTMsMTMgKzEyNjYsOTAgQEAg
cHVibGljOgogCiAgICAgLy8gPT09PT09PT09PSBOb24tV2ViR0wgYmFzZWQgZW50cnkgcG9pbnRz
LgogCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpID0gMDsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJl
bmNlVXNlZEZvckNyZWF0aW9uKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzR0xF
UzJDb21wbGlhbnQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBTeW50aGVzaXplcyBhbiBPcGVuR0wg
ZXJyb3Igd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEKKyAgICAvLyBsYXRlciBjYWxsIHRv
IGdldEVycm9yLiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBPcGVuR0wgRVMKKyAgICAvLyAyLjAg
YmVoYXZpb3Igb24gdGhlIGRlc2t0b3AgYW5kIHRvIGVuZm9yY2UgYWRkaXRpb25hbCBlcnJvcgor
ICAgIC8vIGNoZWNraW5nIG1hbmRhdGVkIGJ5IFdlYkdMLgorICAgIC8vCisgICAgLy8gUGVyIHRo
ZSBiZWhhdmlvciBvZiBnbEdldEVycm9yLCB0aGlzIHN0b3JlcyBhdCBtb3N0IG9uZQorICAgIC8v
IGluc3RhbmNlIG9mIGFueSBnaXZlbiBlcnJvciwgYW5kIHJldHVybnMgdGhlbSBmcm9tIGNhbGxz
IHRvCisgICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZC4KKyAgICB2
aXJ0dWFsIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgPSAwOworCisjaWYgIVVTRShBTkdMRSkKKyAg
ICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUg
aW5pdGlhbGl6ZWQgdG8gMC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBz
eW50aGVzaXplZC4KKyAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5H
TCBkZWZhdWx0IHNldHRpbmcuCisgICAgdmlydHVhbCBib29sIHRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQpID0gIDA7
CisjZW5kaWYKKworICAgIEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25z
dCB7IHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOyB9CisK
ICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQ0dMZW51
bSk7CiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5Rm9ybWF0KEdDR0xlbnVtKTsK
IAogICAgIHN0YXRpYyB1aW50OF90IGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0NHTGVudW0pOwog
CisgICAgc3RydWN0IFBpeGVsU3RvcmVQYXJhbXMgZmluYWwgeworICAgICAgICBHQ0dMaW50IGFs
aWdubWVudCB7IDQgfTsKKyAgICAgICAgR0NHTGludCByb3dMZW5ndGggeyAwIH07CisgICAgICAg
IEdDR0xpbnQgaW1hZ2VIZWlnaHQgeyAwIH07CisgICAgICAgIEdDR0xpbnQgc2tpcFBpeGVscyB7
IDAgfTsKKyAgICAgICAgR0NHTGludCBza2lwUm93cyB7IDAgfTsKKyAgICAgICAgR0NHTGludCBz
a2lwSW1hZ2VzIHsgMCB9OworICAgIH07CisKKyAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50
cyBwZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKKyAgICAvLyBmb3IgdGhlIGdpdmVu
IGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGVp
dGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgorICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRB
bmRUeXBlUGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVk
KiBjb21wb25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCk7CisKKyAg
ICAvLyBDb21wdXRlcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMg
aXMgbm90IG51bGwsIHBhZGRpbmcKKyAgICAvLyBpcyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJu
LiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVybiB0
aGUgc3VnZ2VzdGVkIEdMIGVycm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJl
OgorICAgIC8vICAgSU5WQUxJRF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Ig
b3ZlcmZsb3cgaGFwcGVucy4KKyAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBp
cyBpbGxlZ2FsLgorICAgIHN0YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwgdW5zaWdu
ZWQqIGltYWdlU2l6ZUluQnl0ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQq
IHNraXBTaXplSW5CeXRlcyk7CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIHN0YXRpYyBib29sIHBv
c3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSk7CisjZW5kaWYgLy8gIVVTRShB
TkdMRSkKKworICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VE
YXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCisgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0
YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKKyAgICAvLyBhbmQgb2Jl
eWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQor
ICAgIC8vIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKElt
YWdlRGF0YSosIERhdGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFu
Z2xlLCBpbnQgZGVwdGgsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZXh0cmFjdHMg
dGhlIHVzZXItc3VwcGxpZWQgdGV4dHVyZQorICAgIC8vIGRhdGEsIGFwcGx5aW5nIHRoZSBmbGlw
WSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBwYXJhbWV0ZXJzLgorICAgIC8vIElmIHRoZSBkYXRhIGlz
IG5vdCB0aWdodGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZAorICAgIC8vIHVucGFj
a1BhcmFtcywgdGhlIG91dHB1dCBkYXRhIHdpbGwgYmUgdGlnaHRseSBwYWNrZWQuCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGFueSBlcnJvciBvY2N1cnJlZC4K
KyAgICBzdGF0aWMgYm9vbCBleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCBQaXhlbFN0
b3JlUGFyYW1zJiB1bnBhY2tQYXJhbXMsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgLy8g
UGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4g
fHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3RvcgorICAgIC8vIGFjY29yZGluZyB0byB0aGUg
Z2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIEFscGhhT3Ag
ZmxhZ3MuCisgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9v
bCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNl
Rm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhl
aWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwg
dW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSk7CisKICAgICBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIGludCBtX2N1
cnJlbnRXaWR0aCB7IDAgfTsKKyAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OworICAgIEhh
c2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIERlc3RpbmF0aW9uIG1fZGVzdGluYXRpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlZjUxNDcy
ZjExMDg1ODM4ZjJkYmVjMWVkNTMzNWU0ZWUzZjI2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3Vy
Y2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRp
cGxpY2F0aW9uKQoreworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBtX2ltYWdlSHRtbERvbVNv
dXJjZSA9IGltYWdlSHRtbERvbVNvdXJjZTsKKyAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRy
YWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGln
bm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Cit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTEltYWdlRXh0cmFjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5YjBjOWZi
MWU2MzlkOTlmOTgzN2ZlMDZkZjBhYzcwMjk2Yzk3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3RvciB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgRE9NU291cmNlID0gR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTsKKyAgICB1
c2luZyBEYXRhRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ7CisgICAgdXNp
bmcgQWxwaGFPcCA9IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOworICAgIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBET01Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJ
bWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0
IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBv
ciByZWxlYXNlIHJlc291cmNlcworICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYg
bmVlZGVkLgorICAgIH5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCk7CisKKyAgICBi
b29sIGV4dHJhY3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4dHJhY3RTdWNjZWVkZWQ7IH0KKyAg
ICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSgpIHsgcmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7
IH0KKyAgICB1bnNpZ25lZCBpbWFnZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9Cisg
ICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9CisgICAg
RGF0YUZvcm1hdCBpbWFnZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3Jt
YXQ7IH0KKyAgICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQor
ICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFn
ZVNvdXJjZVVucGFja0FsaWdubWVudDsgfQorICAgIERPTVNvdXJjZSBpbWFnZUh0bWxEb21Tb3Vy
Y2UoKSB7IHJldHVybiBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQorcHJpdmF0ZToKKyAgICAvLyBF
YWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhv
ZC4KKyAgICAvLyBFeHRyYWN0cyB0aGUgaW1hZ2UgYW5kIGtlZXBzIHRyYWNrIG9mIGl0cyBzdGF0
dXMsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgU291cmNlIEFsaWdubWVudCwgZm9ybWF0IGFuZCBB
bHBoYU9wIGV0YywKKyAgICAvLyBuZWVkcyB0byBsb2NrIHRoZSByZXNvdXJjZXMgb3IgcmVsZXZh
bnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MKKyAgICBib29s
IGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9u
KTsKKworI2lmIFVTRShDQUlSTykKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdl
U3VyZmFjZTsKKyNlbGlmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0lt
YWdlOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKKyAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBtX3BpeGVsRGF0YTsKKyAgICBVbmlxdWVBcnJheTx1aW50OF90PiBt
X2Zvcm1hbGl6ZWRSR0JBOERhdGE7CisjZW5kaWYKKyAgICBJbWFnZSogbV9pbWFnZTsKKyAgICBE
T01Tb3VyY2UgbV9pbWFnZUh0bWxEb21Tb3VyY2U7CisgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVk
ZWQ7CisgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKKyAgICB1bnNpZ25lZCBtX2lt
YWdlV2lkdGg7CisgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKKyAgICBEYXRhRm9ybWF0IG1f
aW1hZ2VTb3VyY2VGb3JtYXQ7CisgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAgdW5zaWduZWQg
bV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGQ0NzFjNDIyY2M0NzI4YmZlY2YzMGU5MWY2
OTI3ZjE0ZTE3MjZkYzUuLjQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0ZTEwYjhlMzgwNTgxYzkxYjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBo
aWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC03MDcsMTEgKzcwNyw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogICAgIGdsOjpGbHVzaCgpOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAK
aW5kZXggMDY5NzVhNDEzOWExOWRhNzc3NmUwMjA4MjE0NDJmZTViY2IyZTBmNy4uZmFkYjI0M2U2
NzhiNzI3ZjEwYjBiNmIzYjJlOTBmMDU4YmQzOTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
R0xDYWlyby5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF9HTCkgJiYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCkBAIC0zOSw5ICs0MCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRl
ZmF1bHQ7CitHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjp+R3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCiB7CiAgICAgaWYgKCFtX2lt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCmluZGV4IDdj
YzM5NjkyZGUyYzFjN2Y4NDY2ZjQ1YTk2YWUxNWE1NTQ3MTBmNWUuLmJiOTFkZWM5MTIyNGQ0MTk3
ZWNhODFiYmRiYzRlMDU2N2U0M2MwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCkBAIC0zMTcsOSArMzE4LDkg
QEAgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0IHNyY0Zvcm1hdCwgY29uc3QgdWkKIAogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKK0dyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
KCkgPSBkZWZhdWx0OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGlj
YXRpb24pCitib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFn
ZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUs
IGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIGlm
ICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5jcHAKaW5kZXggYzFmOTI2NWIxNjk1YTVkNjRjMzdjZmFmNWM4YzA0ZGMwOWM1
ODFiMC4uNWJlNWE5ZDY3M2I2ZGEwOWRmMjNkOGI1MjRmZDgyM2NiNmM4OTNkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCkBAIC0zMSwyNDYgKzMxLDEwIEBACiAjaWYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
LSNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2Ugewot
Ci1HcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdDR0xlbnVtIGRl
c3RpbmF0aW9uRm9ybWF0LCBHQ0dMZW51bSBkZXN0aW5hdGlvblR5cGUpCi17Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE4OwotICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZv
cm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4X1M7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
X0lOVEVHRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6Ci0g
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6QTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHODsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTSE9SVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkg
ewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZfUzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRF
R0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHMTZfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQp
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpEMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTY7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OklOVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkg
ewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJfUzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRF
R0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHMzJfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJfUzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01Q
T05FTlQ6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6RDMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkczMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6Ci0gICAgICAgIHN3aXRjaCAo
ZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkcxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FM
UEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkExNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAot
ICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJGOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgotICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6Ci0g
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMy
RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpM
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1JHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82
XzU6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0I1NjU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVF81XzlfOV85X1JFVjoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgotICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFG
MTFGOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVY6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8xMF8xMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBk
c3RGb3JtYXQ7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXNldEJ1ZmZlcnNUb0F1dG9DbGVhcigpCiB7CiAgICAgR0NHTHVp
bnQgYnVmZmVycyA9IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUOwpAQCAtMzA3
LDEzICs3MSwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVQcmVzZXJ2
ZURyYXdpbmdCdWZmZXIoKQogICAgIG1fYnVmZmVyc1RvQXV0b0NsZWFyID0gMDsKIH0KIAorI2lm
ICFVU0UoQU5HTEUpCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3Jk
ZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCB1bnBhY2tBbGlnbm1l
bnQpCiB7CiAgICAgQVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVu
dCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsK
ICAgICBVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgIGlmICh3aWR0aCA+IDAg
JiYgaGVpZ2h0ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBzaXplOwotICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgICAgIFBpeGVs
U3RvcmVQYXJhbXMgcGFyYW1zOwogICAgICAgICBwYXJhbXMuYWxpZ25tZW50ID0gdW5wYWNrQWxp
Z25tZW50OwogICAgICAgICBHQ0dMZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgcGFyYW1zLCAmc2l6ZSwgbnVsbHB0ciwg
bnVsbHB0cik7CiAgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJS
T1IpIHsKQEAgLTMyOSw0ODQgKzk0LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGUKICAgICB9
CiAgICAgcmV0dXJuIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKIH0KKyNlbmRp
ZgogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCB1bnNpZ25lZCogY29tcG9u
ZW50c1BlclBpeGVsLCB1bnNpZ25lZCogYnl0ZXNQZXJDb21wb25lbnQpCi17Ci0gICAgc3dpdGNo
IChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOiAvLyBUcmVhdCBpdCBhcyBvbmUgY29tcG9uZW50Lgot
ICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0g
ICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
X0lOVEVHRVI6Ci0gICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUOgotICAgICAgICAqY29t
cG9uZW50c1BlclBpeGVsID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zR0w6OkJHUkFfRVhUOiAvLyBHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODgKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAg
ICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSA0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9u
ZW50ID0gc2l6ZW9mKEdDR0xieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfQllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0g
c2l6ZW9mKEdDR0x1Ynl0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNIT1JUOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHNo
b3J0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfU0hPUlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdXNob3J0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
U0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVf
NV8xOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNp
emVvZihHQ0dMaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfSU5UOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NH
THVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRf
MTBGXzExRl8xMUZfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF81XzlfOV85X1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRf
Ml8xMF8xMF8xMF9SRVY6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAg
ICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVpbnQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQK
LSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZf
ZmxvYXQKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xoYWxmZmxvYXQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9V
TlNJR05FRF9JTlRfMjRfOF9SRVY6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQ0dMZmxvYXQpICsgc2l6ZW9mKEdDR0x1aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotI2lmICFVU0UoQU5HTEUpCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJs
ZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0NHTGVudW0mIGZvcm1hdCwgR0NHTGVudW0mIHR5cGUpCi17Ci0jZGVmaW5lIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoaW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGVNYWNy
bykgY2FzZSBpbnRlcm5hbEZvcm1hdE1hY3JvOiBcCi0gICAgICAgIGZvcm1hdCA9IGZvcm1hdE1h
Y3JvOyBcCi0gICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3Jv
OyBcCi0gICAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
ICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBLCBVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OkxVTUlOQU5DRSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSAg
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQSAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQSAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UjggICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAgLCBV
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJFRCAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZGICAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAsIEhBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UjMyRiAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkVEICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4VUkgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSOEkgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5U
RUdFUiAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjE2VUkgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlIxNkkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAg
ICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSSAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjMy
SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBJTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOCAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHICAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk0g
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRyAgICAgICAgICAgICAsIEJZVEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkcxNkYgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6Ukcg
ICAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzhVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VS
ICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4SSAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHMTZVSSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwg
VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJ
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05F
RF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHX0lOVEVHRVIgICAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4ICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6U1JHQjggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAg
ICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NSAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV82XzUg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I4X1NOT1JNICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAg
ICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEYgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVW
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjlfRTUgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5T
SUdORURfSU5UXzVfOV85XzlfUkVWICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJGICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBGTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjhVSSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
Ql9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SSAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6UkdCMTZVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVH
RVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SSAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IzMlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAs
IFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTggICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThfU05PUk0g
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBCWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjVfQTEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEg
ICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNCAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzRfNF80
XzQgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMTBfQTIgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAg
ICAgLCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkYgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBMzJGICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SSAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUkgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9TSE9SVCAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkExNkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5U
RUdFUiAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIElOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkdCQTMyVUkgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAg
LCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2ICwgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9DT01QT05FTlQgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQgLCBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBP
TkVOVDMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMOCAg
LCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCAgLCBVTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5D
SUwgICwgRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQgICAgICAgICAgICAgICAsIEV4dGVu
c2lvbnNHTDo6U1JHQl9FWFQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zR0w6OlNSR0Jf
QUxQSEFfRVhUICAgICAgICAgLCBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUICAgICAgLCBV
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0jdW5kZWYgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKLQotR0NHTGVudW0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKAotICAgIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhl
bFN0b3JlUGFyYW1zJiBwYXJhbXMsCi0gICAgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsIHVu
c2lnbmVkKiBwYWRkaW5nSW5CeXRlcywgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcykKLXsKLSAg
ICBBU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyk7Ci0gICAgQVNTRVJUKHBhcmFtcy5hbGlnbm1lbnQg
PT0gMSB8fCBwYXJhbXMuYWxpZ25tZW50ID09IDIgfHwgcGFyYW1zLmFsaWdubWVudCA9PSA0IHx8
IHBhcmFtcy5hbGlnbm1lbnQgPT0gOCk7Ci0gICAgQVNTRVJUKHBhcmFtcy5yb3dMZW5ndGggPj0g
MCk7Ci0gICAgQVNTRVJUKHBhcmFtcy5pbWFnZUhlaWdodCA+PSAwKTsKLSAgICBBU1NFUlQocGFy
YW1zLnNraXBQaXhlbHMgPj0gMCk7Ci0gICAgQVNTRVJUKHBhcmFtcy5za2lwUm93cyA+PSAwKTsK
LSAgICBBU1NFUlQocGFyYW1zLnNraXBJbWFnZXMgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwIHx8IGRlcHRoIDwgMCkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCB8fCAhZGVwdGgp
IHsKLSAgICAgICAgKmltYWdlU2l6ZUluQnl0ZXMgPSAwOwotICAgICAgICBpZiAocGFkZGluZ0lu
Qnl0ZXMpCi0gICAgICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSAwOwotICAgICAgICBpZiAoc2tp
cFNpemVJbkJ5dGVzKQotICAgICAgICAgICAgKnNraXBTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Ci0gICAgfQotCi0gICAgaW50IHJv
d0xlbmd0aCA9IHBhcmFtcy5yb3dMZW5ndGggPiAwID8gcGFyYW1zLnJvd0xlbmd0aCA6IHdpZHRo
OwotICAgIGludCBpbWFnZUhlaWdodCA9IHBhcmFtcy5pbWFnZUhlaWdodCA+IDAgPyBwYXJhbXMu
aW1hZ2VIZWlnaHQgOiBoZWlnaHQ7Ci0KLSAgICB1bnNpZ25lZCBieXRlc1BlckNvbXBvbmVudCwg
Y29tcG9uZW50c1BlclBpeGVsOwotICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0
ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50
KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU07Ci0gICAg
dW5zaWduZWQgYnl0ZXNQZXJHcm91cCA9IGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9uZW50c1Bl
clBpeGVsOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkVmFs
dWUgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocm93TGVuZ3RoKTsKLSAgICBjaGVja2VkVmFsdWUg
Kj0gYnl0ZXNQZXJHcm91cDsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotCi0gICAg
dW5zaWduZWQgbGFzdFJvd1NpemU7Ci0gICAgaWYgKHBhcmFtcy5yb3dMZW5ndGggPiAwICYmIHBh
cmFtcy5yb3dMZW5ndGggIT0gd2lkdGgpIHsKLSAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+IHRtcCA9IHdpZHRoOwotICAgICAgICB0bXAgKj0gYnl0ZXNQZXJHcm91cDsK
LSAgICAgICAgaWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgICAgIGxhc3RSb3dTaXplID0gdG1w
LnVuc2FmZUdldCgpOwotICAgIH0gZWxzZQotICAgICAgICBsYXN0Um93U2l6ZSA9IGNoZWNrZWRW
YWx1ZS51bnNhZmVHZXQoKTsKLQotICAgIHVuc2lnbmVkIHBhZGRpbmcgPSAwOwotICAgIHVuc2ln
bmVkIHJlc2lkdWFsID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpICUgcGFyYW1zLmFsaWdubWVu
dDsKLSAgICBpZiAocmVzaWR1YWwpIHsKLSAgICAgICAgcGFkZGluZyA9IHBhcmFtcy5hbGlnbm1l
bnQgLSByZXNpZHVhbDsKLSAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7Ci0gICAgfQot
ICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgdW5zaWduZWQgcGFkZGVkUm93U2l6
ZSA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKTsKLQotICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiByb3dzID0gaW1hZ2VIZWlnaHQ7Ci0gICAgcm93cyAqPSAoZGVwdGggLSAx
KTsKLSAgICAvLyBMYXN0IGltYWdlIGlzIG5vdCBhZmZlY3RlZCBieSBJTUFHRV9IRUlHSFQgcGFy
YW1ldGVyLgotICAgIHJvd3MgKz0gaGVpZ2h0OwotICAgIGlmIChyb3dzLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAg
IGNoZWNrZWRWYWx1ZSAqPSAocm93cyAtIDEpOwotICAgIC8vIExhc3Qgcm93IGlzIG5vdCBhZmZl
Y3RlZCBieSBST1dfTEVOR1RIIHBhcmFtZXRlci4KLSAgICBjaGVja2VkVmFsdWUgKz0gbGFzdFJv
d1NpemU7Ci0gICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAqaW1hZ2VTaXplSW5C
eXRlcyA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKTsKLSAgICBpZiAocGFkZGluZ0luQnl0ZXMp
Ci0gICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IHBhZGRpbmc7Ci0KLSAgICBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz4gc2tpcFNpemUgPSAwOwotICAgIGlmIChwYXJhbXMuc2tpcElt
YWdlcyA+IDApIHsKLSAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRt
cCA9IHBhZGRlZFJvd1NpemU7Ci0gICAgICAgIHRtcCAqPSBpbWFnZUhlaWdodDsKLSAgICAgICAg
dG1wICo9IHBhcmFtcy5za2lwSW1hZ2VzOwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsK
LSAgICAgICAgc2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgpOwotICAgIH0KLSAgICBpZiAocGFy
YW1zLnNraXBSb3dzID4gMCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gdG1wID0gcGFkZGVkUm93U2l6ZTsKLSAgICAgICAgdG1wICo9IHBhcmFtcy5za2lwUm93
czsKLSAgICAgICAgaWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgICAgIHNraXBTaXplICs9IHRt
cC51bnNhZmVHZXQoKTsKLSAgICB9Ci0gICAgaWYgKHBhcmFtcy5za2lwUGl4ZWxzID4gMCkgewot
ICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG1wID0gYnl0ZXNQZXJH
cm91cDsKLSAgICAgICAgdG1wICo9IHBhcmFtcy5za2lwUGl4ZWxzOwotICAgICAgICBpZiAodG1w
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgc2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgpOwotICAg
IH0KLSAgICBpZiAoc2tpcFNpemUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgaWYgKHNraXBTaXplSW5CeXRlcykK
LSAgICAgICAgKnNraXBTaXplSW5CeXRlcyA9IHNraXBTaXplLnVuc2FmZUdldCgpOwotCi0gICAg
Y2hlY2tlZFZhbHVlICs9IHNraXBTaXplLnVuc2FmZUdldCgpOwotICAgIGlmIChjaGVja2VkVmFs
dWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUU7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKLX0K
LQotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXM6OlBpeGVsU3RvcmVQ
YXJhbXMoKQotICAgIDogYWxpZ25tZW50KDQpCi0gICAgLCByb3dMZW5ndGgoMCkKLSAgICAsIGlt
YWdlSGVpZ2h0KDApCi0gICAgLCBza2lwUGl4ZWxzKDApCi0gICAgLCBza2lwUm93cygwKQotICAg
ICwgc2tpcEltYWdlcygwKQotewotfQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VF
eHRyYWN0b3I6OkltYWdlRXh0cmFjdG9yKEltYWdlKiBpbWFnZSwgRE9NU291cmNlIGltYWdlSHRt
bERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikK
LXsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBpbWFn
ZUh0bWxEb21Tb3VyY2U7Ci0gICAgbV9leHRyYWN0U3VjY2VlZGVkID0gZXh0cmFjdEltYWdlKHBy
ZW11bHRpcGx5QWxwaGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBpZ25vcmVOYXRpdmVJ
bWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwYWNrSW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AgYWxwaGFP
cCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVu
c2lnbmVkIHNvdXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJl
Y3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1
bnBhY2tJbWFnZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICghaW1h
Z2UgfHwgIXBpeGVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgcGFj
a2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50
ID09IDEpLgotICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwotICAgIHBhcmFtcy5hbGlnbm1l
bnQgPSAxOwotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNv
dXJjZUltYWdlU3ViUmVjdGFuZ2xlLndpZHRoKCksIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLmhl
aWdodCgpLCBkZXB0aCwgcGFyYW1zLCAmcGFja2VkU2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikgIT0g
R3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRm9ybWF0LCBzb3VyY2VJbWFn
ZVdpZHRoLCBzb3VyY2VJbWFnZUhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRo
LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGFscGhhT3AsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQot
ICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdygqaW1hZ2UpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpleHRyYWN0SW1hZ2VEYXRhKAotICAgIElt
YWdlRGF0YSogaW1hZ2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLAotICAgIGludCBkZXB0aCwgaW50IHVucGFj
a0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlm
ICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IHdpZHRoID0gaW1h
Z2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFnZURhdGEtPmhlaWdodCgpOwot
Ci0gICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5
IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwot
ICAgIHBhcmFtcy5hbGlnbm1lbnQgPSAxOwotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLndpZHRoKCksIHNvdXJjZUlt
YWdlU3ViUmVjdGFuZ2xlLmhlaWdodCgpLCBkZXB0aCwgcGFyYW1zLCAmcGFja2VkU2l6ZSwgbnVs
bHB0ciwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBh
Y2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgc291cmNlRGF0YUZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGRlcHRoLCAwLCB1bnBhY2tJbWFn
ZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVt
dWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsU3Rv
cmVQYXJhbXMmIHVucGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKLXsKLSAgICAvLyBB
c3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCi0g
ICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQsIHR5
cGUpOwotCi0gICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgotICAgIHVuc2lnbmVkIGNv
bXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgaWYgKCFjb21wdXRlRm9y
bWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAm
Ynl0ZXNQZXJDb21wb25lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQg
Ynl0ZXNQZXJQaXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50Owot
ICAgIGRhdGEucmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhlbCk7Ci0KLSAgICB1
bnNpZ25lZCBpbWFnZVNpemVJbkJ5dGVzLCBza2lwU2l6ZUluQnl0ZXM7Ci0gICAgY29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCB1bnBhY2tQYXJh
bXMsICZpbWFnZVNpemVJbkJ5dGVzLCBudWxscHRyLCAmc2tpcFNpemVJbkJ5dGVzKTsKLSAgICBj
b25zdCB1aW50OF90KiBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVs
cyk7Ci0gICAgaWYgKHNraXBTaXplSW5CeXRlcykKLSAgICAgICAgc3JjRGF0YSArPSBza2lwU2l6
ZUluQnl0ZXM7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMoc3JjRGF0YSwgc291cmNlRGF0YUZvcm1h
dCwgdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGggOiB3aWR0
aCwgaGVpZ2h0LCBJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCAxLCB1bnBhY2tQYXJhbXMu
YWxpZ25tZW50LCAwLCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6
RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0YSgpLCBmbGlwWSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIFRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UjhfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpBODoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDE2OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjhfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpCR1I4OgotICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkFSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFC
R1I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEx
NkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBf
MTA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6RDMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQz
MkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OgotICAg
ICAgICByZXR1cm4gNDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjoKLSAgICAgICAg
cmV0dXJuIDY7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSRzMyX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkczMkY6Ci0gICAgICAgIHJldHVybiA4OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjMyX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
MzJGOgotICAgICAgICByZXR1cm4gMTI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkEzMl9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEz
MkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhY2tQaXhlbHMoY29u
c3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNp
Z25lZCBzb3VyY2VEYXRhV2lkdGgsIHVuc2lnbmVkIHNvdXJjZURhdGFIZWlnaHQsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIHVuc2lnbmVkIGRlc3RpbmF0
aW9uRm9ybWF0LCB1bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AgYWxwaGFPcCwgdm9p
ZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKQotewotICAgIEFTU0VSVChkZXB0aCA+PSAx
KTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlRGF0YUhlaWdodCk7IC8vIERlcml2ZWQgZnJvbSBz
b3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpLgotICAgIGlmICghdW5wYWNrSW1hZ2VIZWln
aHQpCi0gICAgICAgIHVucGFja0ltYWdlSGVpZ2h0ID0gc291cmNlRGF0YVN1YlJlY3RhbmdsZS5o
ZWlnaHQoKTsKLSAgICBpbnQgdmFsaWRTcmMgPSBzb3VyY2VEYXRhV2lkdGggKiBUZXhlbEJ5dGVz
Rm9yRm9ybWF0KHNvdXJjZURhdGFGb3JtYXQpOwotICAgIGludCByZW1haW5kZXIgPSBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQpIDogMDsK
LSAgICBpbnQgc3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlkU3JjICsgc291cmNlVW5wYWNr
QWxpZ25tZW50IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOwotICAgIGludCBzcmNSb3dPZmZzZXQg
PSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLngoKSAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoc291cmNl
RGF0YUZvcm1hdCk7Ci0KLSAgICBEYXRhRm9ybWF0IGRzdERhdGFGb3JtYXQgPSBnZXREYXRhRm9y
bWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5cGUpOwotICAgIGludCBkc3RTdHJp
ZGUgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLndpZHRoKCkgKiBUZXhlbEJ5dGVzRm9yRm9ybWF0
KGRzdERhdGFGb3JtYXQpOwotICAgIGlmIChmbGlwWSkgewotICAgICAgICBkZXN0aW5hdGlvbkRh
dGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKSArIGRzdFN0cmlkZSAq
ICgoZGVwdGggKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpKSAtIDEpOwotICAgICAg
ICBkc3RTdHJpZGUgPSAtZHN0U3RyaWRlOwotICAgIH0KLSAgICBpZiAoIWhhc0FscGhhKHNvdXJj
ZURhdGFGb3JtYXQpIHx8ICFoYXNDb2xvcihzb3VyY2VEYXRhRm9ybWF0KSB8fCAhaGFzQ29sb3Io
ZHN0RGF0YUZvcm1hdCkpCi0gICAgICAgIGFscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7Ci0K
LSAgICBpZiAoc291cmNlRGF0YUZvcm1hdCA9PSBkc3REYXRhRm9ybWF0ICYmIGFscGhhT3AgPT0g
QWxwaGFPcDo6RG9Ob3RoaW5nKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VQdHIgPSBz
b3VyY2VEYXRhICsgc3JjU3RyaWRlICogc291cmNlRGF0YVN1YlJlY3RhbmdsZS55KCk7Ci0gICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2VFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRlICogc291
cmNlRGF0YVN1YlJlY3RhbmdsZS5tYXhZKCk7Ci0KLSAgICAgICAgLy8gSWYgcGFja2luZyBtdWx0
aXBsZSBpbWFnZXMgaW50byBhIDNEIHRleHR1cmUsIGFuZCBmbGlwWSBpcyB0cnVlLAotICAgICAg
ICAvLyB0aGVuIHRoZSBzdWItcmVjdGFuZ2xlIGlzIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiB0
aGUKLSAgICAgICAgLy8gImJvdHRvbW1vc3QiIG9mIHRob3NlIGltYWdlcy4gU2luY2UgdGhlIHNv
dXJjZSBwb2ludGVyIHN0cmlkZXMgaW4KLSAgICAgICAgLy8gdGhlIHBvc2l0aXZlIGRpcmVjdGlv
biwgd2UgbmVlZCB0byBiYWNrIGl0IHVwIHRvIHBvaW50IGF0IHRoZQotICAgICAgICAvLyBsYXN0
LCBvciAidG9wbW9zdCIsIG9mIHRoZXNlIGltYWdlcy4KLSAgICAgICAgaWYgKGZsaXBZICYmIGRl
cHRoID4gMSkgewotICAgICAgICAgICAgY29uc3QgcHRyZGlmZl90IGRpc3RhbmNlVG9Ub3BJbWFn
ZSA9IChkZXB0aCAtIDEpICogc3JjU3RyaWRlICogdW5wYWNrSW1hZ2VIZWlnaHQ7Ci0gICAgICAg
ICAgICBiYXNlUHRyIC09IGRpc3RhbmNlVG9Ub3BJbWFnZTsKLSAgICAgICAgICAgIGJhc2VFbmQg
LT0gZGlzdGFuY2VUb1RvcEltYWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgcm93
U2l6ZSA9IChkc3RTdHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKLSAgICAgICAg
dWludDhfdCogZHN0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKSB7Ci0gICAgICAgICAgICBj
b25zdCB1aW50OF90KiBwdHIgPSBiYXNlUHRyOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCog
cHRyRW5kID0gYmFzZUVuZDsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBwdHJFbmQpIHsKLSAg
ICAgICAgICAgICAgICBtZW1jcHkoZHN0LCBwdHIgKyBzcmNSb3dPZmZzZXQsIHJvd1NpemUpOwot
ICAgICAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7Ci0gICAgICAgICAgICAgICAgZHN0ICs9
IGRzdFN0cmlkZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJhc2VQdHIgKz0gdW5wYWNr
SW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7Ci0gICAgICAgICAgICBiYXNlRW5kICs9IHVucGFja0lt
YWdlSGVpZ2h0ICogc3JjU3RyaWRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIoCi0gICAgICAgIHNvdXJjZURh
dGFTdWJSZWN0YW5nbGUsIGRlcHRoLAotICAgICAgICB1bnBhY2tJbWFnZUhlaWdodCwgc291cmNl
RGF0YSwgZGVzdGluYXRpb25EYXRhLAotICAgICAgICBzcmNTdHJpZGUsIHNyY1Jvd09mZnNldCwg
ZHN0U3RyaWRlKTsKLSAgICBjb252ZXJ0ZXIuY29udmVydChzb3VyY2VEYXRhRm9ybWF0LCBkc3RE
YXRhRm9ybWF0LCBhbHBoYU9wKTsKLSAgICBpZiAoIWNvbnZlcnRlci5zdWNjZXNzKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAogI2lmICFQTEFURk9STShD
T0NPQSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5
KGJvb2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDI1MjE5ZjhmNTMx
Y2FkYTNhYmY1ZDBlNDIxNTMzNWMxMzQ3MGZlMTguLjY5ODhiZDY5Y2EwZjAxMGZhMWI2OGY2NjUz
MDc4M2ViZmM2M2Y0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC04
NywyOSArODcsMjAgQEAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNo
YWRlck5hbWVIYXNoOwogCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU7CiAK
LWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdM
CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHRHTAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICwgcHJpdmF0ZSBXZWJHTExheWVyQ2xp
ZW50CiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBjbGFzcyBDbGllbnQgewotICAgIHB1YmxpYzoK
LSAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wb3NpdGUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgPSAwOwot
ICAgIH07Ci0KICAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24g
PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgc3RhdGljIFJlZjxHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTD4gY3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBz
aGFyZWRDb250ZXh0KTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0K
LSAgICBQbGF0Zm9ybUdMT2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fdGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIu
Z2V0KCkpOyB9CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9CisgICAgUGxh
dGZvcm1HTE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Rl
eHR1cmU7IH0KKyAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQogICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzcGxheU9iajsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xD
b25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ09iajsgfQogICAg
IHN0YXRpYyBHQ0dMZW51bSBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KCk7CkBAIC0xMzAsOSArMTIx
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHJlbGVhc2VDdXJyZW50Q29udGV4dChSZWxl
YXNlQmVoYXZpb3IpOwogI2VuZGlmCiAKLSAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNsaWVu
dCkgeyBtX2NsaWVudHMuYWRkKCZjbGllbnQpOyB9Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoQ2xp
ZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50KTsgfQotCiAgICAgLy8gV2l0
aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBG
Qk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCkBAIC0xNDUsODEgKzEzMywxMSBAQCBw
dWJsaWM6CiAgICAgLy8gQ29tcGlsZSBhIHNoYWRlciB3aXRob3V0IGdvaW5nIHRocm91Z2ggQU5H
TEUuCiAgICAgdm9pZCBjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QpOwogCi0g
ICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJl
IGluaXRpYWxpemVkIHRvIDAuCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMg
c3ludGhlc2l6ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVu
R0wgZGVmYXVsdCBzZXR0aW5nLgotICAgIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCk7Ci0KLSAgICBib29s
IGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8v
IEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFjay4KLSAgICAv
LwotCi0gICAgc3RydWN0IFBpeGVsU3RvcmVQYXJhbXMgZmluYWwgewotICAgICAgICBQaXhlbFN0
b3JlUGFyYW1zKCk7Ci0KLSAgICAgICAgR0NHTGludCBhbGlnbm1lbnQ7Ci0gICAgICAgIEdDR0xp
bnQgcm93TGVuZ3RoOwotICAgICAgICBHQ0dMaW50IGltYWdlSGVpZ2h0OwotICAgICAgICBHQ0dM
aW50IHNraXBQaXhlbHM7Ci0gICAgICAgIEdDR0xpbnQgc2tpcFJvd3M7Ci0gICAgICAgIEdDR0xp
bnQgc2tpcEltYWdlczsKLSAgICB9OwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGNvbXBvbmVudHMg
cGVyIHBpeGVsIGFuZCBieXRlcyBwZXIgY29tcG9uZW50Ci0gICAgLy8gZm9yIHRoZSBnaXZlbiBm
b3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uIFJldHVybnMgZmFsc2UgaWYKLSAgICAvLyBlaXRo
ZXIgd2FzIGFuIGludmFsaWQgZW51bS4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlRm9ybWF0QW5k
VHlwZVBhcmFtZXRlcnMoR0NHTGVudW0gZm9ybWF0LAotICAgICAgICBHQ0dMZW51bSB0eXBlLAot
ICAgICAgICB1bnNpZ25lZCogY29tcG9uZW50c1BlclBpeGVsLAotICAgICAgICB1bnNpZ25lZCog
Ynl0ZXNQZXJDb21wb25lbnQpOwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGltYWdlIHNpemUgaW4g
Ynl0ZXMuIElmIHBhZGRpbmdJbkJ5dGVzIGlzIG5vdCBudWxsLCBwYWRkaW5nCi0gICAgLy8gaXMg
YWxzbyBjYWxjdWxhdGVkIGluIHJldHVybi4gUmV0dXJucyBOT19FUlJPUiBpZiBzdWNjZWVkLCBv
dGhlcndpc2UKLSAgICAvLyByZXR1cm4gdGhlIHN1Z2dlc3RlZCBHTCBlcnJvciBpbmRpY2F0aW5n
IHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZToKLSAgICAvLyAgIElOVkFMSURfVkFMVUUgaWYgd2lk
dGgvaGVpZ2h0IGlzIG5lZ2F0aXZlIG9yIG92ZXJmbG93IGhhcHBlbnMuCi0gICAgLy8gICBJTlZB
TElEX0VOVU0gaWYgZm9ybWF0L3R5cGUgaXMgaWxsZWdhbC4KLSAgICBzdGF0aWMgR0NHTGVudW0g
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0NHTGVudW0gZm9ybWF0LAotICAgICAgICBHQ0dMZW51
bSB0eXBlLAotICAgICAgICBHQ0dMc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdDR0xzaXplaSBoZWln
aHQsCi0gICAgICAgIEdDR0xzaXplaSBkZXB0aCwKLSAgICAgICAgY29uc3QgUGl4ZWxTdG9yZVBh
cmFtcyYsCi0gICAgICAgIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLAotICAgICAgICB1bnNp
Z25lZCogcGFkZGluZ0luQnl0ZXMsCi0gICAgICAgIHVuc2lnbmVkKiBza2lwU2l6ZUluQnl0ZXMp
OwotCiAjaWYgIVVTRShBTkdMRSkKLSAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5
cGVGb3JJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0mIGZv
cm1hdCwgR0NHTGVudW0mIHR5cGUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCisgICAgYm9vbCB0
ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBh
bGlnbm1lbnQgPSA0KSBmaW5hbDsKKyNlbmRpZgogCi0gICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRl
bnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKLSAgICAv
LyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFu
ZCB0eXBlLAotICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBo
YSBmbGFncy4gUmV0dXJucyB0cnVlCi0gICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBi
b29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwKLSAgICAgICAgRGF0YUZvcm1hdCwKLSAg
ICAgICAgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsCi0gICAgICAgIGlu
dCBkZXB0aCwKLSAgICAgICAgaW50IHVucGFja0ltYWdlSGVpZ2h0LAotICAgICAgICBHQ0dMZW51
bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIGJvb2wgZmxpcFksCi0g
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1z
dXBwbGllZCB0ZXh0dXJlCi0gICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVt
dWx0aXBseUFscGhhIHBhcmFtZXRlcnMuCi0gICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0
bHkgcGFja2VkIGFjY29yZGluZyB0byB0aGUgcGFzc2VkCi0gICAgLy8gdW5wYWNrUGFyYW1zLCB0
aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgotICAgIHN0YXRp
YyBib29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LAotICAgICAgICBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIGNvbnN0
IFBpeGVsU3RvcmVQYXJhbXMmIHVucGFja1BhcmFtcywKLSAgICAgICAgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICBjb25zdCB2b2lkKiBwaXhlbHMsCi0gICAgICAg
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29u
c3QgZmluYWw7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9y
IFdlYkdMLgpAQCAtNTM3LDcgKzQ1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0QnVmZmVy
c1RvQXV0b0NsZWFyKCk7CiAgICAgdm9pZCBzZXRCdWZmZXJzVG9BdXRvQ2xlYXIoR0NHTGJpdGZp
ZWxkKTsKICAgICBHQ0dMYml0ZmllbGQgZ2V0QnVmZmVyc1RvQXV0b0NsZWFyKCkgY29uc3Q7Ci0g
ICAgdm9pZCBlbmFibGVQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGZpbmFsOwogCiAgICAgdm9pZCBkaXNwYXRj
aENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CiAgICAgdm9pZCBzaW11bGF0ZUNvbnRleHRD
aGFuZ2VkKCk7CkBAIC01NTAsMTcgKzQ2OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmltaXRp
dmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQpIGZpbmFsOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwotICAgIGJvb2wg
YmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGJhY2tp
bmcsIHZvaWQqIHBidWZmZXIpOwotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShDT0NP
QSkgJiYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlQ0dMQ29udGV4dCgpOwogI2VuZGlm
Ci0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKLSAgICB2b2lkIHNldENvbnRleHRWaXNpYmls
aXR5KGJvb2wpOworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgZmluYWw7CiAK
LSAgICBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2Vk
Rm9yQ3JlYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVh
dGlvbjsgfQorICAgIEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVy
ZW5jZVVzZWRGb3JDcmVhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJl
bmNlVXNlZEZvckNyZWF0aW9uOyB9CiAKICAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRp
b24gYW5kIGRlbGV0aW9uCiAgICAgUGxhdGZvcm1HTE9iamVjdCBjcmVhdGVCdWZmZXIoKSBmaW5h
bDsKQEAgLTU3NywxNSArNDkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBs
YXRmb3JtR0xPYmplY3QpIGZpbmFsOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdM
T2JqZWN0KSBmaW5hbDsKIAotICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGlj
aCB3aWxsIGJlIHJldHVybmVkIGZyb20gYQotICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3Iu
IFRoaXMgaXMgdXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUwotICAgIC8vIDIuMCBiZWhhdmlvciBv
biB0aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCi0gICAgLy8gY2hl
Y2tpbmcgbWFuZGF0ZWQgYnkgV2ViR0wuCi0gICAgLy8KLSAgICAvLyBQZXIgdGhlIGJlaGF2aW9y
IG9mIGdsR2V0RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCi0gICAgLy8gaW5zdGFuY2Ug
b2YgYW55IGdpdmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KLSAgICAv
LyBnZXRFcnJvciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgotICAgIHZvaWQgc3ludGhl
c2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpOworICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3Io
R0NHTGVudW0gZXJyb3IpIGZpbmFsOwogCiAgICAgLy8gUmVhZCByZWFsIE9wZW5HTCBlcnJvcnMs
IGFuZCBtb3ZlIHRoZW0gdG8gdGhlIHN5bnRoZXRpYwogICAgIC8vIGVycm9yIGxpc3QuIFJldHVy
biB0cnVlIGlmIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBtb3ZlZC4KQEAgLTU5Nyw1OSArNTAzLDgg
QEAgcHVibGljOgogICAgIC8vIGRldGVybWluZSB0aGlzLgogICAgIEV4dGVuc2lvbnNHTCYgZ2V0
RXh0ZW5zaW9ucygpIGZpbmFsOwogCi0gICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpIGNvbnN0OwotCi0gICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJ
bWFnZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3Rvcgot
ICAgIC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWlu
ZyB0aGUgZmxpcFkgYW5kIEFscGhhT3AgZmxhZ3MuCi0gICAgLy8gUmV0dXJucyB0cnVlIHVwb24g
c3VjY2Vzcy4KLSAgICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9p
ZCogcGl4ZWxzLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFs
cGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJbWFnZVdpZHRo
LCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VT
dWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBp
bnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KLSAgICBjbGFz
cyBJbWFnZUV4dHJhY3RvciB7Ci0gICAgcHVibGljOgotICAgICAgICBJbWFnZUV4dHJhY3RvcihJ
bWFnZSosIERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7Ci0KLSAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVt
ZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNlIHJlc291cmNl
cwotICAgICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlIGlmIG5lZWRlZC4KLSAgICAg
ICAgfkltYWdlRXh0cmFjdG9yKCk7Ci0KLSAgICAgICAgYm9vbCBleHRyYWN0U3VjY2VlZGVkKCkg
eyByZXR1cm4gbV9leHRyYWN0U3VjY2VlZGVkOyB9Ci0gICAgICAgIGNvbnN0IHZvaWQqIGltYWdl
UGl4ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQotICAgICAgICB1bnNpZ25l
ZCBpbWFnZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9Ci0gICAgICAgIHVuc2lnbmVk
IGltYWdlSGVpZ2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBEYXRhRm9y
bWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQot
ICAgICAgICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQotICAg
ICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsgcmV0dXJuIG1faW1h
Z2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KLSAgICAgICAgRE9NU291cmNlIGltYWdlSHRtbERv
bVNvdXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24g
b2YgdGhpcyBtZXRob2QuCi0gICAgICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMg
dHJhY2sgb2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25t
ZW50LCBmb3JtYXQgYW5kIEFscGhhT3AgZXRjLAotICAgICAgICAvLyBuZWVkcyB0byBsb2NrIHRo
ZSByZXNvdXJjZXMgb3IgcmVsZXZhbnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1
cG9uIHN1Y2Nlc3MKLSAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUlt
YWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOwotI2VsaWYgVVNFKENHKQotICAg
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOwotICAgICAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gbV9kZWNvZGVkSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IG1fcGl4ZWxEYXRhOwotICAgICAgICBVbmlxdWVBcnJheTx1aW50OF90PiBtX2Zvcm1hbGl6ZWRS
R0JBOERhdGE7Ci0jZW5kaWYKLSAgICAgICAgSW1hZ2UqIG1faW1hZ2U7Ci0gICAgICAgIERPTVNv
dXJjZSBtX2ltYWdlSHRtbERvbVNvdXJjZTsKLSAgICAgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVk
ZWQ7Ci0gICAgICAgIGNvbnN0IHZvaWQqIG1faW1hZ2VQaXhlbERhdGE7Ci0gICAgICAgIHVuc2ln
bmVkIG1faW1hZ2VXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKLSAgICAg
ICAgRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9ybWF0OwotICAgICAgICBBbHBoYU9wIG1fYWxw
aGFPcDsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsKLSAg
ICB9OwotCi0gICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgeyBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNr
KCkgZmluYWwgeyBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOyB9CiAKLSAgICBHQ0dMZW51
bSBhY3RpdmVUZXh0dXJlVW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQ7IH0KLSAgICBHQ0dMZW51bSBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCk7IH0KLSAgICBHQ0dMZW51bSBjdXJyZW50
Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRhcmdldCgp
OyB9CiAgICAgdW5zaWduZWQgdGV4dHVyZVNlZWQoR0NHTHVpbnQgdGV4dHVyZSkgeyByZXR1cm4g
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmNvdW50KHRleHR1cmUpOyB9CiAKICNpZiBQTEFURk9S
TShNQUMpCkBAIC02NTcsMTcgKzUxMiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzY3JlZW5EaWRD
aGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHByZXBhcmVGb3JE
aXNwbGF5KCk7CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFsOwogCiBwcml2YXRl
OgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKIAotICAgIC8v
IEhlbHBlciBmb3IgcGFja0ltYWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4dHJhY3RUZXh0dXJl
RGF0YSB3aGljaCBpbXBsZW1lbnQgcGFja2luZyBvZiBwaXhlbAotICAgIC8vIGRhdGEgaW50byB0
aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCi0gICAgLy8g
QSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNl
Ci0gICAgLy8gZGF0YSBpcyB0aWdodGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtl
IGEgc2xvdyBwYXRoLgotICAgIC8vIERlc3RpbmF0aW9uIGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMg
YmV0d2VlbiByb3dzLgotICAgIHN0YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCog
c291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VE
YXRhV2lkdGgsIHVuc2lnbmVkIHNvdXJjZURhdGFIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZURhdGFTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1
bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwg
Ym9vbCBmbGlwWSk7CiAKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVl
c3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAgLy8gaW4gcGFydGljdWxhciBz
dGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKQEAgLTY5
NSwxMyArNTQ0LDEyIEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBib29s
IGFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0OworICAgIGJvb2wgcmVzaGFwZURpc3BsYXlC
dWZmZXJCYWNraW5nKCk7CisgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CiAgICAgLy8gV2Vi
R0xMYXllckNsaWVudCBvdmVycmlkZXMuCi0gICAgdm9pZCBkaWREaXNwbGF5KCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWREaXNwbGF5KCkgZmluYWw7CiAjZW5kaWYKIAotICAgIGludCBtX2N1cnJl
bnRXaWR0aCB7IDAgfTsKLSAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwotCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKICAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKQEAg
LTg4OCw4ICs3MzYsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTFByaXZhdGU+IG1fcHJpdmF0ZTsKICNlbmRpZgogCi0gICAgSGFzaFNldDxD
bGllbnQqPiBtX2NsaWVudHM7Ci0KICAgICBib29sIG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV91c2luZ0NvcmVQcm9maWxlIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNzQxZWU0YzE0ZWFhMjY2YTc5
ZmViN2QxMjA2MmFhYWEzY2ViNTFlMC4uYjE0YjYyZDVlNGZiZWE4ZWEyYzg3ODU2ZTdiZmVkNmI4
ZDM4NjdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCkBAIC00MjUsMTEgKzQyNSw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBy
ZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCmluZGV4IDllZjUz
MWViZjk0MjI4OTQ4ZTAzYzg2MjM0NGU0YTY4YWZkZTJiMWUuLmIxNDNmMWQ5Mzk4MzYxOWRmZjYy
NWMxMWYzNjYwMWE3MjQ1MDg4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5j
cHAKQEAgLTI5LDE1ICsyOSwxNiBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAm
JiBVU0UoRElSRUNUMkQpCiAKICNpbmNsdWRlICJDT01QdHIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDJkMWVmZmVjdHMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5J
bWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwogCi1ib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9v
bCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCitib29sIEdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1h
Z2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIGlmICghbV9pbWFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411353</attachid>
            <date>2020-10-14 11:45:31 -0700</date>
            <delta_ts>2020-10-15 23:50:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201014214529.patch</filename>
            <type>text/plain</type>
            <size>115783</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmY5YjQxNThhZWM0YWQ3
MDFlMDM1MmUyMDFhNWY0NzlhODIzYmRhOS4uYTA3Zjc0Nzc4Y2RhMzBjNzIzYjc2MjA4Y2EzOGQ0
OWI0NDAxMTE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTE0ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2Vi
R0wgaW1wbGVtZW50YXRpb24gdG8gdXNlIG9ubHkgR3JhcGhpY3NDb250ZXh0R0wgcGFydCAxCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTMKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhcnQgMSBvZiB3b3JrIHRvd2FyZHMgV2ViR0wgaW1w
bGVtZW50YXRpb24gd2hpY2ggdXNlcworICAgICAgICBHcmFwaGljc0NvbnRleHRHTCBhYnN0cmFj
dCBiYXNlIGNsYXNzIGluc3RlYWQgb2YKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
Y29uY3JldGUgY2xhc3MuCisKKyAgICAgICAgTW92ZSBwaXhlbCBkYXRhIHJlbGF0ZWQgc3RhdGlj
IGhlbHBlciBmdW5jaW9ucyBmcm9tCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHRv
IEdyYXBoaWNzQ29udGV4dEdMLiBUaGVzZSBhcmUKKyAgICAgICAgbm9ybWFsIHBpeGVsIGZvcm1h
dCBjYWxjdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgaGF2ZQorICAgICAgICBjb25jcmV0
ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNb3ZlIHBpeGVsIHBhY2sgcmVsYXRlZAor
ICAgICAgICBzdHJ1Y3R1cmVzIHRvIEdyYXBoaWNzQ29udGV4dEdMLgorCisgICAgICAgIFJlbmFt
ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgdG8KKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci4gVGhlIEdyYXBoaWNzQ29udGV4dEdMIGNsYXNz
CisgICAgICAgIGludGVyZmFjZSBpcyBhbHJlYWR5IHF1aXRlIGxlbmd0aHkgYW5kIHRoZSBpbWFn
ZSBleHRyYWN0b3IKKyAgICAgICAgaXMgbm90IHZlcnkgdGllZCB0byB0aGUgY29udGV4dCBjbGFz
cy4KKworICAgICAgICBJbnRyb2R1Y2UgYSB2aXJ0dWFsIG1lbWJlciBmdWN0aW9uIGluIEdyYXBo
aWNzQ29udGV4dEdMIGZvcgorICAgICAgICBlYWNoIGNhbGwgdGhhdCBpcyBsaWtlbHkgbmVlZGVk
IGZvciB0aGUgV2ViR0wgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBh
IHJlZmFjdG9yLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFy
YW1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXREYXRhRm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OnRleGVsQnl0ZXNGb3JGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFja1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OnBhY2tJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmV4dHJhY3RUZXh0dXJlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpDbGllbnQ6On5DbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OmFkZENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yOjpleHRyYWN0U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlUGl4ZWxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
aW1hZ2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvcjo6aW1hZ2VBbHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlSHRt
bERvbVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0R0xDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKwogMjAyMC0xMC0x
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBbGxv
dyBwYXNzaXZlIG1vdXNlIHdoZWVsIGV2ZW50IGxpc3RlbmVycyB0byBub3QgZm9yY2Ugc3luY2hy
b25vdXMgc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk2NWFkYzEzMGYxZGY0MzY1YjA4Mjk5
ZDI2NmQ2OGY5ZmNmODFiMWQuLjgzODZkYzgyOThiOTJmMmQ4NTA2YWM5OGFkY2UzODk1OWMwNDRl
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODk0LDYgKzE4OTQsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDkxZTc1N2UzZDg2MWI5NmE0MDYxYmY1
NjA4ODllMmZmOTRhNWJhZi4uYmI0ZjNmYjc4MTVjYjVjODM4YzdhNTE3NTAxOWFjNzU0Yzk4OTA1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjIxNyw2ICsyMjE3LDcgQEAKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8q
IEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICov
OyB9OwogCQk3QkIzNEExNTI1MzQ1NzkxMDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBMTMyNTM0
NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCAqLzsgfTsKIAkJN0JCMzRBMTcyNTM0
NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIw
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggKi87IH07CisJCTdC
QjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0
NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTc0Mjcz
ODFGQTkwNkZCQjRGMEYyQyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5
IC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggKi87IH07CiAJCTdDMDI5QzZFMjQ5M0M4RjgwMDI2
ODIwNCAvKiBDb2xvclR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzAyOUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTg0M0ZFMUM4
QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDY1
LDYgKzEwMDY2LDggQEAKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JCMzRBMTMyNTM0NTc5MTAwMDI5RDA4
IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViR0xMYXllckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEEx
NjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRp
bGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQjM0QTQ1MjUzNzc2QzYw
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNE
MjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5ncy5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLmNwcC5l
cmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNFMjRGQUQzNjAwMDVCRUYx
MCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSW50ZXJuYWxTZXR0
aW5nc0dlbmVyYXRlZC5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAx
MUYzRjI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5pZGwuZXJi
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaWRsLmVyYjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI2MTM3LDYgKzI2MTQwLDggQEAKIAkJCQkzMTNERTg2RDIzQTk2OTY2
MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuY3BwICovLAogCQkJCTMxM0RFODZGMjNBOTY5
NjcwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oICovLAogCQkJCTdDMzMwQTAxMURGOEZB
QzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLywKKwkJCQk3QkIz
NEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5j
cHAgKi8sCisJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3IuaCAqLywKIAkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYgLyogR3Jh
cGhpY3NDb250ZXh0SW1wbC5jcHAgKi8sCiAJCQkJMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8q
IEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5jcHAgKi8sCkBAIC0zMDY0OSw3ICszMDY1NCw2IEBACiAJCQkJNTE3
NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUExQjg3RDIwODdDNEMwMDA5NzlBNzUgLyogQmFja0Zv
cndhcmRJdGVtSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NDcyMTcyNTMyM0My
MTAwRjE1M0M4IC8qIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzEyNEVFODBDMjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDYwQkI2MTYxRDBBMUJGMDAwMjIxODEyIC8qIEJhc2U2NFV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODMxOThGQkYyNEExNjBERDAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzE2MTIsNiArMzE2MTYsNyBAQAogCQkJCTMxM0RFODcwMjNB
OTY5NzMwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQjM0QTQ4MjUz
Nzc2Q0EwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAv
KiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
QUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5jcHAKaW5kZXggYjVmY2Y5M2Q4NzJhYWUzNWNjOGNiNjg2Yzg2OTRhNWZlNmFl
MzNiOS4uYTMxZmVhMDMxMWQwMjFjMGI4MmFhMzM2ZTVlYjI4Y2M5OTcwMzJmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTMwMDIsOSArMzAwMiw5IEBAIEdDR0x1aW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
Om1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVBdHRyaWJzKCkgY29uc3QKICAgICByZXR1cm4g
bV9tYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQXR0cmliczsKIH0KIAotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4ZWxTdG9y
ZVBhcmFtcygpIGNvbnN0CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3Rv
cmVQYXJhbXMgcGFyYW1zOworICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFt
cy5hbGlnbm1lbnQgPSBtX3BhY2tBbGlnbm1lbnQ7CiAgICAgcGFyYW1zLnJvd0xlbmd0aCA9IG1f
cGFja1Jvd0xlbmd0aDsKICAgICBwYXJhbXMuc2tpcFBpeGVscyA9IG1fcGFja1NraXBQaXhlbHM7
CkBAIC0zMDEyLDkgKzMwMTIsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9y
ZVBhcmFtcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4ZWxTdAogICAgIHJldHVy
biBwYXJhbXM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1z
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1h
Z2VEaW1lbnNpb24gZGltZW5zaW9uKSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnBhY2tQaXhlbFN0
b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uIGRpbWVuc2lvbikgY29uc3QKIHsKLSAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgUGl4ZWxT
dG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgcGFyYW1zLmFsaWdubWVudCA9IG1fdW5wYWNrQWxpZ25t
ZW50OwogICAgIHBhcmFtcy5yb3dMZW5ndGggPSBtX3VucGFja1Jvd0xlbmd0aDsKICAgICBwYXJh
bXMuc2tpcFBpeGVscyA9IG1fdW5wYWNrU2tpcFBpeGVsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA1MDNjNTBkNzcy
NDQyOTc3MGNhOGFkZWU1ODZlNTdhY2M1ZjcxZGY0Li5iZWNkMjkzYjFkNmQwNmViNTgyYTVlMGE0
MTMwMGYyY2RhZTkyNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yNTYsOCArMjU2LDggQEAgcHVibGljOgogCiAg
ICAgR0NHTHVpbnQgbWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUF0dHJpYnMoKSBjb25zdDsK
IAotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFBhY2tQ
aXhlbFN0b3JlUGFyYW1zKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFn
ZURpbWVuc2lvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBnZXRQYWNr
UGl4ZWxTdG9yZVBhcmFtcygpIGNvbnN0IG92ZXJyaWRlOworICAgIFBpeGVsU3RvcmVQYXJhbXMg
Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBib29sIGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQ0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwCmluZGV4IDc3NjkzOTM4MWY2Y2EwMzIwZGM1MzlmNTMzOGVmOWQ3NzE4NDRiNDkuLmEzNGNh
ODU1ZDc1YjU4ZDJkNDk1ZjY3OTkxYTk3ZTRkNmE5ZWRjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBA
IC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZp
ZGVvRWxlbWVudC5oIgpAQCAtNDg4OCw3ICs0ODg5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhJbWFnZUFycmF5QnVmZmVyVmlld0hlbHBlcihUZXhJbWFnZUZ1bmN0aW9u
SUQKICAgICAgICAgQVNTRVJUKHNvdXJjZVR5cGUgPT0gVGV4SW1hZ2VEaW1lbnNpb246OlRleDJE
KTsKICAgICAgICAgLy8gT25seSBlbnRlciBoZXJlIGlmIHdpZHRoIG9yIGhlaWdodCBpcyBub24t
emVyby4gT3RoZXJ3aXNlLCBjYWxsIHRvIHRoZQogICAgICAgICAvLyB1bmRlcmx5aW5nIGRyaXZl
ciB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBHTCBlcnJvcnMgaWYgbmVlZGVkLgotICAgICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyB1bnBhY2tQYXJhbXMgPSBn
ZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uOjpUZXgyRCk7CisgICAg
ICAgIFBpeGVsU3RvcmVQYXJhbXMgdW5wYWNrUGFyYW1zID0gZ2V0VW5wYWNrUGl4ZWxTdG9yZVBh
cmFtcyhUZXhJbWFnZURpbWVuc2lvbjo6VGV4MkQpOwogICAgICAgICBHQ0dMaW50IGRhdGFTdG9y
ZVdpZHRoID0gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGgg
OiB3aWR0aDsKICAgICAgICAgaWYgKHVucGFja1BhcmFtcy5za2lwUGl4ZWxzICsgd2lkdGggPiBk
YXRhU3RvcmVXaWR0aCkgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJJbnZhbGlkIHVucGFj
ayBwYXJhbXMgY29tYmluYXRpb24uIik7CkBAIC00OTQ1LDcgKzQ5NDYsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlSW1wbChUZXhJbWFnZUZ1bmN0aW9uSUQgZnVu
Y3Rpb25JRCwgR0NHTAogICAgIGlmIChtX3VucGFja0ZsaXBZKQogICAgICAgICBhZGp1c3RlZFNv
dXJjZUltYWdlUmVjdC5zZXRZKGltYWdlLT5oZWlnaHQoKSAtIGFkanVzdGVkU291cmNlSW1hZ2VS
ZWN0Lm1heFkoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSwgaWdu
b3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0R0w6Ok5PTkUsIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAg
ICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTYzMDcsMTcgKzYz
MDgsMTcgQEAgUmVmUHRyPEludDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0NHTGVudW0KICAgICByZXR1cm4gSW50MzJBcnJheTo6
dHJ5Q3JlYXRlKHZhbHVlLCBsZW5ndGgpOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxT
dG9yZVBhcmFtcygpIGNvbnN0CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0b3Jl
UGFyYW1zIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFyYW1z
KCkgY29uc3QKIHsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFt
cyBwYXJhbXM7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgcGFyYW1zLmFsaWdu
bWVudCA9IG1fcGFja0FsaWdubWVudDsKICAgICByZXR1cm4gcGFyYW1zOwogfQogCi1HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uIGRpbWVuc2lv
bikgY29uc3QKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlBpeGVsU3RvcmVQYXJhbXMgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFn
ZURpbWVuc2lvbiBkaW1lbnNpb24pIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKGRpbWVuc2lv
bik7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1z
OworICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBt
X3VucGFja0FsaWdubWVudDsKICAgICByZXR1cm4gcGFyYW1zOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCmluZGV4
IDIwNmFjZTM1NTBhYjlhMTYzMWM1MzUzNjRmYWMxOTIzZjg1NWViZWUuLmUyYTA3YTViYzU2ZGEw
MjRkYWUwMjExN2NmNzNiZmI0NDk3Zjk3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKQEAgLTg1MSw5ICs4NTEs
OSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBieXRlTGVuZ3RoLCBjb25zdCB2b2lkKiBwaXhlbHMpOwogICAg
IHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnl0ZUxlbmd0aCwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogZ2V0VGV4SW1hZ2VGdW5jdGlvbk5hbWUoVGV4SW1hZ2VGdW5j
dGlvbklEKTsKLQotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3Rv
cmVQYXJhbXMgZ2V0UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3Rv
cmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24pIGNvbnN0OworICAgIHVzaW5nIFBpeGVsU3RvcmVQ
YXJhbXMgPSBHcmFwaGljc0NvbnRleHRHTDo6UGl4ZWxTdG9yZVBhcmFtczsKKyAgICB2aXJ0dWFs
IFBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBpeGVsU3RvcmVQYXJhbXMgZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFn
ZURpbWVuc2lvbikgY29uc3Q7CiAKICNpZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hlY2tUZXh0
dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCAxNmNj
MTBjNzdlMmY2NmRlMGFhNzk4MDM5Yjc4MzY0ZWE5NmRmODc5Li5hMTZmNThkYjNhNDBhNGFlNTdm
ZjlhN2FjMTE1OGQ3ODcxYTNlZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0zMSw5ICszMSwzNzkgQEAK
ICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TC5oIgorI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBn
ZXREYXRhRm9ybWF0KEdDR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHQ0dMZW51bSBkZXN0aW5h
dGlvblR5cGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OworICAgIHN3aXRjaCAoZGVz
dGluYXRpb25UeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICAg
ICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRUQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VS
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlI4X1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4X1M7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25G
b3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCODsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNSR0JfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTg7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJF
RF9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlI4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VS
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgc3dp
dGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRURfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSMTZfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZfUzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5U
RUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMTZfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIHN3
aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UjE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMTY7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VS
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgc3dp
dGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRURfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSMzJfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJfUzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMl9TOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5U
RUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMzJfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgorICAgICAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8g
T0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZf
RkxPQVQ6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNkY7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1J
TkFOQ0U6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9B
TFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTUkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FU
OiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJG
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RUQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9B
TFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NI
T1JUXzVfNV81XzE6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBNTU1MTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84Ogor
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9J
TlRfMTBGXzExRl8xMUZfUkVWOgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8xMF8xMDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIHJldHVybiBkc3RGb3JtYXQ7Cit9CisKK0FMV0FZU19JTkxJTkUgc3Rh
dGljIHVuc2lnbmVkIHRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjhfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
OF9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6RDE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjhfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpCR1I4OgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBOF9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkFSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6RDMyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMkY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OgorICAgICAg
ICByZXR1cm4gNDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0Ix
NjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjoKKyAgICAgICAgcmV0
dXJuIDY7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkczMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSRzMyX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkczMkY6CisgICAgICAgIHJldHVybiA4OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQjMyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjMyX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJG
OgorICAgICAgICByZXR1cm4gMTI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTMyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QkEzMl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY6
CisgICAgICAgIHJldHVybiAxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKKworLy8gSGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEv
ZXh0cmFjdFRleHR1cmVEYXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCisvLyBk
YXRhIGludG8gdGhlIHNwZWNpZmllZCBPcGVuR0wgZGVzdGluYXRpb24gZm9ybWF0IGFuZCB0eXBl
LgorLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUg
c291cmNlCisvLyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRh
a2UgYSBzbG93IHBhdGguCisvLyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJl
dHdlZW4gcm93cy4KK3N0YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNl
RGF0YSwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5z
aWduZWQgc291cmNlRGF0YVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VEYXRhSGVpZ2h0LCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNvdXJj
ZVVucGFja0FsaWdubWVudCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCB1bnNpZ25lZCBkZXN0aW5h
dGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcCBhbHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCit7Cisg
ICAgQVNTRVJUKGRlcHRoID49IDEpOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0
KTsgLy8gRGVyaXZlZCBmcm9tIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkuCisgICAg
aWYgKCF1bnBhY2tJbWFnZUhlaWdodCkKKyAgICAgICAgdW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3Vy
Y2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpOworICAgIGludCB2YWxpZFNyYyA9IHNvdXJjZURh
dGFXaWR0aCAqIHRleGVsQnl0ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisgICAgaW50
IHJlbWFpbmRlciA9IHNvdXJjZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVu
cGFja0FsaWdubWVudCkgOiAwOworICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFs
aWRTcmMgKyBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7Cisg
ICAgaW50IHNyY1Jvd09mZnNldCA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUueCgpICogdGV4ZWxC
eXRlc0ZvckZvcm1hdChzb3VyY2VEYXRhRm9ybWF0KTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0IGRzdERhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3RpbmF0aW9uRm9y
bWF0LCBkZXN0aW5hdGlvblR5cGUpOworICAgIGludCBkc3RTdHJpZGUgPSBzb3VyY2VEYXRhU3Vi
UmVjdGFuZ2xlLndpZHRoKCkgKiB0ZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFGb3JtYXQpOwor
ICAgIGlmIChmbGlwWSkgeworICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKSArIGRzdFN0cmlkZSAqICgoZGVwdGggKiBzb3VyY2VE
YXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpKSAtIDEpOworICAgICAgICBkc3RTdHJpZGUgPSAtZHN0
U3RyaWRlOworICAgIH0KKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMOjpoYXNBbHBoYShzb3Vy
Y2VEYXRhRm9ybWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0R0w6Omhhc0NvbG9yKHNvdXJjZURhdGFG
b3JtYXQpIHx8ICFHcmFwaGljc0NvbnRleHRHTDo6aGFzQ29sb3IoZHN0RGF0YUZvcm1hdCkpCisg
ICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nOwor
CisgICAgaWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1hdCAmJiBhbHBoYU9wID09
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogYmFzZVB0ciA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3Vi
UmVjdGFuZ2xlLnkoKTsKKyAgICAgICAgY29uc3QgdWludDhfdCogYmFzZUVuZCA9IHNvdXJjZURh
dGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLm1heFkoKTsKKworICAgICAg
ICAvLyBJZiBwYWNraW5nIG11bHRpcGxlIGltYWdlcyBpbnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZs
aXBZIGlzIHRydWUsCisgICAgICAgIC8vIHRoZW4gdGhlIHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRp
bmcgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAgICAvLyAiYm90dG9tbW9zdCIgb2YgdGhvc2Ug
aW1hZ2VzLiBTaW5jZSB0aGUgc291cmNlIHBvaW50ZXIgc3RyaWRlcyBpbgorICAgICAgICAvLyB0
aGUgcG9zaXRpdmUgZGlyZWN0aW9uLCB3ZSBuZWVkIHRvIGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQg
dGhlCisgICAgICAgIC8vIGxhc3QsIG9yICJ0b3Btb3N0Iiwgb2YgdGhlc2UgaW1hZ2VzLgorICAg
ICAgICBpZiAoZmxpcFkgJiYgZGVwdGggPiAxKSB7CisgICAgICAgICAgICBjb25zdCBwdHJkaWZm
X3QgZGlzdGFuY2VUb1RvcEltYWdlID0gKGRlcHRoIC0gMSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJ
bWFnZUhlaWdodDsKKyAgICAgICAgICAgIGJhc2VQdHIgLT0gZGlzdGFuY2VUb1RvcEltYWdlOwor
ICAgICAgICAgICAgYmFzZUVuZCAtPSBkaXN0YW5jZVRvVG9wSW1hZ2U7CisgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCByb3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAt
ZHN0U3RyaWRlOworICAgICAgICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
ZGVzdGluYXRpb25EYXRhKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJhc2VQdHI7CisgICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBiYXNlRW5kOworICAgICAgICAgICAgd2hpbGUg
KHB0ciA8IHB0ckVuZCkgeworICAgICAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciArIHNyY1Jv
d09mZnNldCwgcm93U2l6ZSk7CisgICAgICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKKyAg
ICAgICAgICAgICAgICBkc3QgKz0gZHN0U3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYmFzZVB0ciArPSB1bnBhY2tJbWFnZUhlaWdodCAqIHNyY1N0cmlkZTsKKyAgICAgICAgICAg
IGJhc2VFbmQgKz0gdW5wYWNrSW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRl
cigKKyAgICAgICAgc291cmNlRGF0YVN1YlJlY3RhbmdsZSwgZGVwdGgsCisgICAgICAgIHVucGFj
a0ltYWdlSGVpZ2h0LCBzb3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsCisgICAgICAgIHNyY1N0
cmlkZSwgc3JjUm93T2Zmc2V0LCBkc3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNv
dXJjZURhdGFGb3JtYXQsIGRzdERhdGFGb3JtYXQsIGFscGhhT3ApOworICAgIGlmICghY29udmVy
dGVyLnN1Y2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCisKIEdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGljc0Nv
bnRleHRHTCopCiAgICAgOiBtX2F0dHJzKGF0dHJzKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKQEAgLTE4NCw2ICs1NTQsMzMyIEBAIHVpbnQ4X3QgR3JhcGhpY3NDb250ZXh0R0w6
OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0NHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9v
bCBHcmFwaGljc0NvbnRleHRHTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwg
dW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfU1RFTkNJTDogLy8gVHJlYXQgaXQgYXMgb25lIGNvbXBvbmVudC4KKyAgICAgICAgKmNvbXBv
bmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhl
bCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpCR1JBX0VYVDogLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICAqY29tcG9uZW50
c1BlclBpeGVsID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkJZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihH
Q0dMYnl0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWJ5
dGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoK
KyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xzaG9ydCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAg
ICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVzaG9ydCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAg
KmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNp
emVvZihHQ0dMdXNob3J0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6SU5UOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGludCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VDoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1aW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JF
VjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVW
OgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5dGVzUGVyQ29t
cG9uZW50ID0gc2l6ZW9mKEdDR0x1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgICpieXRl
c1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMZmxvYXQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAg
ICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMaGFsZmZsb2F0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0
XzhfUkVWOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KSAr
IHNpemVvZihHQ0dMdWludCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNp
emVpIGRlcHRoLCBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkKiBpbWFn
ZVNpemVJbkJ5dGVzLCB1bnNpZ25lZCogcGFkZGluZ0luQnl0ZXMsIHVuc2lnbmVkKiBza2lwU2l6
ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKGltYWdlU2l6ZUluQnl0ZXMpOworICAgIEFTU0VSVChw
YXJhbXMuYWxpZ25tZW50ID09IDEgfHwgcGFyYW1zLmFsaWdubWVudCA9PSAyIHx8IHBhcmFtcy5h
bGlnbm1lbnQgPT0gNCB8fCBwYXJhbXMuYWxpZ25tZW50ID09IDgpOworICAgIEFTU0VSVChwYXJh
bXMucm93TGVuZ3RoID49IDApOworICAgIEFTU0VSVChwYXJhbXMuaW1hZ2VIZWlnaHQgPj0gMCk7
CisgICAgQVNTRVJUKHBhcmFtcy5za2lwUGl4ZWxzID49IDApOworICAgIEFTU0VSVChwYXJhbXMu
c2tpcFJvd3MgPj0gMCk7CisgICAgQVNTRVJUKHBhcmFtcy5za2lwSW1hZ2VzID49IDApOworICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBkZXB0aCA8IDApCisgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICBpZiAoIXdpZHRoIHx8ICFo
ZWlnaHQgfHwgIWRlcHRoKSB7CisgICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAgICAg
ICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQorICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsK
KyAgICAgICAgaWYgKHNraXBTaXplSW5CeXRlcykKKyAgICAgICAgICAgICpza2lwU2l6ZUluQnl0
ZXMgPSAwOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOworICAg
IH0KKworICAgIGludCByb3dMZW5ndGggPSBwYXJhbXMucm93TGVuZ3RoID4gMCA/IHBhcmFtcy5y
b3dMZW5ndGggOiB3aWR0aDsKKyAgICBpbnQgaW1hZ2VIZWlnaHQgPSBwYXJhbXMuaW1hZ2VIZWln
aHQgPiAwID8gcGFyYW1zLmltYWdlSGVpZ2h0IDogaGVpZ2h0OworCisgICAgdW5zaWduZWQgYnl0
ZXNQZXJDb21wb25lbnQsIGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3Jt
YXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZi
eXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyR3JvdXAgPSBieXRlc1BlckNvbXBvbmVu
dCAqIGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJvd0xlbmd0aCk7Cisg
ICAgY2hlY2tlZFZhbHVlICo9IGJ5dGVzUGVyR3JvdXA7CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRTsKKworICAgIHVuc2lnbmVkIGxhc3RSb3dTaXplOworICAgIGlmIChwYXJhbXMucm93
TGVuZ3RoID4gMCAmJiBwYXJhbXMucm93TGVuZ3RoICE9IHdpZHRoKSB7CisgICAgICAgIENoZWNr
ZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSB3aWR0aDsKKyAgICAgICAgdG1wICo9
IGJ5dGVzUGVyR3JvdXA7CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBs
YXN0Um93U2l6ZSA9IHRtcC51bnNhZmVHZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGFzdFJv
d1NpemUgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisKKyAgICB1bnNpZ25lZCBwYWRkaW5n
ID0gMDsKKyAgICB1bnNpZ25lZCByZXNpZHVhbCA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKSAl
IHBhcmFtcy5hbGlnbm1lbnQ7CisgICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcg
PSBwYXJhbXMuYWxpZ25tZW50IC0gcmVzaWR1YWw7CisgICAgICAgIGNoZWNrZWRWYWx1ZSArPSBw
YWRkaW5nOworICAgIH0KKyAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIHVuc2ln
bmVkIHBhZGRlZFJvd1NpemUgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisKKyAgICBDaGVj
a2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gcm93cyA9IGltYWdlSGVpZ2h0OworICAgIHJv
d3MgKj0gKGRlcHRoIC0gMSk7CisgICAgLy8gTGFzdCBpbWFnZSBpcyBub3QgYWZmZWN0ZWQgYnkg
SU1BR0VfSEVJR0hUIHBhcmFtZXRlci4KKyAgICByb3dzICs9IGhlaWdodDsKKyAgICBpZiAocm93
cy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRTsKKyAgICBjaGVja2VkVmFsdWUgKj0gKHJvd3MgLSAxKTsKKyAgICAvLyBMYXN0
IHJvdyBpcyBub3QgYWZmZWN0ZWQgYnkgUk9XX0xFTkdUSCBwYXJhbWV0ZXIuCisgICAgY2hlY2tl
ZFZhbHVlICs9IGxhc3RSb3dTaXplOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Cisg
ICAgKmltYWdlU2l6ZUluQnl0ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisgICAgaWYg
KHBhZGRpbmdJbkJ5dGVzKQorICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSBwYWRkaW5nOworCisg
ICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHNraXBTaXplID0gMDsKKyAgICBp
ZiAocGFyYW1zLnNraXBJbWFnZXMgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiB0bXAgPSBwYWRkZWRSb3dTaXplOworICAgICAgICB0bXAgKj0gaW1hZ2VI
ZWlnaHQ7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcEltYWdlczsKKyAgICAgICAgaWYgKHRt
cC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUU7CisgICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVHZXQoKTsKKyAg
ICB9CisgICAgaWYgKHBhcmFtcy5za2lwUm93cyA+IDApIHsKKyAgICAgICAgQ2hlY2tlZDx1aW50
MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRtcCA9IHBhZGRlZFJvd1NpemU7CisgICAgICAgIHRtcCAq
PSBwYXJhbXMuc2tpcFJvd3M7CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAg
ICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7CisgICAgfQorICAgIGlmIChwYXJhbXMuc2tp
cFBpeGVscyA+IDApIHsKKyAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+
IHRtcCA9IGJ5dGVzUGVyR3JvdXA7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcFBpeGVsczsK
KyAgICAgICAgaWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgICAgIHNraXBTaXplICs9IHRtcC51
bnNhZmVHZXQoKTsKKyAgICB9CisgICAgaWYgKHNraXBTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIGlmIChz
a2lwU2l6ZUluQnl0ZXMpCisgICAgICAgICpza2lwU2l6ZUluQnl0ZXMgPSBza2lwU2l6ZS51bnNh
ZmVHZXQoKTsKKworICAgIGNoZWNrZWRWYWx1ZSArPSBza2lwU2l6ZS51bnNhZmVHZXQoKTsKKyAg
ICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6Tk9fRVJST1I7Cit9CisKKyNpZiAhVVNFKEFOR0xFKQorYm9vbCBHcmFwaGljc0NvbnRleHRH
TDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDR0xlbnVtJiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKQoreworI2RlZmluZSBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3Jv
LCB0eXBlTWFjcm8pIGNhc2UgaW50ZXJuYWxGb3JtYXRNYWNybzogXAorICAgICAgICBmb3JtYXQg
PSBmb3JtYXRNYWNybzsgXAorICAgICAgICB0eXBlID0gdHlwZU1hY3JvOyBcCisgICAgICAgIGJy
ZWFrOworCisgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKFJHQiwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBLCBSR0JBLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShMVU1JTkFOQ0VfQUxQSEEsIExVTUlOQU5DRV9BTFBI
QSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoTFVN
SU5BTkNFLCBMVU1JTkFOQ0UsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEFMUEhBLCBBTFBIQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjgsIFJFRCwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjhfU05PUk0sIFJFRCwgQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2RiwgUkVELCBIQUxGX0ZMT0FUKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSMzJGLCBSRUQsIEZMT0FUKTsKKyAgICAgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSOFVJLCBSRURfSU5URUdFUiwgVU5TSUdORURfQllURSk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjhJLCBSRURfSU5URUdFUiwgQllU
RSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2VUksIFJFRF9JTlRFR0VS
LCBVTlNJR05FRF9TSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2
SSwgUkVEX0lOVEVHRVIsIFNIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSMzJVSSwgUkVEX0lOVEVHRVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUjMySSwgUkVEX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkc4LCBSRywgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkc4X1NOT1JNLCBSRywgQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNkYsIFJHLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSRzMyRiwgUkcsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShSRzhVSSwgUkdfSU5URUdFUiwgVU5TSUdORURfQllURSk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkc4SSwgUkdfSU5URUdFUiwgQllURSk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNlVJLCBSR19JTlRFR0VSLCBV
TlNJR05FRF9TSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNkks
IFJHX0lOVEVHRVIsIFNIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShS
RzMyVUksIFJHX0lOVEVHRVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoUkczMkksIFJHX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkdCOCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShTUkdCOCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0I1NjUsIFJHQiwgVU5TSUdORURfU0hPUlRfNV82
XzUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhfU05PUk0sIFJHQiwg
QllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjExRl9HMTFGX0IxMEYs
IFJHQiwgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVik7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkdCOV9FNSwgUkdCLCBVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYpOwor
ICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjE2RiwgUkdCLCBIQUxGX0ZMT0FU
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IzMkYsIFJHQiwgRkxPQVQp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhVSSwgUkdCX0lOVEVHRVIs
IFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhJ
LCBSR0JfSU5URUdFUiwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
UkdCMTZVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShSR0IxNkksIFJHQl9JTlRFR0VSLCBTSE9SVCk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX0lO
VCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJJLCBSR0JfSU5URUdF
UiwgSU5UKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOCwgUkdCQSwg
VU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoU1JHQjhf
QUxQSEE4LCBSR0JBLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSR0JBOF9TTk9STSwgUkdCQSwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoUkdCNV9BMSwgUkdCQSwgVU5TSUdORURfU0hPUlRfNV81XzVfMSk7CisgICAg
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCQTQsIFJHQkEsIFVOU0lHTkVEX1NIT1JU
XzRfNF80XzQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjEwX0EyLCBS
R0JBLCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKFJHQkExNkYsIFJHQkEsIEhBTEZfRkxPQVQpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQkEzMkYsIFJHQkEsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOFVJLCBSR0JBX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkE4SSwgUkdCQV9JTlRFR0VS
LCBCWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxMF9BMlVJLCBS
R0JBX0lOVEVHRVIsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVik7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCQTE2VUksIFJHQkFfSU5URUdFUiwgVU5TSUdORURfU0hP
UlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkExNkksIFJHQkFfSU5U
RUdFUiwgU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkEzMkks
IFJHQkFfSU5URUdFUiwgSU5UKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShS
R0JBMzJVSSwgUkdCQV9JTlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKERFUFRIX0NPTVBPTkVOVDE2LCBERVBUSF9DT01QT05FTlQsIFVOU0lH
TkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShERVBUSF9DT01Q
T05FTlQsIERFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKERFUFRIX0NPTVBPTkVOVDI0LCBERVBUSF9DT01QT05FTlQsIFVO
U0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEhfQ09N
UE9ORU5UMzJGLCBERVBUSF9DT01QT05FTlQsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShERVBUSF9TVEVOQ0lMLCBERVBUSF9TVEVOQ0lMLCBVTlNJR05FRF9JTlRf
MjRfOCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEgyNF9TVEVOQ0lM
OCwgREVQVEhfU1RFTkNJTCwgVU5TSUdORURfSU5UXzI0XzgpOworICAgICAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKERFUFRIMzJGX1NURU5DSUw4LCBERVBUSF9TVEVOQ0lMLCBGTE9BVF8z
Ml9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQsIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQsIFVOU0lH
TkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNH
TDo6U1JHQl9BTFBIQV9FWFQsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQsIFVOU0lHTkVE
X0JZVEUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjdW5k
ZWYgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYgLy8gIVVTRShBTkdMRSkKKworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6cGFja0ltYWdlRGF0
YShJbWFnZSogaW1hZ2UsIGNvbnN0IHZvaWQqIHBpeGVscywgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wIGFscGhhT3AsIERhdGFGb3JtYXQgc291cmNl
Rm9ybWF0LCB1bnNpZ25lZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhl
aWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwg
dW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFwaXhlbHMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7CisgICAgLy8gT3V0
cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KKyAgICBQaXhlbFN0
b3JlUGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMuYWxpZ25tZW50ID0gMTsKKyAgICBpZiAoY29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCBzb3VyY2VJbWFnZVN1YlJlY3Rhbmds
ZS53aWR0aCgpLCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZS5oZWlnaHQoKSwgZGVwdGgsIHBhcmFt
cywgJnBhY2tlZFNpemUsIG51bGxwdHIsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpO
T19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEucmVzaXplKHBhY2tlZFNp
emUpOworCisgICAgaWYgKCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHBpeGVscyksIHNvdXJjZUZvcm1hdCwgc291cmNlSW1hZ2VXaWR0aCwgc291cmNlSW1hZ2VI
ZWlnaHQsIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBkZXB0aCwgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCB1bnBhY2tJbWFnZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBkYXRhLmRhdGEo
KSwgZmxpcFkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyID0gaW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgb2JzZXJ2ZXItPmRp
ZERyYXcoKmltYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHRHTDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwgRGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
aW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpbnQgd2lkdGggPSBpbWFnZURhdGEtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGlt
YWdlRGF0YS0+aGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91
dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgUGl4ZWxT
dG9yZVBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLmFsaWdubWVudCA9IDE7CisgICAgaWYgKGNv
bXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5n
bGUud2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJh
bXMsICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6
Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRT
aXplKTsKKworICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBz
b3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
ZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxw
aGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRh
dGEoKSwgZmxpcFkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxTdG9yZVBhcmFtcyYgdW5wYWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGNvbnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQoreworICAgIC8vIEFzc3VtZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVu
IHZhbGlkYXRlZC4KKyAgICBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9y
bWF0KGZvcm1hdCwgdHlwZSk7CisKKyAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCisg
ICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBp
ZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25l
bnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQ
ZXJDb21wb25lbnQ7CisgICAgZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBp
eGVsKTsKKworICAgIHVuc2lnbmVkIGltYWdlU2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsK
KyAgICBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsIHVucGFja1BhcmFtcywgJmltYWdlU2l6ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUlu
Qnl0ZXMpOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4ocGl4ZWxzKTsKKyAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQorICAgICAgICBzcmNE
YXRhICs9IHNraXBTaXplSW5CeXRlczsKKworICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBz
b3VyY2VEYXRhRm9ybWF0LCB1bnBhY2tQYXJhbXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJv
d0xlbmd0aCA6IHdpZHRoLCBoZWlnaHQsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEs
IHVucGFja1BhcmFtcy5hbGlnbm1lbnQsIDAsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxw
aGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5k
YXRhKCksIGZsaXBZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTC5oCmluZGV4IDlmZWU3MmYyYzcyYjFiNmVmZWNlYzc3OGQ1NmQwZWU1NWIyOTFiMGUuLmMw
MzJlMDRiMWRiZDhiNDM2YTRhMmI4ODQ0MGYzNDY2NTc5ZDU1MjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtODg4LDYgKzg4OSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBjbGFz
cyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3NpdGUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNs
ZUNvbnRleHQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFu
Z2VkTm90aWZpY2F0aW9uKCkgPSAwOworICAgIH07CisKICAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7
CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBHQ0dMZW51bSB0eXBlOwpAQCAtODk3LDYg
KzkwNyw5IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMsIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhp
Y3NDb250ZXh0R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5HcmFw
aGljc0NvbnRleHRHTCgpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYg
Y2xpZW50KSB7IG1fY2xpZW50cy5hZGQoJmNsaWVudCk7IH0KKyAgICB2b2lkIHJlbW92ZUNsaWVu
dChDbGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9CisKICAgICAv
LyA9PT09PT09PT09IFdlYkdMIDEgZW50cnkgcG9pbnRzLgogCiAgICAgdmlydHVhbCB2b2lkIGFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkgPSAwOwpAQCAtMTI1MywxMyArMTI2Niw5MCBA
QCBwdWJsaWM6CiAKICAgICAvLyA9PT09PT09PT09IE5vbi1XZWJHTCBiYXNlZCBlbnRyeSBwb2lu
dHMuCiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgPSAwOwor
CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZl
cmVuY2VVc2VkRm9yQ3JlYXRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0ID0gMDsKKworICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5H
TCBlcnJvciB3aGljaCB3aWxsIGJlIHJldHVybmVkIGZyb20gYQorICAgIC8vIGxhdGVyIGNhbGwg
dG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUworICAgIC8vIDIu
MCBiZWhhdmlvciBvbiB0aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9y
CisgICAgLy8gY2hlY2tpbmcgbWFuZGF0ZWQgYnkgV2ViR0wuCisgICAgLy8KKyAgICAvLyBQZXIg
dGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCisgICAg
Ly8gaW5zdGFuY2Ugb2YgYW55IGdpdmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2Fs
bHMgdG8KKyAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgorICAg
IHZpcnR1YWwgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSA9IDA7CisKKyNpZiAhVVNFKEFOR0xFKQor
ICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFy
ZSBpbml0aWFsaXplZCB0byAwLgorICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlz
IHN5bnRoZXNpemVkLgorICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3Bl
bkdMIGRlZmF1bHQgc2V0dGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNl
U2FmZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCkgPSAg
MDsKKyNlbmRpZgorCisgICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7IH0K
KwogICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDR0xl
bnVtKTsKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0NHTGVudW0p
OwogCiAgICAgc3RhdGljIHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQ0dMZW51bSk7
CiAKKyAgICBzdHJ1Y3QgUGl4ZWxTdG9yZVBhcmFtcyBmaW5hbCB7CisgICAgICAgIEdDR0xpbnQg
YWxpZ25tZW50IHsgNCB9OworICAgICAgICBHQ0dMaW50IHJvd0xlbmd0aCB7IDAgfTsKKyAgICAg
ICAgR0NHTGludCBpbWFnZUhlaWdodCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBza2lwUGl4ZWxz
IHsgMCB9OworICAgICAgICBHQ0dMaW50IHNraXBSb3dzIHsgMCB9OworICAgICAgICBHQ0dMaW50
IHNraXBJbWFnZXMgeyAwIH07CisgICAgfTsKKworICAgIC8vIENvbXB1dGVzIHRoZSBjb21wb25l
bnRzIHBlciBwaXhlbCBhbmQgYnl0ZXMgcGVyIGNvbXBvbmVudAorICAgIC8vIGZvciB0aGUgZ2l2
ZW4gZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8g
ZWl0aGVyIHdhcyBhbiBpbnZhbGlkIGVudW0uCisgICAgc3RhdGljIGJvb2wgY29tcHV0ZUZvcm1h
dEFuZFR5cGVQYXJhbWV0ZXJzKEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdW5zaWdu
ZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKKwor
ICAgIC8vIENvbXB1dGVzIHRoZSBpbWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRl
cyBpcyBub3QgbnVsbCwgcGFkZGluZworICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1
cm4uIFJldHVybnMgTk9fRVJST1IgaWYgc3VjY2VlZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJu
IHRoZSBzdWdnZXN0ZWQgR0wgZXJyb3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1
cmU6CisgICAgLy8gICBJTlZBTElEX1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBv
ciBvdmVyZmxvdyBoYXBwZW5zLgorICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBl
IGlzIGlsbGVnYWwuCisgICAgc3RhdGljIEdDR0xlbnVtIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMmLCB1bnNp
Z25lZCogaW1hZ2VTaXplSW5CeXRlcywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25l
ZCogc2tpcFNpemVJbkJ5dGVzKTsKKworI2lmICFVU0UoQU5HTEUpCisgICAgc3RhdGljIGJvb2wg
cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdDR0xlbnVtJiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKTsKKyNlbmRpZiAvLyAhVVNF
KEFOR0xFKQorCisgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFn
ZURhdGEgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKKyAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBk
YXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAorICAgIC8vIGFuZCBv
YmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVl
CisgICAgLy8gdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEo
SW1hZ2VEYXRhKiwgRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0
YW5nbGUsIGludCBkZXB0aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0
cyB0aGUgdXNlci1zdXBwbGllZCB0ZXh0dXJlCisgICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZs
aXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIHBhcmFtZXRlcnMuCisgICAgLy8gSWYgdGhlIGRhdGEg
aXMgbm90IHRpZ2h0bHkgcGFja2VkIGFjY29yZGluZyB0byB0aGUgcGFzc2VkCisgICAgLy8gdW5w
YWNrUGFyYW1zLCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVk
LgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
U3RvcmVQYXJhbXMmIHVucGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICAv
LyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBp
biB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yCisgICAgLy8gYWNjb3JkaW5nIHRvIHRo
ZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFP
cCBmbGFncy4KKyAgICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBi
b29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3Vy
Y2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNvdXJjZUltYWdl
SGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRo
LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKwogICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgaW50IG1f
Y3VycmVudFdpZHRoIHsgMCB9OworICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07CisgICAg
SGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAgRGVzdGluYXRpb24gbV9kZXN0aW5hdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVmNTE0
NzJmMTEwODU4MzhmMmRiZWMxZWQ1MzM1ZTRlZTNmMjY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvcjo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2UsIERPTVNv
dXJjZSBpbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVs
dGlwbGljYXRpb24pCit7CisgICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9t
U291cmNlID0gaW1hZ2VIdG1sRG9tU291cmNlOworICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4
dHJhY3RJbWFnZShwcmVtdWx0aXBseUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwg
aWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjliMGM5
ZmIxZTYzOWQ5OWY5ODM3ZmUwNmRmMGFjNzAyOTZjOTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yIHsKK3B1YmxpYzoK
KyAgICB1c2luZyBET01Tb3VyY2UgPSBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOworICAg
IHVzaW5nIERhdGFGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDsKKyAgICB1
c2luZyBBbHBoYU9wID0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A7CisgICAgR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3RvcihJbWFnZSosIERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2
ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICAvLyBFYWNoIHBsYXRmb3JtIG11
c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRl
IG9yIHJlbGVhc2UgcmVzb3VyY2VzCisgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBp
ZiBuZWVkZWQuCisgICAgfkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKTsKKworICAg
IGJvb2wgZXh0cmFjdFN1Y2NlZWRlZCgpIHsgcmV0dXJuIG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQor
ICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0
YTsgfQorICAgIHVuc2lnbmVkIGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0K
KyAgICB1bnNpZ25lZCBpbWFnZUhlaWdodCgpIHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KKyAg
ICBEYXRhRm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZv
cm1hdDsgfQorICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9
CisgICAgdW5zaWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2lt
YWdlU291cmNlVW5wYWNrQWxpZ25tZW50OyB9CisgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNv
dXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Citwcml2YXRlOgorICAgIC8v
IEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0
aG9kLgorICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0
YXR1cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5k
IEFscGhhT3AgZXRjLAorICAgIC8vIG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBvciByZWxl
dmFudCBkYXRhIGlmIG5lZWRlZCBhbmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcworICAgIGJv
b2wgZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworCisjaWYgVVNFKENBSVJPKQorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1h
Z2VTdXJmYWNlOworI2VsaWYgVVNFKENHKQorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2Nn
SW1hZ2U7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOworICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG1fcGl4ZWxEYXRhOworICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+
IG1fZm9ybWFsaXplZFJHQkE4RGF0YTsKKyNlbmRpZgorICAgIEltYWdlKiBtX2ltYWdlOworICAg
IERPTVNvdXJjZSBtX2ltYWdlSHRtbERvbVNvdXJjZTsKKyAgICBib29sIG1fZXh0cmFjdFN1Y2Nl
ZWRlZDsKKyAgICBjb25zdCB2b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgIHVuc2lnbmVkIG1f
aW1hZ2VXaWR0aDsKKyAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OworICAgIERhdGFGb3JtYXQg
bV9pbWFnZVNvdXJjZUZvcm1hdDsKKyAgICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICB1bnNpZ25l
ZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggZDQ3MWM0MjJjYzQ3MjhiZmVjZjMwZTkx
ZjY5MjdmMTRlMTcyNmRjNS4uNDY1ZWYyNDNmMzg2ZWIyZjgyYzkyNjRlMTBiOGUzODA1ODFjOTFi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTcwNywxMSArNzA3LDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNw
cAppbmRleCAwNjk3NWE0MTM5YTE5ZGE3Nzc2ZTAyMDgyMTQ0MmZlNWJjYjJlMGY3Li5mYWRiMjQz
ZTY3OGI3MjdmMTBiMGI2YjNiMmU5MGYwNThiZDM5MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRHTENhaXJvLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05U
RVhUX0dMKSAmJiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKQEAgLTM5LDkgKzQwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0g
ZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCkKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCkKIHsKICAgICBpZiAoIW1f
aW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKaW5kZXgg
N2NjMzk2OTJkZTJjMWM3Zjg0NjZmNDVhOTZhZTE1YTU1NDcxMGY1ZS4uYmI5MWRlYzkxMjI0ZDQx
OTdlY2E4MWJiZGJjNGUwNTY3ZTQzYzA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKQEAgLTMxNyw5ICszMTgs
OSBAQCB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQgc3JjRm9ybWF0LCBjb25zdCB1aQogCiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OworR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0
cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdh
bW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdElt
YWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAg
aWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmNwcAppbmRleCBjMWY5MjY1YjE2OTVhNWQ2NGMzN2NmYWY1YzhjMDRkYzA5
YzU4MWIwLi41YmU1YTlkNjczYjZkYTA5ZGYyM2Q4YjUyNGZkODIzY2I2Yzg5M2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKQEAgLTMxLDI0NiArMzEsMTAgQEAKICNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5o
IgotI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7
Ci0KLUdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0NHTGVudW0g
ZGVzdGluYXRpb25Gb3JtYXQsIEdDR0xlbnVtIGRlc3RpbmF0aW9uVHlwZSkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
Rm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjhfUzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzhfUzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjhfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQThfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURToKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQl9JTlRFR0VSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0I4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkE6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkFfSU5URUdFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKLSAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNIT1JUOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lO
VEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkcxNl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1h
dCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTY7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkQxNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR19JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTY7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6SU5UOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lO
VEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkczMl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyX1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9TOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQp
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpEMzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICAgICAgc3dpdGNo
IChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkExNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkVEOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0Jf
QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0
Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpE
MzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjU2NTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzVfOV85XzlfUkVWOgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCNTk5OTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEUzI0Xzg7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0g
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYx
MUYxMUY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEyXzEwXzEwXzEwOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGRzdEZvcm1hdDsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2V0QnVmZmVyc1RvQXV0b0NsZWFyKCkKIHsKICAgICBHQ0dM
dWludCBidWZmZXJzID0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CkBAIC0z
MDcsMTMgKzcxLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVByZXNl
cnZlRHJhd2luZ0J1ZmZlcigpCiAgICAgbV9idWZmZXJzVG9BdXRvQ2xlYXIgPSAwOwogfQogCisj
aWYgIVVTRShBTkdMRSkKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdu
bWVudCkKIHsKICAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25t
ZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgp
OwogICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgaWYgKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKSB7CiAgICAgICAgIHVuc2lnbmVkIHNpemU7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICAgICAgUGl4
ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tB
bGlnbm1lbnQ7CiAgICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRy
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19F
UlJPUikgewpAQCAtMzI5LDQ4NCArOTQsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZQogICAg
IH0KICAgICByZXR1cm4gdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwogfQorI2Vu
ZGlmCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21w
b25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6IC8vIFRyZWF0IGl0IGFzIG9uZSBjb21wb25lbnQu
Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ukc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoK
LSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6Ci0gICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OAotICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKLSAg
ICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21w
b25lbnQgPSBzaXplb2YoR0NHTGJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQg
PSBzaXplb2YoR0NHTHVieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U0hPUlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dM
c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hv
cnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0g
c2l6ZW9mKEdDR0xpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihH
Q0dMdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
SU5UXzVfOV85XzlfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF8yXzEwXzEwXzEwX1JFVjoKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAg
ICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGhhbGZmbG9h
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMy
X1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDR0xmbG9hdCkgKyBzaXplb2YoR0NHTHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi0jaWYgIVVTRShBTkdMRSkKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3Np
YmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSkKLXsKLSNkZWZpbmUgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1h
Y3JvKSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86IFwKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0
TWFjcm87IFwKLSAgICAgICAgdHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlTWFj
cm87IFwKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSOCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAs
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk0gICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkVEICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkYg
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgSEFMRl9G
TE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSRUQgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhVSSAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlI4SSAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9J
TlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UjE2SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIg
ICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
MzJJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkcgICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9S
TSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSRzE2RiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
RyAgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMkYgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHOFVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVH
RVIgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkcxNlVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAg
LCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
VUkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UkczMkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdfSU5URUdFUiAgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjggICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpTUkdCOCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ig
ICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1ICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzZf
NSAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjhfU05PUk0gICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAg
ICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRiAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVYgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCOV9FNSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBV
TlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RiAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQiAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkYg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UkdCOFVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5U
RUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjMyVUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAg
ICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkkgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBOCAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9S
TSAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEJZVEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkdCNV9BMSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0ICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNF80
XzRfNCAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IxMF9BMiAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAg
ICAgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RiAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEzMkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwg
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJ
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBCWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUkgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSSAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTE2SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9J
TlRFR0VSICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkkgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBMzJVSSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIg
ICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTYgLCBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVCAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNCAsIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09N
UE9ORU5UMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBGTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDggLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RF
TkNJTCAgLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICAgICwgRXh0
ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JH
Ql9BTFBIQV9FWFQgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQgICAgICAs
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSN1bmRlZiBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFCi0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQotCi1HQ0dMZW51bSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoCi0gICAgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgY29uc3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBp
eGVsU3RvcmVQYXJhbXMmIHBhcmFtcywKLSAgICB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRlcywg
dW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5dGVzKQotewot
ICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVzKTsKLSAgICBBU1NFUlQocGFyYW1zLmFsaWdubWVu
dCA9PSAxIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gMiB8fCBwYXJhbXMuYWxpZ25tZW50ID09IDQg
fHwgcGFyYW1zLmFsaWdubWVudCA9PSA4KTsKLSAgICBBU1NFUlQocGFyYW1zLnJvd0xlbmd0aCA+
PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLmltYWdlSGVpZ2h0ID49IDApOwotICAgIEFTU0VSVChw
YXJhbXMuc2tpcFBpeGVscyA+PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLnNraXBSb3dzID49IDAp
OwotICAgIEFTU0VSVChwYXJhbXMuc2tpcEltYWdlcyA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAw
IHx8IGhlaWdodCA8IDAgfHwgZGVwdGggPCAwKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0IHx8ICFkZXB0
aCkgewotICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChwYWRkaW5n
SW5CeXRlcykKLSAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChz
a2lwU2l6ZUluQnl0ZXMpCi0gICAgICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gMDsKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpbnQg
cm93TGVuZ3RoID0gcGFyYW1zLnJvd0xlbmd0aCA+IDAgPyBwYXJhbXMucm93TGVuZ3RoIDogd2lk
dGg7Ci0gICAgaW50IGltYWdlSGVpZ2h0ID0gcGFyYW1zLmltYWdlSGVpZ2h0ID4gMCA/IHBhcmFt
cy5pbWFnZUhlaWdodCA6IGhlaWdodDsKLQotICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50
LCBjb21wb25lbnRzUGVyUGl4ZWw7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFt
ZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25l
bnQpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTTsKLSAg
ICB1bnNpZ25lZCBieXRlc1Blckdyb3VwID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25lbnRz
UGVyUGl4ZWw7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRW
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihyb3dMZW5ndGgpOwotICAgIGNoZWNrZWRWYWx1
ZSAqPSBieXRlc1Blckdyb3VwOwotICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0KLSAg
ICB1bnNpZ25lZCBsYXN0Um93U2l6ZTsKLSAgICBpZiAocGFyYW1zLnJvd0xlbmd0aCA+IDAgJiYg
cGFyYW1zLnJvd0xlbmd0aCAhPSB3aWR0aCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gdG1wID0gd2lkdGg7Ci0gICAgICAgIHRtcCAqPSBieXRlc1Blckdyb3Vw
OwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgbGFzdFJvd1NpemUgPSB0
bXAudW5zYWZlR2V0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxhc3RSb3dTaXplID0gY2hlY2tl
ZFZhbHVlLnVuc2FmZUdldCgpOwotCi0gICAgdW5zaWduZWQgcGFkZGluZyA9IDA7Ci0gICAgdW5z
aWduZWQgcmVzaWR1YWwgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCkgJSBwYXJhbXMuYWxpZ25t
ZW50OwotICAgIGlmIChyZXNpZHVhbCkgewotICAgICAgICBwYWRkaW5nID0gcGFyYW1zLmFsaWdu
bWVudCAtIHJlc2lkdWFsOwotICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFkZGluZzsKLSAgICB9
Ci0gICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICB1bnNpZ25lZCBwYWRkZWRSb3dT
aXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwotCi0gICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IHJvd3MgPSBpbWFnZUhlaWdodDsKLSAgICByb3dzICo9IChkZXB0aCAt
IDEpOwotICAgIC8vIExhc3QgaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IElNQUdFX0hFSUdIVCBw
YXJhbWV0ZXIuCi0gICAgcm93cyArPSBoZWlnaHQ7Ci0gICAgaWYgKHJvd3MuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0g
ICAgY2hlY2tlZFZhbHVlICo9IChyb3dzIC0gMSk7Ci0gICAgLy8gTGFzdCByb3cgaXMgbm90IGFm
ZmVjdGVkIGJ5IFJPV19MRU5HVEggcGFyYW1ldGVyLgotICAgIGNoZWNrZWRWYWx1ZSArPSBsYXN0
Um93U2l6ZTsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgICppbWFnZVNpemVJ
bkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwotICAgIGlmIChwYWRkaW5nSW5CeXRl
cykKLSAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKLQotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBza2lwU2l6ZSA9IDA7Ci0gICAgaWYgKHBhcmFtcy5za2lw
SW1hZ2VzID4gMCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
dG1wID0gcGFkZGVkUm93U2l6ZTsKLSAgICAgICAgdG1wICo9IGltYWdlSGVpZ2h0OwotICAgICAg
ICB0bXAgKj0gcGFyYW1zLnNraXBJbWFnZXM7Ci0gICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
OwotICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0gICAgfQotICAgIGlmIChw
YXJhbXMuc2tpcFJvd3MgPiAwKSB7Ci0gICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92
ZXJmbG93PiB0bXAgPSBwYWRkZWRSb3dTaXplOwotICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBS
b3dzOwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgc2tpcFNpemUgKz0g
dG1wLnVuc2FmZUdldCgpOwotICAgIH0KLSAgICBpZiAocGFyYW1zLnNraXBQaXhlbHMgPiAwKSB7
Ci0gICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBieXRlc1Bl
ckdyb3VwOwotICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBQaXhlbHM7Ci0gICAgICAgIGlmICh0
bXAuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFOwotICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0g
ICAgfQotICAgIGlmIChza2lwU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICBpZiAoc2tpcFNpemVJbkJ5dGVz
KQotICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0KLSAg
ICBjaGVja2VkVmFsdWUgKz0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0gICAgaWYgKGNoZWNrZWRW
YWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOwot
fQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtczo6UGl4ZWxTdG9y
ZVBhcmFtcygpCi0gICAgOiBhbGlnbm1lbnQoNCkKLSAgICAsIHJvd0xlbmd0aCgwKQotICAgICwg
aW1hZ2VIZWlnaHQoMCkKLSAgICAsIHNraXBQaXhlbHMoMCkKLSAgICAsIHNraXBSb3dzKDApCi0g
ICAgLCBza2lwSW1hZ2VzKDApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFn
ZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VI
dG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9u
KQotewotICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGlt
YWdlSHRtbERvbVNvdXJjZTsKLSAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2Uo
cHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGlnbm9yZU5hdGl2
ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhY2tJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBo
YU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgc291cmNlSW1hZ2VXaWR0aCwg
dW5zaWduZWQgc291cmNlSW1hZ2VIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3Vi
UmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgaW50
IHVucGFja0ltYWdlSGVpZ2h0LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFp
bWFnZSB8fCAhcGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBw
YWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1l
bnQgPT0gMSkuCi0gICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgcGFyYW1zLmFsaWdu
bWVudCA9IDE7Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
c291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUu
aGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRyKSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHNvdXJjZUlt
YWdlV2lkdGgsIHNvdXJjZUltYWdlSGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVw
dGgsIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkp
Ci0gICAgICAgIG9ic2VydmVyLT5kaWREcmF3KCppbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RJbWFnZURhdGEoCi0gICAg
SW1hZ2VEYXRhKiBpbWFnZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsCi0gICAgaW50IGRlcHRoLCBpbnQgdW5w
YWNrSW1hZ2VIZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAg
aWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSBp
bWFnZURhdGEtPndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0KCk7
Ci0KLSAgICB1bnNpZ25lZCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0
bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7
Ci0gICAgcGFyYW1zLmFsaWdubWVudCA9IDE7Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNl
SW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBu
dWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIGlmICgh
cGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0lt
YWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxT
dG9yZVBhcmFtcyYgdW5wYWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGNvbnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIC8v
IEFzc3VtZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4K
LSAgICBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwg
dHlwZSk7Ci0KLSAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCi0gICAgdW5zaWduZWQg
Y29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAgICBpZiAoIWNvbXB1dGVG
b3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWws
ICZieXRlc1BlckNvbXBvbmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBieXRlc1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7
Ci0gICAgZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKLQotICAg
IHVuc2lnbmVkIGltYWdlU2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsKLSAgICBjb21wdXRl
SW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHVucGFja1Bh
cmFtcywgJmltYWdlU2l6ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUluQnl0ZXMpOwotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4
ZWxzKTsKLSAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQotICAgICAgICBzcmNEYXRhICs9IHNraXBT
aXplSW5CeXRlczsKLQotICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBzb3VyY2VEYXRhRm9y
bWF0LCB1bnBhY2tQYXJhbXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA6IHdp
ZHRoLCBoZWlnaHQsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEsIHVucGFja1BhcmFt
cy5hbGlnbm1lbnQsIDAsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9w
OjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZ
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkE4OgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6Ukc4X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2X1M6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMTY6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkJHUjg6Ci0gICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QVJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QUJHUjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMl9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
QTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8x
MF8xMDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYxMUYx
MUY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTk5OToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpEMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
RDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEUzI0Xzg6Ci0g
ICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2X1M6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOgotICAgICAg
ICByZXR1cm4gNjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2X1M6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzMyRjoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMkY6Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTMyX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTMyRjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFja1BpeGVscyhj
b25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVu
c2lnbmVkIHNvdXJjZURhdGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3Qg
SW50UmVjdCYgc291cmNlRGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGlu
YXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2
b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCi17Ci0gICAgQVNTRVJUKGRlcHRoID49
IDEpOwotICAgIFVOVVNFRF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0KTsgLy8gRGVyaXZlZCBmcm9t
IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkuCi0gICAgaWYgKCF1bnBhY2tJbWFnZUhl
aWdodCkKLSAgICAgICAgdW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xl
LmhlaWdodCgpOwotICAgIGludCB2YWxpZFNyYyA9IHNvdXJjZURhdGFXaWR0aCAqIFRleGVsQnl0
ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7Ci0gICAgaW50IHJlbWFpbmRlciA9IHNvdXJj
ZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAw
OwotICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7Ci0gICAgaW50IHNyY1Jvd09mZnNl
dCA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUueCgpICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3Vy
Y2VEYXRhRm9ybWF0KTsKLQotICAgIERhdGFGb3JtYXQgZHN0RGF0YUZvcm1hdCA9IGdldERhdGFG
b3JtYXQoZGVzdGluYXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSk7Ci0gICAgaW50IGRzdFN0
cmlkZSA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUud2lkdGgoKSAqIFRleGVsQnl0ZXNGb3JGb3Jt
YXQoZHN0RGF0YUZvcm1hdCk7Ci0gICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9u
RGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRl
ICogKChkZXB0aCAqIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkpIC0gMSk7Ci0gICAg
ICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7Ci0gICAgfQotICAgIGlmICghaGFzQWxwaGEoc291
cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFoYXNDb2xv
cihkc3REYXRhRm9ybWF0KSkKLSAgICAgICAgYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsK
LQotICAgIGlmIChzb3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9
PSBBbHBoYU9wOjpEb05vdGhpbmcpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogYmFzZVB0ciA9
IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLnkoKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogYmFzZUVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBz
b3VyY2VEYXRhU3ViUmVjdGFuZ2xlLm1heFkoKTsKLQotICAgICAgICAvLyBJZiBwYWNraW5nIG11
bHRpcGxlIGltYWdlcyBpbnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZsaXBZIGlzIHRydWUsCi0gICAg
ICAgIC8vIHRoZW4gdGhlIHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9m
IHRoZQotICAgICAgICAvLyAiYm90dG9tbW9zdCIgb2YgdGhvc2UgaW1hZ2VzLiBTaW5jZSB0aGUg
c291cmNlIHBvaW50ZXIgc3RyaWRlcyBpbgotICAgICAgICAvLyB0aGUgcG9zaXRpdmUgZGlyZWN0
aW9uLCB3ZSBuZWVkIHRvIGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQgdGhlCi0gICAgICAgIC8vIGxh
c3QsIG9yICJ0b3Btb3N0Iiwgb2YgdGhlc2UgaW1hZ2VzLgotICAgICAgICBpZiAoZmxpcFkgJiYg
ZGVwdGggPiAxKSB7Ci0gICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgZGlzdGFuY2VUb1RvcElt
YWdlID0gKGRlcHRoIC0gMSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJbWFnZUhlaWdodDsKLSAgICAg
ICAgICAgIGJhc2VQdHIgLT0gZGlzdGFuY2VUb1RvcEltYWdlOwotICAgICAgICAgICAgYmFzZUVu
ZCAtPSBkaXN0YW5jZVRvVG9wSW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBy
b3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOwotICAgICAg
ICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyArK2kpIHsKLSAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJhc2VQdHI7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90
KiBwdHJFbmQgPSBiYXNlRW5kOwotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgewot
ICAgICAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciArIHNyY1Jvd09mZnNldCwgcm93U2l6ZSk7
Ci0gICAgICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKLSAgICAgICAgICAgICAgICBkc3Qg
Kz0gZHN0U3RyaWRlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFzZVB0ciArPSB1bnBh
Y2tJbWFnZUhlaWdodCAqIHNyY1N0cmlkZTsKLSAgICAgICAgICAgIGJhc2VFbmQgKz0gdW5wYWNr
SW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcigKLSAgICAgICAgc291cmNl
RGF0YVN1YlJlY3RhbmdsZSwgZGVwdGgsCi0gICAgICAgIHVucGFja0ltYWdlSGVpZ2h0LCBzb3Vy
Y2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsCi0gICAgICAgIHNyY1N0cmlkZSwgc3JjUm93T2Zmc2V0
LCBkc3RTdHJpZGUpOwotICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZURhdGFGb3JtYXQsIGRz
dERhdGFGb3JtYXQsIGFscGhhT3ApOwotICAgIGlmICghY29udmVydGVyLnN1Y2Nlc3MoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggMjUyMTlmOGY1
MzFjYWRhM2FiZjVkMGU0MjE1MzM1YzEzNDcwZmUxOC4uNjk4OGJkNjljYTBmMDEwZmExYjY4ZjY2
NTMwNzgzZWJmYzYzZjQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAg
LTg3LDI5ICs4NywyMCBAQCB0eXBlZGVmIFdURjo6SGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4g
U2hhZGVyTmFtZUhhc2g7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTsK
IAotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
R0wKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGZpbmFsIDogcHVibGljIEdyYXBoaWNz
Q29udGV4dEdMCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBwcml2YXRlIFdlYkdMTGF5ZXJD
bGllbnQKICNlbmRpZgogewogcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBvc2l0ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ29udGV4dExvc3Qo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlQ29udGV4dCgpID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSA9IDA7
Ci0gICAgfTsKLQogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlv
biA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4pOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgUmVmPEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
IHNoYXJlZENvbnRleHQpOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9iajsg
fQotICAgIFBsYXRmb3JtR0xPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV90ZXh0dXJlOyB9Ci0gICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xMYXll
ci5nZXQoKSk7IH0KKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0woKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KKyAgICBQ
bGF0Zm9ybUdMT2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
dGV4dHVyZTsgfQorICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwbGF5T2JqOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlnT2JqOyB9CiAg
ICAgc3RhdGljIEdDR0xlbnVtIElPU3VyZmFjZVRleHR1cmVUYXJnZXQoKTsKQEAgLTEzMCw5ICsx
MjEsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcmVsZWFzZUN1cnJlbnRDb250ZXh0KFJl
bGVhc2VCZWhhdmlvcik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xp
ZW50KSB7IG1fY2xpZW50cy5hZGQoJmNsaWVudCk7IH0KLSAgICB2b2lkIHJlbW92ZUNsaWVudChD
bGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9Ci0KICAgICAvLyBX
aXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFy
IEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAKQEAgLTE0NSw4MSArMTMzLDExIEBA
IHB1YmxpYzoKICAgICAvLyBDb21waWxlIGEgc2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBB
TkdMRS4KICAgICB2b2lkIGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCk7CiAK
LSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBh
cmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBp
cyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9w
ZW5HTCBkZWZhdWx0IHNldHRpbmcuCi0gICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVt
IGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQgPSA0KTsKLQotICAgIGJv
b2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
Ly8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgotICAg
IC8vCi0KLSAgICBzdHJ1Y3QgUGl4ZWxTdG9yZVBhcmFtcyBmaW5hbCB7Ci0gICAgICAgIFBpeGVs
U3RvcmVQYXJhbXMoKTsKLQotICAgICAgICBHQ0dMaW50IGFsaWdubWVudDsKLSAgICAgICAgR0NH
TGludCByb3dMZW5ndGg7Ci0gICAgICAgIEdDR0xpbnQgaW1hZ2VIZWlnaHQ7Ci0gICAgICAgIEdD
R0xpbnQgc2tpcFBpeGVsczsKLSAgICAgICAgR0NHTGludCBza2lwUm93czsKLSAgICAgICAgR0NH
TGludCBza2lwSW1hZ2VzOwotICAgIH07Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50
cyBwZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKLSAgICAvLyBmb3IgdGhlIGdpdmVu
IGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgotICAgIC8vIGVp
dGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgotICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRB
bmRUeXBlUGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUs
Ci0gICAgICAgIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsCi0gICAgICAgIHVuc2lnbmVk
KiBieXRlc1BlckNvbXBvbmVudCk7Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgaW1hZ2Ugc2l6ZSBp
biBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMgaXMgbm90IG51bGwsIHBhZGRpbmcKLSAgICAvLyBp
cyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJuLiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWQs
IG90aGVyd2lzZQotICAgIC8vIHJldHVybiB0aGUgc3VnZ2VzdGVkIEdMIGVycm9yIGluZGljYXRp
bmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlOgotICAgIC8vICAgSU5WQUxJRF9WQUxVRSBpZiB3
aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Igb3ZlcmZsb3cgaGFwcGVucy4KLSAgICAvLyAgIElO
VkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgotICAgIHN0YXRpYyBHQ0dMZW51
bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xl
bnVtIHR5cGUsCi0gICAgICAgIEdDR0xzaXplaSB3aWR0aCwKLSAgICAgICAgR0NHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgR0NHTHNpemVpIGRlcHRoLAotICAgICAgICBjb25zdCBQaXhlbFN0b3Jl
UGFyYW1zJiwKLSAgICAgICAgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsCi0gICAgICAgIHVu
c2lnbmVkKiBwYWRkaW5nSW5CeXRlcywKLSAgICAgICAgdW5zaWduZWQqIHNraXBTaXplSW5CeXRl
cyk7Ci0KICNpZiAhVVNFKEFOR0xFKQotICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0QW5k
VHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSYg
Zm9ybWF0LCBHQ0dMZW51bSYgdHlwZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKKyAgICBib29s
IHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0
LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
IGFsaWdubWVudCA9IDQpIGZpbmFsOworI2VuZGlmCiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29u
dGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAotICAg
IC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQg
YW5kIHR5cGUsCi0gICAgLy8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFs
cGhhIGZsYWdzLiBSZXR1cm5zIHRydWUKLSAgICAvLyB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGlj
IGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqLAotICAgICAgICBEYXRhRm9ybWF0LAot
ICAgICAgICBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwKLSAgICAgICAg
aW50IGRlcHRoLAotICAgICAgICBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsCi0gICAgICAgIEdDR0xl
bnVtIGZvcm1hdCwKLSAgICAgICAgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgYm9vbCBmbGlwWSwK
LSAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICBWZWN0b3I8dWludDhfdD4m
IGRhdGEpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2Vy
LXN1cHBsaWVkIHRleHR1cmUKLSAgICAvLyBkYXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHBy
ZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4KLSAgICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgdGln
aHRseSBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQKLSAgICAvLyB1bnBhY2tQYXJhbXMs
IHRoZSBvdXRwdXQgZGF0YSB3aWxsIGJlIHRpZ2h0bHkgcGFja2VkLgotICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiBhbnkgZXJyb3Igb2NjdXJyZWQuCi0gICAgc3Rh
dGljIGJvb2wgZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsCi0gICAgICAgIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgY29u
c3QgUGl4ZWxTdG9yZVBhcmFtcyYgdW5wYWNrUGFyYW1zLAotICAgICAgICBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBj
b25zdCBmaW5hbDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEVudHJ5IHBvaW50cyBm
b3IgV2ViR0wuCkBAIC01MzcsNyArNDU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRCdWZm
ZXJzVG9BdXRvQ2xlYXIoKTsKICAgICB2b2lkIHNldEJ1ZmZlcnNUb0F1dG9DbGVhcihHQ0dMYml0
ZmllbGQpOwogICAgIEdDR0xiaXRmaWVsZCBnZXRCdWZmZXJzVG9BdXRvQ2xlYXIoKSBjb25zdDsK
LSAgICB2b2lkIGVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIG92ZXJyaWRlOworICAgIHZv
aWQgZW5hYmxlUHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgZmluYWw7CiAKICAgICB2b2lkIGRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKICAgICB2b2lkIHNpbXVsYXRlQ29udGV4
dENoYW5nZWQoKTsKQEAgLTU1MCwxNyArNDY4LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1p
dGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCkgZmluYWw7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9v
bCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFj
a2luZywgdm9pZCogcGJ1ZmZlcik7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBQTEFURk9STShNQUMpCiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5k
aWYKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAotICAgIHZvaWQgc2V0Q29udGV4dFZpc2li
aWxpdHkoYm9vbCk7CisgICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsK
IAotICAgIEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVz
ZWRGb3JDcmVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNy
ZWF0aW9uOyB9CisgICAgR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVm
ZXJlbmNlVXNlZEZvckNyZWF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wb3dlclByZWZl
cmVuY2VVc2VkRm9yQ3JlYXRpb247IH0KIAogICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVh
dGlvbiBhbmQgZGVsZXRpb24KICAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIGZp
bmFsOwpAQCAtNTc3LDE1ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVTaGFkZXIo
UGxhdGZvcm1HTE9iamVjdCkgZmluYWw7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3Jt
R0xPYmplY3QpIGZpbmFsOwogCi0gICAgLy8gU3ludGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdo
aWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCi0gICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJv
ci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCi0gICAgLy8gMi4wIGJlaGF2aW9y
IG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9uYWwgZXJyb3IKLSAgICAvLyBj
aGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4KLSAgICAvLwotICAgIC8vIFBlciB0aGUgYmVoYXZp
b3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBvbmUKLSAgICAvLyBpbnN0YW5j
ZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0gZnJvbSBjYWxscyB0bwotICAg
IC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuCi0gICAgdm9pZCBzeW50
aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcik7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJv
cihHQ0dMZW51bSBlcnJvcikgZmluYWw7CiAKICAgICAvLyBSZWFkIHJlYWwgT3BlbkdMIGVycm9y
cywgYW5kIG1vdmUgdGhlbSB0byB0aGUgc3ludGhldGljCiAgICAgLy8gZXJyb3IgbGlzdC4gUmV0
dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVycm9yIGlzIG1vdmVkLgpAQCAtNTk3LDU5ICs1MDMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCiAgICAgRXh0ZW5zaW9uc0dMJiBn
ZXRFeHRlbnNpb25zKCkgZmluYWw7CiAKLSAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkgY29uc3Q7Ci0KLSAgICAvLyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVu
IEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9y
Ci0gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5
aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFPcCBmbGFncy4KLSAgICAvLyBSZXR1cm5zIHRydWUgdXBv
biBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2
b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwg
QWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lk
dGgsIHVuc2lnbmVkIHNvdXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFn
ZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQs
IGludCB1bnBhY2tJbWFnZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIGNs
YXNzIEltYWdlRXh0cmFjdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlRXh0cmFjdG9y
KEltYWdlKiwgRE9NU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKTsKLQotICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3Vy
Y2VzCi0gICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgotICAg
ICAgICB+SW1hZ2VFeHRyYWN0b3IoKTsKLQotICAgICAgICBib29sIGV4dHJhY3RTdWNjZWVkZWQo
KSB7IHJldHVybiBtX2V4dHJhY3RTdWNjZWVkZWQ7IH0KLSAgICAgICAgY29uc3Qgdm9pZCogaW1h
Z2VQaXhlbERhdGEoKSB7IHJldHVybiBtX2ltYWdlUGl4ZWxEYXRhOyB9Ci0gICAgICAgIHVuc2ln
bmVkIGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KLSAgICAgICAgdW5zaWdu
ZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9Ci0gICAgICAgIERhdGFG
b3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0OyB9
Ci0gICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9Ci0g
ICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9p
bWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsgfQotICAgICAgICBET01Tb3VyY2UgaW1hZ2VIdG1s
RG9tU291cmNlKCkgeyByZXR1cm4gbV9pbWFnZUh0bWxEb21Tb3VyY2U7IH0KLSAgICBwcml2YXRl
OgotICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlv
biBvZiB0aGlzIG1ldGhvZC4KLSAgICAgICAgLy8gRXh0cmFjdHMgdGhlIGltYWdlIGFuZCBrZWVw
cyB0cmFjayBvZiBpdHMgc3RhdHVzLCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsIFNvdXJjZSBBbGln
bm1lbnQsIGZvcm1hdCBhbmQgQWxwaGFPcCBldGMsCi0gICAgICAgIC8vIG5lZWRzIHRvIGxvY2sg
dGhlIHJlc291cmNlcyBvciByZWxldmFudCBkYXRhIGlmIG5lZWRlZCBhbmQgcmV0dXJucyB0cnVl
IHVwb24gc3VjY2VzcwotICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZl
SW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7Ci0jZWxpZiBVU0UoQ0cpCi0g
ICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gbV9waXhlbERhdGE7Ci0gICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXpl
ZFJHQkE4RGF0YTsKLSNlbmRpZgotICAgICAgICBJbWFnZSogbV9pbWFnZTsKLSAgICAgICAgRE9N
U291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOwotICAgICAgICBib29sIG1fZXh0cmFjdFN1Y2Nl
ZWRlZDsKLSAgICAgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKLSAgICAgICAgdW5z
aWduZWQgbV9pbWFnZVdpZHRoOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OwotICAg
ICAgICBEYXRhRm9ybWF0IG1faW1hZ2VTb3VyY2VGb3JtYXQ7Ci0gICAgICAgIEFscGhhT3AgbV9h
bHBoYU9wOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50Owot
ICAgIH07Ci0KLSAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFpbE5l
eHRTdGF0dXNDaGVjayA9IHRydWU7IH0KKyAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hl
Y2soKSBmaW5hbCB7IG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7IH0KIAotICAgIEdDR0xl
bnVtIGFjdGl2ZVRleHR1cmVVbml0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0
dXJlVW5pdDsgfQotICAgIEdDR0xlbnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKTsgfQotICAgIEdDR0xlbnVtIGN1cnJl
bnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0
KCk7IH0KICAgICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKSB7IHJldHVy
biBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7IH0KIAogI2lmIFBMQVRG
T1JNKE1BQykKQEAgLTY1NywxNyArNTEyLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcmVlbkRp
ZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlcGFyZUZv
ckRpc3BsYXkoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgZmluYWw7CiAKIHByaXZh
dGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwogCi0gICAg
Ly8gSGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1
cmVEYXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCi0gICAgLy8gZGF0YSBpbnRv
IHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KLSAgICAv
LyBBIHNvdXJjZVVucGFja0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3Vy
Y2UKLSAgICAvLyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRh
a2UgYSBzbG93IHBhdGguCi0gICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2Fw
cyBiZXR3ZWVuIHJvd3MuCi0gICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90
KiBzb3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHNvdXJj
ZURhdGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291
cmNlRGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRh
LCBib29sIGZsaXBZKTsKIAogICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVx
dWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFy
IHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgpAQCAt
Njk1LDEzICs1NDQsMTIgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGJv
b2wgYWxsb3dPZmZsaW5lUmVuZGVyZXJzKCkgY29uc3Q7CisgICAgYm9vbCByZXNoYXBlRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoKTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKICAgICAvLyBX
ZWJHTExheWVyQ2xpZW50IG92ZXJyaWRlcy4KLSAgICB2b2lkIGRpZERpc3BsYXkoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZERpc3BsYXkoKSBmaW5hbDsKICNlbmRpZgogCi0gICAgaW50IG1fY3Vy
cmVudFdpZHRoIHsgMCB9OwotICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07Ci0KICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwpA
QCAtODg4LDggKzczNiw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMUHJpdmF0ZT4gbV9wcml2YXRlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0
PENsaWVudCo+IG1fY2xpZW50czsKLQogICAgIGJvb2wgbV9pc0ZvcldlYkdMMiB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX3VzaW5nQ29yZVByb2ZpbGUgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRleCA3NDFlZTRjMTRlYWEyNjZh
NzlmZWI3ZDEyMDYyYWFhYTNjZWI1MWUwLi5iMTRiNjJkNWU0ZmJlYThlYTJjODc4NTZlN2JmZWQ2
YjhkMzg2N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1v
bi5jcHAKQEAgLTQyNSwxMSArNDI1LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGEKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKaW5kZXggOWVm
NTMxZWJmOTQyMjg5NDhlMDNjODYyMzQ0ZTRhNjhhZmRlMmIxZS4uYjE0M2YxZDkzOTgzNjE5ZGZm
NjI1YzExZjM2NjAxYTcyNDUwODhmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJE
LmNwcApAQCAtMjksMTUgKzI5LDE2IEBACiAjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
ICYmIFVTRShESVJFQ1QyRCkKIAogI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6
fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2Uo
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBi
b29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJ
bWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Cg==
</data>
<flag name="review"
          id="427536"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411433</attachid>
            <date>2020-10-15 05:48:17 -0700</date>
            <delta_ts>2020-10-16 05:12:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201015154814.patch</filename>
            <type>text/plain</type>
            <size>200863</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTA3Zjc0Nzc4Y2RhMzBj
NzIzYjc2MjA4Y2EzOGQ0OWI0NDAxMTE1MC4uMjY4OGEwNTBmOTY1ZWZmYWFjZThhYzk0NTdkZmQw
ZGFlN2JjOGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0xNSAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdMIHBhcnQgMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjEwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IDIgb2Ygd29yayB0b3dhcmRzIFdlYkdMIGlt
cGxlbWVudGF0aW9uIHdoaWNoIHVzZXMKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wgYWJzdHJh
Y3QgYmFzZSBjbGFzcyBpbnN0ZWFkIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IGNvbmNyZXRlIGNsYXNzLgorCisgICAgICAgIE1vdmUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpIHRvCisgICAgICAgIHByaXZhdGUgc2VjdGlvbiwgYXMgaXQg
aXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mCisgICAgICAgIHRoZSBjbGFzcy4gVGhlIGZ1
bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBhdCB0aGUKKyAgICAgICAgc3RhcnQgb2Yg
YWxsIHB1YmxpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGludG8gT3BlbkdMCisgICAgICAg
IHRvIGVuc3VyZSB0aGF0IE9wZW5HTCB1c2VzIHRoZSByaWdodCBjb250ZXh0LgorCisgICAgICAg
IENoZWNrIGFsbCByZXR1cm4gdmFsdWVzIG9mIG1ha2VDdXJyZW50Q29udGV4dCgpLiBXZQorICAg
ICAgICBzaG91bGQgbm90IGNhbGwgaW50byBPcGVuR0wgaWYgdGhlIGNvbnRleHQgaXMgbm90IGN1
cnJlbnQsCisgICAgICAgIGFzIHRoYXQgY2FuIGxlYWQgdG8gY29ycnVwdGlvbiwgY3Jhc2hlcyBv
ciBpbmNvcnJlY3QgcmVzdWx0cy4KKyAgICAgICAgQWRkIGEgY29tcGlsZS10aW1lIHdhcm5pbmcg
aWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub3QgdXNlZC4KKyAgICAgICAgTm9uLUVXUyBjb21waWxl
ZCBmbGF2b3JzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGFyZSBjaGFuZ2VkCisgICAgICAg
IG9ubHkgaW4gYmVzdCBlZmZvcnQgbWFubmVyLgorCisgICAgICAgIEVuc3VyZSB0aGF0IGFsbCBm
dW5jdGlvbnMgYWN0dWFsbHkgY2FsbCB0aGUgbWFrZUN1cnJlbnRDb250ZXh0KCkKKyAgICAgICAg
ZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgaW50byBPcGVuR0wuIE5vbi1BTkdMRSBmbGF2b3JzIG9m
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGFyZSBlbnN1cmVkIG9ubHkgaW4gYmVz
dCBlZmZvcnQgbWFubmVyLgorCisgICAgICAgIEFOR0xFIGZsYXZvciBvZiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgc2hvdWxkIGNhbGwg
ZGlyZWN0bHkgdGhlIEFOR0xFIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlbQorICAg
ICAgICB0aHJvdWdoIGdldEV4dGVuc2lvbnMoKSBpbnRlcmZhY2UuIFRoZXJlIGlzIG5vIGNvbmRp
dGlvbmFsIGNvZGUKKyAgICAgICAgaW5zaWRlIGFuZCB0aGUgaW1wbGVtZW50YXRpb24ga25vd3Mg
ZXhhY3RseSB3aGljaCBmdW5jdGlvbiB0bworICAgICAgICBjYWxsIGluIGFsbCBzaXR1YXRpb25z
LiBUaGVyZSBpcyBubyBhYnN0cmFjdGlvbiBiZXR3ZWVuCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMIGFuZCBFeHRlbnNpb25zR0wsIHJhdGhlciB0aGV5IGFyZQorICAgICAgICBpbiBw
cmFjdGljZSB0aGUgc2FtZSBvYmplY3QgY3VycmVudGx5LCBzZW1pLWFydGlmaWNpYWxseSBzcGxp
dCB0bworICAgICAgICB0d28uIFRoaXMgaXMgdHJ1ZSBvZiBvdGhlciBmbGF2b3JzIG9mIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLAorICAgICAgICBidXQgdGhvc2UgYXJlIGxlZnQgdW5jaGFuZ2Vk
IGluIHRoaXMgcmVnYXJkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYSByZWZhY3Rvci4KKwor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRpYWxpemVOZXdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlRWxlbWVudEFycmF5U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlYWRQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRW
ZXJ0ZXhBdHRyaWIwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c3Vw
cG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmVuc3VyZUVuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6
YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QnVmZmVyc0VYVCk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFudlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRG
bG9hdHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbWl2Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm1mdlJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVy
dGV4QXR0cmliZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0VmVydGV4QXR0cmliaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRl
cmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRl
eFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OnRleFN1YkltYWdlMkRSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleEltYWdlMkRSb2J1c3RBTkdMRSk6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkRSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3Nl
ZFRleEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3R1
aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
QnVmZmVyUG9pbnRlcnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0SW50ZWdlcmlfdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlcm5hbGZvcm1hdGl2Um9idXN0QU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYklpdlJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRy
aWJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0dlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyNjRpX3ZSb2J1c3RB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFy
YW1ldGVyaTY0dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpzYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVz
dEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVy
UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0RnJhbWVidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbmlfdlJv
YnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0
aXNhbXBsZWZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4TGV2ZWxQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQb2ludGVydlJvYnVzdEFO
R0xFUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnJl
YWRuUGl4ZWxzUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldG5Vbmlmb3JtZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0blVuaWZvcm1pdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySXVpdlJv
YnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQ
YXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGk2NHZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVl
cnlPYmplY3R1aTY0dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZm
ZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5t
YXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
cHlCdWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jtcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
U3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29s
b3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21waWxlU2hhZGVyRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9u
dEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVy
YXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBY3RpdmVBdHRyaWJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292
ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJUG9pbnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0
ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFt
SW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtdWl2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3Rh
bmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9i
amVjdHVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luVHJhbnNmb3Jt
RmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVu
ZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVm
ZmVyVGV4dHVyZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
dWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4MngzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXgzeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4M2Z2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYkk0dWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYkk0dWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNRdWVyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBh
cmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTYW1wbGVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZlbmNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjbGllbnRXYWl0U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6d2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFN5bmNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1cGRhdGVDR0xDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXlP
RVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpzdXBwb3J0c0V4dGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJz
RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0FycmF5c0lu
c3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OnZl
cnRleEF0dHJpYkRpdmlzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xP
cGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VY
VCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1m
dkVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZv
cm1pdkVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0Fy
cmF5c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2Vydik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1h
c2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
M2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcmlf
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdl
cjY0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZWdlcjY0aV92KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1J
bmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0
ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3Rh
cnRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29w
eUJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6Om1hcEJ1ZmZlclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bm1hcEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9y
bXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKToKKwogMjAyMC0x
MC0xNCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
ZmFjdG9yIFdlYkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdM
IHBhcnQgMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMzRjYTg1NWQ3NWI1OGQyZDQ5NWY2Nzk5MWE5
N2U0ZDZhOWVkYzUzLi5iMzZkZTE0NjJlNWNkMTFmNWVhYTdmNDgxYzU4YWYyZmMyZTE5MjMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUo
Q2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsKLSAgICBpZiAoIWNvbnRleHQgfHwgIWNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgaWYgKCFjb250ZXh0KSB7CiAgICAg
ICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgICAgICBjYW52YXNFbGVtZW50LT5kaXNw
YXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29u
dGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAgICAgICAgICBFdmVudDo6Q2FuQnViYmxl
OjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNlQWRkcmVzcygpOwogCiAjaWYgVVNFKEFO
R0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBjb2x1bW5zLCByb3dzOwotICAgICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xFKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwgJmxlbmd0aCwgJmNvbHVtbnMsICZyb3dz
LCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0NHTHNpemVp
IGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dzID0gMDsKKyAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xFKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwgJmxlbmd0aCwgJmNvbHVtbnMsICZy
b3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBv
cnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkucmVhZG5QaXhlbHNFWFQo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCBk
YXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA5NjliYWZjYzg3OWEwOTBiMDNjYmY0
NWQxODRjZjEyMWZmNDFhZmJhLi4zNDZkMzZkZTk1ODVlNjgzZGIzMmFjMjYyMzBkM2YyYThhMzI5
MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9F
eHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC03NCw5ICs3NCwxMSBAQCBFeHRlbnNp
b25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkgPSBkZWZhdWx0OwogCiBib29sIEV4dGVu
c2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFt
X2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRB
dmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW5pdGlhbGl6
ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0KICAgICByZXR1cm4gc3VwcG9ydHNFeHRl
bnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDggQEAgdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1
cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpLgogICAgIGlmIChtX3JlcXVl
c3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAmJiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5j
b250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBA
IC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIGludCBzb3VyY2VMZW5n
dGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVE
X1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNv
dXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwgR0NHTHNpemVpLCBpbnQgKikKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gx
LCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVu
c2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICAgICBn
bDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgcmV0dXJuIGFycmF5OwpAQCAt
MTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKIH0KIApAQCAtMTkzLDEzICsyMDYs
MTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCkBAIC0yMjgsMjUgKzI0NSwzMyBAQCBi
b29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSBu
LCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lk
IEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdBcnJh
eXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2Rl
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xz
aXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZp
c29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBAIC0yNzEsOTcgKzI5NiwxMjkgQEAgR0NH
TGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1h
dChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xFX3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFudlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xib29sZWFuICpk
YXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9i
dXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZSb2J1c3RBTkdMRShHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQg
KnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtaXZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBw
bmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
R0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJn
ZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpw
YXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVy
ZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4UGFyYW1l
dGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlcml2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFO
R0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3Jh
bSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24s
IGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVu
aWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliZnZS
b2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dM
dWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkg
Kmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliaXZSb2J1c3RBTkdMRShpbmRl
eCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRl
eCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
dm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlJvYnVzdEFOR0xFKGluZGV4LCBw
bmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHNpemVpICpjb2x1bW5zLCBHQ0dM
c2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhlbHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIGxlbmd0aCwgY29sdW1ucywgcm93cywg
cGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2OCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGlu
dCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lzRm9yV2ViR0wyKQogICAgICAgICBpbnRl
cm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUs
IHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNp
emUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJn
ZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
Ojp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJp
dlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJn
ZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25z
dCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNp
emUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNl
dCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1
ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4
SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZT
aXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
aW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBs
ZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpD
b21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6
ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1h
Z2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRo
LCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBi
dWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQg
eG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJv
YnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1
ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVy
eU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCdWZmZXJQb2ludGVydlJvYnVzdEFO
R0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBH
Q0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5H
TEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBH
Q0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFOR0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNp
emUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVy
bmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSWl2Um9idXN0QU5HTEUoR0NH
THVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYklpdlJvYnVzdEFOR0xFKGlu
ZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24s
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKHBy
b2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUo
R0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NH
TGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFOR0xFKHBuYW1lLCBidWZTaXplLCBsZW5n
dGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dM
aW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZT
aXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0
QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdM
aW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBh
cmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJv
YnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0
ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZT
aXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJh
bWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBs
ZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxl
clBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBh
cmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGcmFt
ZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50
ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50
ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFuaV92Um9idXN0QU5HTEUoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJn
ZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1
aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwg
bGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBh
cmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBh
cmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQg
bGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRh
cmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIHZvaWQg
KipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9idXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcgKzcwNCw5IEBAIHN0YXRpYyB2b2lkIHdp
cGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQg
Y2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5H
TEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xl
bnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xzaXplaSAqcm93cywgdm9pZCAqZGF0YSwg
Ym9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwg
cHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBp
eGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4NiArNzQxLDExNCBAQCB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1mdlJvYnVz
dEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxv
Y2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpw
YXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFt
ZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RB
TkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0x1aW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpU
ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1z
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1
c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUo
dGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVy
SXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFtKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1
c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKHNh
bXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUo
c2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNp
emUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVl
cnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQ2NCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UXVl
cnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50NjQg
KnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2NCo+KHBhcmFtcykpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IDQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0
ZTEwYjhlMzgwNTgxYzkxYjIuLjViNWRlODMwMzNiMmUyODAwYWFmYWEwZjc4M2IwNWRiOGZmYjNk
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0xODEsMTEgKzE4MSwx
MSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRT
aXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNh
bXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
bV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9u
cygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBs
ZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUoR0xfUkVOREVSQlVGRkVSLCBz
YW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwog
ICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkgewogICAgICAgICAgICAg
Z2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291
bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAg
ICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNp
bCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRo
ZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UIHBvaW50LgogICAgICAgICAgICAg
aWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjAsMTMgKzMyMCwxNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0
IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZm
ZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYo
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1BWF9URVhUVVJFX1NJWkU6CiAgICAgICAg
IGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpFLCB2YWx1ZSk7CkBAIC0zNTksMTMgKzM2
MywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51
bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMaW50KiB2
YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdihwbmFt
ZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNp
c2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50KiBwcmVjaXNpb24pCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBl
LCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKIH0KIApAQCAtMzgyLDEzICszOTAs
MTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0
Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRo
KSk7CiB9CiAKQEAgLTQwMyw3ICs0MTUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVy
IGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxz
IHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMo
KTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFw
aGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUjsKQEAgLTUxOCw3ICs1MzIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsK
IH0KIApAQCAtNTY4LDcgKzU4NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpCiAgICAgaWYg
KHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgR0NHTGVudW0gZnJhbWVi
dWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJB
TUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTYyNCw5ICs2
NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBpZiAoIXBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHdpZHRo
ID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjM0LDEyICs2NDksMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIAog
ICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgbW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKQEAgLTY2MiwxMSArNjc5
LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQogICAgIGdsOjpDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwg
R0xfVFJVRSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7CiAgICAgICAgIGdsOjpHZXRGbG9hdHYo
R0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAgICAgIGdsOjpDbGVhckRlcHRoZigxLjBm
KTsKICAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFz
ayk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soR0xfVFJVRSk7CiAgICAgICAgIGNsZWFyTWFzayB8
PSBHTF9ERVBUSF9CVUZGRVJfQklUOwogICAgIH0KKwogICAgIGlmIChhdHRycy5zdGVuY2lsKSB7
CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJT
dGVuY2lsKTsKICAgICAgICAgZ2w6OkNsZWFyU3RlbmNpbCgwKTsKQEAgLTY4Miw3ICs3MDAsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKICAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBj
bGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAgICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFz
a1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CiAgICAgaWYg
KGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRl
cHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6Q2xlYXJEZXB0aGYoY2xlYXJEZXB0aCk7CiAg
ICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsKICAgICB9CiAgICAgaWYgKGF0dHJzLnN0
ZW5jaWwpIHsKQEAgLTcwOSw3ICs3MjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwogICAgIGds
OjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAtNzE4LDI2ICs3MzgsMzQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkF0dGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmli
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBH
THVpbnQgZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTc1
NiwxMDcgKzc4NCwxNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1l
YnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIpOwogfQogCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUu
c2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdl
dCk7CiAgICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFt
cGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVu
dW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRFcXVhdGlvbiht
b2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNl
cGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6QmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVB
bHBoYSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdD
R0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dM
ZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVu
dW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNp
emUsIGRhdGEpOwogfQogCiB2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIGxl
bmd0aCwgR0NHTGJpdGZpZWxkIGFjY2VzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KwogICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwg
YWNjZXNzKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdD
R0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3Jp
dGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNl
dCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCogcGFyYW1z
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2Ft
cGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkg
bGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdG9yYWdlMkQo
dGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CkBAIC04NjQsNDYg
KzkyNiw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQwogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25z
dCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUsIFZlY3Rv
cjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKIAogICAgIGdsOjpHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1J
bmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEo
KSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047CisKICAgICByZXR1cm4gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFy
Z2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dM
Y2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQ29sb3IociwgZywgYiwgYSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhcihtYXNrKTsKICAgICBjaGVja0dQ
VVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5j
aWwoR0NHTGludCBzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhclN0ZW5j
aWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dM
Ym9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9v
bGVhbiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBXZSBuZWVkIHRoZSBBTkdMRV90
ZXh0dXJlX3JlY3RhbmdsZSBleHRlbnNpb24gdG8gc3VwcG9ydCBJT1N1cmZhY2UKICAgICAvLyBi
YWNrYnVmZmVycywgYnV0IHdlIGRvbid0IHdhbnQgaXQgZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNo
YWRlcnMuCiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSBpdCBkdXJpbmcgc2hhZGVyIGNvbXBp
bGF0aW9uLgpAQCAtOTE1LDEzICs5OTEsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJh
bWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURf
RlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTkzNiw3
ICsxMDE2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51
bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6
UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAt
OTUxLDE5ICsxMDMzLDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhT
dWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6Q3VsbEZhY2UobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpEZXB0aEZ1bmMoZnVuYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9CiAKQEAgLTk3MSw4MiArMTA1OSwxMDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAg
QVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
aXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGlz
YWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1
c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGbHVzaCgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQs
IEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxl
dmVsKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUy
RCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwogICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0g
bW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RnJvbnRGYWNlKG1vZGUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51
bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdlbmVyYXRlTWlwbWFw
KHRhcmdldCk7CiB9CiAKQEAgLTEwNTYsNyArMTE3MCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50
IG1heEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CiAgICAgVmVj
dG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCkBAIC0xMDg1LDcgKzEyMDEs
OSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUg
PSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAtMTExNCw3ICsxMjMyLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwog
fQogCkBAIC0xMTIzLDcgKzEyNDMsOSBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgUwogICAgIGlm
ICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
CiAKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgp
LmRhdGEoKSk7CiB9CkBAIC0xMTM1LDcgKzEyNTcsOSBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwg
YwogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGJvb2wgbW92ZWRB
bkVycm9yID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBo
ZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpAQCAtMTE2MiwxOSArMTI4NiwyNSBAQCBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQogICAgICAgICByZXR1
cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CiAgICAgfQogCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAgcmV0dXJuIGdsOjpHZXRFcnJvcigpOwog
fQogCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBu
YW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBTdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SGludCh0YXJnZXQs
IG1vZGUpOwogfQogCkBAIC0xMTgzLDEzICsxMzEzLDE3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0J1ZmZlcihidWZmZXIpOwogfQogCiBHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzRW5hYmxl
ZChjYXApOwogfQogCkBAIC0xMTk4LDcgKzEzMzIsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVy
KQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7CiB9CiAKQEAgLTEyMDcsNyArMTM0Myw5IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQog
ICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKQEAgLTEyMTYsNyArMTM1NCw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlCiAgICAgaWYg
KCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVm
ZmVyKTsKIH0KIApAQCAtMTIyNSw3ICsxMzY1LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogICAgIGlmICgh
c2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7CiB9CiAKQEAgLTEyMzQs
NDQgKzEzNzYsNTggQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4
dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICBy
ZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6TGluZVdpZHRoKHdpZHRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6TGlua1Byb2dyYW0o
cHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVp
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1
bml0cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UG9seWdvbk9mZnNldChmYWN0
b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292
ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQg
eSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0xMjc5
LDcgKzE0MzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2Uo
UGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogewogICAgIEFTU0VSVChzaGFk
ZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291
cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAgY29uc3QgY2hhciogc2hhZGVyU291cmNl
UHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CkBAIC0xMjg5LDE3OCArMTQ0NiwyMzQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2sp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwg
bWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50
IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJh
dGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNl
LCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdD
R0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVt
IGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFp
bCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFs
dWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQ
YXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6
ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0y
Zihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZs
b2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xm
bG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNmKGxvY2F0
aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0
KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNmdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9h
dCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlm
b3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwg
Y29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpV
bmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0
IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMml2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dM
aW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2kobG9jYXRp
b24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBh
cnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
My4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGko
R0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NH
TGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRpKGxvY2F0
aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xp
bnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBh
cnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
MTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6VXNlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTQ2OCw3
OSArMTY4MSwxMDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpW
ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJy
YXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjFmdihpbmRl
eCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVp
bnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZs
b2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgs
IGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBH
Q0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVp
bnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBH
Q0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xz
aXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlZlcnRleEF0dHJpYklQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBzdHJp
ZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGlu
dCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZl
cnRleEFycmF5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBhcnJheSA9
IDA7CiAgICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOwogICAgIHJldHVybiBhcnJh
eTsKQEAgLTE1NTAsNyArMTc4OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJh
eSkKICAgICAgICAgcmV0dXJuOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVW
ZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKIH0KIApAQCAtMTU1OCw1MSArMTc5OSw2NyBAQCBHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzVmVydGV4
QXJyYXkoYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVy
dGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xib29sZWFuKiB2YWx1
ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1l
dGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKIH0KICAgICAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQ2NCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsK
ICAgICBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50
IGluZGV4LCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2
YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
aWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBhdHRh
Y2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRo
ZXIgd29ya3MuCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKQEAgLTE2MTAsNyArMTg2Nyw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UHJvZ3JhbWl2
KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2MzgsNyArMTg5Nyw5IEBAIFN0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogICAgIGlmICghbGVuZ3Ro
KQpAQCAtMTY1Nyw3ICsxOTE4LDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKQEAgLTE2NjUsNyArMTkyOCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFt
CiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
R2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjczLDcgKzE5Mzgs
OSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxh
dGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIGdsOjpHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAgICAgaWYgKCFs
ZW5ndGgpCkBAIC0xNjk0LDMxICsxOTYxLDQxIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3QpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwg
bG9jYXRpb24sIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9y
bXVpdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCkBAIC0xNzI2LDI1ICsyMDAzLDMy
IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRW
ZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
R2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0
ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50
IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIEdM
dm9pZCogcG9pbnRlciA9IDA7CiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4
LCBwbmFtZSwgJnBvaW50ZXIpOwpAQCAtMTc1Myw3ICsyMDM3LDggQEAgR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2Zm
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1z
IHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3Vi
aW1hZ2Ugc2l6ZS4KICAgICBnbDo6VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5
b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CkBAIC0xNzYyLDIxICsy
MDQ3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQq
IGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIFBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlbkJ1ZmZlcnMo
MSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTc4NCw3ICsyMDc1LDkgQEAgUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIAogUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5GcmFt
ZWJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTc5MiwxMyArMjA4NSwxNyBAQCBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZl
cigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVBy
b2dyYW0oKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQ
cm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVp
bnQgbyA9IDA7CiAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBv
OwpAQCAtMTgwNiwxMyArMjEwMywxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZS
QUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsK
IH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4
dHVyZSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAg
Z2w6OkdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG8pOwpAQCAtMTgyMSwxMyArMjEyMiwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGZyYW1lYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKICAg
ICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KICAgICBpZiAobV9pc0Zvcldl
YkdMMikgewpAQCAtMTg0MiwyNSArMjE0NywzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlUHJvZ3Jh
bShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNo
YWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtl
eVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJl
OwogICAgIH0pOwpAQCAtMTkxNiw3ICsyMjI5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYg
KCFtX2lzRm9yV2ViR0wyICYmIG1fZXh0ZW5zaW9ucykKICAgICAgICAgaW50ZXJuYWxmb3JtYXQg
PSBtX2V4dGVuc2lvbnMtPmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKICAgICBnbDo6VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CkBAIC0xOTI1LDM0ICsyMjQwLDQ1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVu
dW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNv
dW50KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNl
ZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgZWxzZQotICAgICAgICBnZXRF
eHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCk7CisgICAgICAgIGdsOjpEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3Qs
IGNvdW50LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2Rl
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dM
c2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAgICBnbDo6RHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygp
LmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291
bnQpOworICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQs
IHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCksIHByaW1jb3VudCk7CiAgICAg
Y2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKIHsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
bV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OlZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRp
dmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvckFO
R0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIAogR0NHTHVpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKwogICAgIHJldHVybiBnbDo6R2V0VW5pZm9y
bUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2NrTmFtZS51dGY4KCkuZGF0YSgpKTsKIH0K
IApAQCAtMTk2OSw3ICsyMjk1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlVW5pZm9ybUJsb2NraXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLAogU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IG1h
eExlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5J
Rk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEgsICZtYXhMZW5ndGgpOwogICAgIGlmIChtYXhMZW5n
dGggPD0gMCkgewpAQCAtMTk4Nyw3ICsyMzE1LDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3IK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTHVpbnQg
dW5pZm9ybUJsb2NrQmluZGluZykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1CbG9ja0JpbmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJs
b2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwogfQogCkBAIC0xOTk1LDcgKzIzMjUsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblF1ZXJpZXMoMSwgJm5hbWUpOwogICAgIHJl
dHVybiBuYW1lOwpAQCAtMjAwMywxOSArMjMzNSwyNSBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1
ZXJ5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCZWdpblF1ZXJ5KHRhcmdldCwg
cXVlcnkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dM
ZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuZFF1ZXJ5KHRh
cmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0
dWl2KEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQqIHBhcmFtcykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3R1aXYoaWQsIHBuYW1lLCBw
YXJhbXMpOwogfQogCkBAIC0yMDIzLDcgKzIzNjEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWludCBpZCwgR0NHTGVudW0gcG5hbWUsIEdD
RwogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbmFt
ZSA9IDA7CiAgICAgZ2w6OkdlblRyYW5zZm9ybUZlZWRiYWNrcygxLCAmbmFtZSk7CiAgICAgcmV0
dXJuIG5hbWU7CkBAIC0yMDMxLDQ5ICsyMzcxLDY0IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZvcm1HTE9i
amVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZ0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKIEdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZl
ZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9y
bUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVk
YmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFRyYW5zZm9ybUZlZWRi
YWNrKHRhcmdldCwgdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJlZ2luVHJhbnNmb3JtRmVlZGJhY2so
cHJpbWl0aXZlTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFRy
YW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RW5kVHJh
bnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0gYnVmZmVyTW9kZSkKIHsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBWZWN0b3I8Q1N0
cmluZz4gY29udmVydGVkVmFyeWluZ3MgPSB2YXJ5aW5ncy5tYXAoW10oY29uc3QgU3RyaW5nJiB2
YXJ5aW5nKSB7CiAgICAgICAgIHJldHVybiB2YXJ5aW5nLnV0ZjgoKTsKICAgICB9KTsKICAgICBW
ZWN0b3I8Y29uc3QgY2hhcio+IHBvaW50ZXJzVG9WYXJ5aW5ncyA9IGNvbnZlcnRlZFZhcnlpbmdz
Lm1hcChbXShjb25zdCBDU3RyaW5nJiB2YXJ5aW5nKSB7CiAgICAgICAgIHJldHVybiB2YXJ5aW5n
LmRhdGEoKTsKICAgICB9KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwogICAgIGdsOjpU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0sIHBvaW50ZXJzVG9WYXJ5aW5ncy5zaXpl
KCksIHBvaW50ZXJzVG9WYXJ5aW5ncy5kYXRhKCksIGJ1ZmZlck1vZGUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBHQ0dMc2l6ZWkgYnVmU2l6ZSA9IDA7CiAgICAgZ2w6
OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6VFJBTlNGT1JN
X0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSCwgJmJ1ZlNpemUpOwogICAgIGlmICghYnVmU2l6
ZSkKQEAgLTIwOTMsNyArMjQ0OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyQmFzZSh0YXJnZXQsIGluZGV4LCBidWZmZXIpOwog
fQogCkBAIC0yMTI3LDMyICsyNDg0LDQ5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIHNyY0J5CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gw
LCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBHQ0dMaW50IHNyY1kxLCBHQ0dMaW50IGRz
dFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgxLCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0
ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXIoc3JjWDAs
IHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBm
aWx0ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIFBsYXRmb3Jt
R0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwgR0NHTGludCBsYXllcikKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0dXJlLCBsZXZlbCwg
bGF5ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0
IEdDR0xlbnVtKiBhdHRhY2htZW50cykKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SW52YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdl
dCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NH
THNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQ0dMZW51bSogYXR0YWNobWVudHMsIEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2ht
ZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogeworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZz
ZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0
dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdl
dCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAtMjE2NywxNjMgKzI1NDEsMjI1
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICByZXR1cm4gZ2w6
OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aShHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMdWludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTF1
aShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJ1aShsb2NhdGlvbiwgdjAsIHYxKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3VpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEsIEdDR0x1aW50IHYyLCBHQ0dMdWludCB2
MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTR1aShsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm0xdWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50
IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dM
dWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0y
dWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25z
dCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBz
cmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEg
KyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4MngzZnYobG9j
YXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dM
dWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4MmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5z
cG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRy
aXgyeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgyZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24sIHNyY0xl
bmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZz
ZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSAr
IHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDNmdihsb2Nh
dGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgs
IEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHosIEdDR0xpbnQgdykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliSTRpKGluZGV4LCB4LCB5LCB6LCB3KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpdihHQ0dM
dWludCBpbmRleCwgY29uc3QgR0NHTGludCogdmFsdWVzKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6LCBHQ0dMdWludCB3KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aXYo
R0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0x1aW50KiB2YWx1ZXMpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2KGluZGV4LCB2YWx1ZXMpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBt
b2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5kLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3UmFuZ2VFbGVtZW50cyhtb2Rl
LCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xz
aXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd0J1ZmZlcnMobiwgYnVmcyk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVu
dW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdDR0xpbnQqIHZhbHVlcywgR0NH
THVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcml2KGJ1ZmZlciwgZHJhd2J1ZmZlciwg
dmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIGNvbnN0
IEdDR0x1aW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJ1
aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NH
TGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMZmxvYXQqIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zm
c2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3Jj
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJm
aShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBH
Q0dMaW50IHN0ZW5jaWwpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBk
ZXB0aCwgc3RlbmNpbCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkRlbGV0ZVF1ZXJpZXMoMSwgJnF1ZXJ5KTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzUXVlcnkocXVlcnkp
OwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVy
eShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCiAgICAgR0xpbnQgdmFsdWU7CiAgICAgZ2w6OkdldFF1ZXJ5aXYodGFyZ2V0LCBwbmFtZSwg
JnZhbHVlKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm1HTE9iamVjdD4odmFsdWUp
OwpAQCAtMjMzMSw3ICsyNzY3LDkgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmEKIAogUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblNh
bXBsZXJzKDEsICZuYW1lKTsKICAgICByZXR1cm4gbmFtZTsKQEAgLTIzMzksMTA0ICsyNzc3LDEz
OCBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1w
bGVyKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRl
bGV0ZVNhbXBsZXJzKDEsICZzYW1wbGVyKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxl
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1
aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6QmluZFNhbXBsZXIodW5pdCwgc2FtcGxlcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2Ft
cGxlclBhcmFtZXRlcmZ2KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUs
IEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNh
bXBsZXJQYXJhbWV0ZXJmdihzYW1wbGVyLCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXYoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdihzYW1wbGVyLCBwbmFtZSwg
dmFsdWUpOwogfQogCiBHQ0dMc3luYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5j
KEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxkIGZsYWdzKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpGZW5jZVN5bmMoY29uZGl0aW9uLCBmbGFncyk7CiB9
CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1N5bmMoR0NHTHN5bmMg
c3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6Oklz
U3luYyhzeW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3lu
YyhHQ0dMc3luYyBzeW5jKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVT
eW5jKHN5bmMpOwogfQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50
V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRp
bWVvdXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOworCiAgICAgcmV0dXJu
IGdsOjpDbGllbnRXYWl0U3luYyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVs
ZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OldhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U3luY2l2KEdDR0xzeW5jIHN5bmMsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCAqdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFN5bmNpdihzeW5jLCBwbmFtZSwgYnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRi
YWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UGF1c2VUcmFuc2Zvcm1GZWVk
YmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zv
cm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRC
dWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyUmFuZ2UodGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOwogfQogCiBWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFtZXMpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiB7IH07CisKICAgICBWZWN0b3I8Q1N0cmluZz4gdXRmOCA9
IHVuaWZvcm1OYW1lcy5tYXAoW10oYXV0byYgeCkgeyByZXR1cm4geC51dGY4KCk7IH0pOwogICAg
IFZlY3Rvcjxjb25zdCBjaGFyKj4gY3N0ciA9IHV0ZjgubWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJu
IHguZGF0YSgpOyB9KTsKICAgICBWZWN0b3I8R0NHTHVpbnQ+IHJlc3VsdChjc3RyLnNpemUoKSwg
MCk7CkBAIC0yNDk4LDY3ICsyOTcwLDg5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwg
Y29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xl
bmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmdihsb2NhdGlv
biwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRh
dGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBs
b2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1
aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRm
dihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBH
Q0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc3JjTGVu
Z3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dM
dWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zm
c2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dM
aW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTNpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25z
dCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRpdihsb2NhdGlvbiwgc3Jj
TGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwg
dHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dM
dWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KaW5kZXgg
MzJhZTU1Yzk5OWUwMTg3NTkzN2NmOTQ5NGJiNDJiZDUyNDVhMmM3OS4uMTllNWQ4Njc3NmVjZTY1
ZTZlMWRiYjFjNWRiODBhM2ZmN2QwNmNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvY29hLm1tCkBAIC0zODgsMTAgKzM4OCw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0CiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkK
IHsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5y
ZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1fY29udGV4dE9iaikgeworICAgIGlmICht
YWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAgICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsgLy8gVE9ETzogY2hlY2sgcmVzdWx0LgogICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJm1fdGV4dHVyZSk7CiAKICAgICAgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewpAQCAtNDA4
LDE4ICs0MDYsMTggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fcHJlc2VydmVE
cmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlmIChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZl
ckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVE
cmF3aW5nQnVmZmVyRkJPKTsKLQotICAgICAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikg
ewotICAgICAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxh
eUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgICAgICAgICBFR0xfRGVzdHJv
eVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKTsKLSAgICAgICAg
fQorICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikKKyAgICAgICAgRUdMX0Rl
c3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7CisgICAg
aWYgKG1fd2ViR0xMYXllcikgewogICAgICAgICBhdXRvIHJlY3ljbGVkQnVmZmVyID0gW21fd2Vi
R0xMYXllciByZWN5Y2xlQnVmZmVyXTsKICAgICAgICAgaWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRs
ZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVk
QnVmZmVyLmhhbmRsZSk7CiAgICAgICAgIGF1dG8gY29udGVudHNIYW5kbGUgPSBbbV93ZWJHTExh
eWVyIGRldGFjaENsaWVudF07CiAgICAgICAgIGlmIChjb250ZW50c0hhbmRsZSkKICAgICAgICAg
ICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRzSGFuZGxlKTsKLQor
ICAgIH0KKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAgICAgIEVHTF9NYWtlQ3VycmVudCht
X2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRF
WFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRP
YmopOwogICAgIH0KQEAgLTU1MywxMiArNTUxLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQogI2lmIFBMQVRGT1JN
KE1BQykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUNHTENvbnRleHQoKQog
ewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CiAgICAgICAgIHJldHVybjsKLQogICAgIExPRyhXZWJHTCwgIkRldGVjdGVkIGEgbXV4IHN3aXRj
aCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2FsbCBDR0xVcGRhdGVDb250ZXh0LiAoJXAp
IiwgdGhpcyk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBFR0xEZXZpY2VFWFQg
ZGV2aWNlID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxh
eU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmlj
ZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zR0xPcGVuR0wuY3BwCmluZGV4IGJiZDlkNDQ2ZjkxZWQ1ZTFiYmJhNGQzNzAyZDQzMmY3MWVm
ZmE0ZTAuLjE3Nzg2YTY0YmE0ZTFkYTAwOTY0ZWFlOTk3ZDI5Mjc2NGRhZDE4OTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xP
cGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC01MCwxNyArNTAsMjUgQEAgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjp+RXh0ZW5zaW9uc0dMT3BlbkdMKCkgPSBkZWZhdWx0OwogCiB2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3Jj
WDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcg
ZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCiB7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBk
c3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1w
bGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFBsYXRmb3JtR0xPYmpl
Y3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0g
MDsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhB
cnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtNzYsNyArODQsOSBAQCB2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAg
ICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAg
ICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKICAgICAgICAgZ2xEZWxldGVW
ZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTkwLDcgKzEwMCw5IEBAIEdDR0xib29sZWFuIEV4
dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRl
ZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFycmF5KGFycmF5KTsKQEAgLTEwMiw3ICsx
MTQsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICBn
bEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xOTYsNiArMjEwLDkgQEAgYm9vbCBFeHRlbnNp
b25zR0xPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogdm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBH
Q0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vICBGSVhNRTogaW1wbGVtZW50IHN1cHBvcnQg
Zm9yIG90aGVyIHBsYXRmb3Jtcy4KICNpZiBQTEFURk9STShHVEspCiAgICAgOjpnbERyYXdCdWZm
ZXJzKG4sIGJ1ZnMpOwpAQCAtMjA3LDcgKzIyNCw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
OjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiAKIHZv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUs
IEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKQogICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJp
bWNvdW50KTsKICNlbHNlCkBAIC0yMjAsNyArMjM5LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVu
R0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
THMKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZz
ZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsRHJhd0VsZW1lbnRzSW5z
dGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKICNlbHNlCkBAIC0yMzQsNyAr
MjU1LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChH
Q0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEcKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVu
R0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3Ip
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRG
T1JNKEdUSykKICAgICA6OmdsVmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKaW5kZXggZjY0YmRlZTMxMjkzM2Jm
M2VkZDVmYmRmNTMxOTJkYjQ1NGE3ZWRjNi4uYjQ3OWRlMzZhZDEwNjBiMmM2ZjcwNmRiOWI4MjAy
ZDk1ZmFlMGZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCkBAIC04NSw2ICs4
NSw4IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGludCBsZXZl
bCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsRnJhbWVidWZmZXJU
ZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsLCBzYW1wbGVzKTsKICAgICBlbHNlCkBAIC05Myw2ICs5NSw4IEBAIHZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQg
bG9uZyB0YXJnCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICBlbHNlCkBAIC0xMDYsNiArMTEwLDggQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8sIGxvbmcgLyogc3JjWTAgKi8sIGwKIAog
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
KQogICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1w
bGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTI5LDgg
KzEzNSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnBvcEdyb3VwTWFya2VyRVhUKHZv
aWQpCiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAg
IGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBHTHVp
bnQgYXJyYXkgPSAwOwogICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTE0NCwzMyArMTUxLDM1IEBAIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09F
UykKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykgeworICAgICAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCiBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVu
R0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlm
ICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgIGlm
IChtX2dsSXNWZXJ0ZXhBcnJheU9FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAgICAgICAgIHJl
dHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0KKyAgICB9CiAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgIGlmIChtX2dsQmlu
ZFZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJh
eU9FUyhhcnJheSk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIApAQCAtMTg4LDggKzE5
Nyw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpCiAgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9SKQogICAgICAg
ICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CiAgICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jl
c2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVz
RVhUKCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IFVOS05PV05fQ09OVEVYVF9SRVNF
VDsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
ICAgICByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CiAg
ICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9OT19FUlJPUikKICAgICAgICAgICAgIG1f
Y29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVzZXQ7CiAgICAgICAgIHJldHVybiByZWFz
b25Gb3JSZXNldDsKQEAgLTIwMiw3ICsyMTIsOSBAQCBpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IHZvaWQgKmRhdGEpCiB7CiAgICAgaWYgKG1fZ2xSZWFkblBpeGVsc0VYVCkgewotICAgICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKICAgICAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBz
aG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCiAgICAgICAgIDo6Z2xGbHVzaCgp
OwpAQCAtMjE5LDcgKzIzMSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4
ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6CiB2b2lkIEV4dGVu
c2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBs
b2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCiB7CiAgICAgaWYgKG1f
Z2xHZXRuVW5pZm9ybWZ2RVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVChwcm9ncmFt
LCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMCw3ICsyNDQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2
RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTAogdm9pZCBFeHRlbnNpb25z
R0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykKIHsKICAgICBpZiAobV9nbEdldG5V
bmlmb3JtaXZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWl2RVhUKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ1LDcg
KzI2MSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9nbERy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiB9
CiAKQEAgLTI1Niw3ICsyNzQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSks
IHByaW1jb3VudCk7CiB9CiAKQEAgLTI2Nyw3ICsyODcsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgs
IGRpdmlzb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDY5
ODhiZDY5Y2EwZjAxMGZhMWI2OGY2NjUzMDc4M2ViZmM2M2Y0MTIuLmNkZjY0MDk5MzQzNDgyYTRj
MTZkM2NiZTM0NzljOGMwYWJhNDgxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oCkBAIC0xMTIsNyArMTEyLDYgQEAgcHVibGljOgogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVudW0gY2xhc3MgUmVsZWFz
ZUJlaGF2aW9yIHsKICAgICAgICAgUHJlc2VydmVUaHJlYWRSZXNvdXJjZXMsCkBAIC01MTcsNiAr
NTE2LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlvbiA9IERl
c3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250
ZXh0ID0gbnVsbHB0cik7CiAKKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBl
bnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBv
bmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBl
dmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FS
Tl9VTlVTRURfUkVUVVJOOwogCiAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3Vs
YXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCmluZGV4IDIwYmYyZjRm
OTg0Y2M3ZjJiYjczYzZkYTU1OWYwODAwYTMzYTE0OWMuLjc1MGVkMzI2ZWNlNjVlODhmNmI0MTM2
MDE1YzRmOTMzNzQ0ODljYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWMKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgVVNFKE9QRU5HTCkKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgpAQCAt
MjY0LDcgKzI2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKICAgICAvLyBiZWNhdXNlIGRlc2t0b3Ag
R0wncyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50
cwogICAgIC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFj
aCB2ZWN0b3IgaGFzIDQgY29tcG9uZW50cykuCiAgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUg
cmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgc3dpdGNoIChwbmFtZSkgewogI2lmIFVTRShPUEVOR0wpCiAgICAg
Y2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgpAQCAtMzEwLDcgKzMxNCw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dM
ZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQocHJl
Y2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgc3dpdGNoIChwcmVjaXNpb25U
eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TE9XX0lOVDoKQEAgLTQwMywxMyAr
NDA5LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBm
IGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRo
KTsKIH0KIApAQCAtNDI4LDcgKzQzOCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwKIAogICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBi
dWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBz
aG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEZsdXNoKCk7CiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKICAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUu
Ym91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IGIxNGI2MmQ1ZTRmYmVhOGVhMmM4Nzg1
NmU3YmZlZDZiOGQzODY3YjIuLmI4Zjg5ZmRiOGJkZDEyYTk1ZjA2ODUxMDZhYjRhM2IwMDE4OWM4
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApA
QCAtMjAwLDcgKzIwMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVU
ZXh0dXJlKCkKICAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogCiAjaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBH
TF9GQUxTRSk7CkBAIC0yMzksNyArMjQxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGkKICAg
ICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
KSB7CkBAIC0yNzMsOSArMjc3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7
Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI4MywxMiArMjg0LDE0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVu
dEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwogCiAgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lz
c29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwpAQCAtNDI3LDcgKzQzMCw5IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2
ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBt
X3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKICAgICA6OmdsQWN0aXZlVGV4dHVy
ZSh0ZXh0dXJlKTsKIH0KQEAgLTQzNiw3ICs0NDEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
TwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJv
Z3JhbSk7CiAgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQpAQCAtNDQ0
LDcgKzQ1MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CiAg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTQ1Mywx
MyArNDYxLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIEdMdWludCBmYm87CiAgICAgaWYgKGJ1ZmZlcikKICAgICAg
ICAgZmJvID0gYnVmZmVyOwpAQCAtNDc1LDEwMiArNDg3LDEzMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRl
cmJ1ZmZlcik7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKICAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0
LCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xv
cihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dM
Y2xhbXBmIGFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVu
dW0gbW9kZUFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEVxdWF0
aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3Rv
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRm
YWN0b3IpOwogfSAgICAgICAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2Up
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCBkYXRhLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
clN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwogfQogCiBHQ0dMZW51
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51
bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYg
YiwgR0NHTGNsYW1wZiBhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhckNv
bG9yKHIsIGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
cihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xl
YXIobWFzayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NH
TGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGlu
ZyB3b3Jrcywgd2UKICAgICAvLyBwb2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3du
ZWQgYnkgdGhpcyBjb250ZXh0LgpAQCAtNjMyLDcgKzY3NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
IAogICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAKQEAgLTY2Niw3
ICs3MTAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGly
ZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIAogICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CkBAIC02ODEsNyAr
NzI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIAogICAgIEFTU0VSVCht
X3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CkBAIC02OTYsMTkg
Kzc0NCwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2Uy
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsRGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC03MTYsODMgKzc3MCwxMDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNo
YWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hh
ZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51
bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERpc2FibGUoY2FwKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBj
b3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291
bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKICAgICBjaGVj
a0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUo
R0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xFbmFibGUoY2Fw
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmluaXNo
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xP
YmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0
ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZyb250RmFjZShtb2RlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQp
OwogfQogCkBAIC04MDIsNyArODgyLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wKICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4QXR0cmli
dXRlU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKICAgICBWZWN0b3I8R0xjaGFy
PiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KQEAgLTg0OCw3ICs5MzAsOSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwogICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1h
eFVuaWZvcm1TaXplKTsKIApAQCAtODk0LDcgKzk3OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIApAQCAtMTAzNyw3
ICsxMTIzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICBpZiAoIXByb2dyYW0pCiAg
ICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogCiAgICAgU3RyaW5n
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQ
RV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlv
biBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0
ZjgoKS5kYXRhKCkpOwpAQCAtMTA0OSwxNCArMTEzNywxOCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgYwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKIAogICAgIC8vIFNldCBhbiBh
cmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCkBA
IC0xMDgzLDE5ICsxMTc1LDI1IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRFcnJvcigpCiAgICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsK
ICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICBy
ZXR1cm4gOjpnbEdldEVycm9yKCk7CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6Omds
R2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omhp
bnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKQEAgLTExMDQsMTMgKzEyMDIsMTcg
QEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzQnVm
ZmVyKGJ1ZmZlcik7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwog
ICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7CiB9CiAKQEAgLTExMTksNyArMTIyMSw5IEBA
IEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKIH0KIApAQCAtMTEyOCw3ICsx
MjMyLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gRkxfRkFMU0U7CisKICAgICByZXR1cm4g
OjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTEzNyw3ICsxMjQzLDkgQEAgR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xP
YmplY3QgcmVuZGVyYnVmZmUKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6
Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwogfQogCkBAIC0xMTQ2LDcgKzEyNTQs
OSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNT
aGFkZXIoc2hhZGVyKTsKIH0KIApAQCAtMTE1NSwyMCArMTI2NSwyNiBAQCBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSkKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0
IHdpZHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogCiAgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKICAgICBQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcnNbMl0gPSB7IH07CkBAIC0xMTgyLDI1ICsxMjk4LDMzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBv
bHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRzKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBm
IHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFNj
aXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTEyMDgsNyArMTMzMiw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlciwgY29uc3QgU3RyaW5nCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKIAogICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwogCkBAIC0xMjE5LDE3
OCArMTM0NSwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNl
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdD
R0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVuYywgR0NHTGludCBy
ZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
THVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6
cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFy
YXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51
bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleFBhcmFt
ZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleFBhcmFtZXRl
cmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwg
Y29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9y
bTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxv
YXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5p
Zm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29u
c3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2
MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2
MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVp
IHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xV
bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dM
aW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlm
b3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25z
dCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNpdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NH
TGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5p
Zm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUs
IGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3Jt
NGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUs
IEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNw
b3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKIH0K
IApAQCAtMTM5OCw3MyArMTU4MCw5NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChw
cm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0o
cHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NH
TGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2
MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgs
IHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjJmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dM
dWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dM
ZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEs
IHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjRmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVp
bnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFs
aXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUs
IG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWaWV3cG9ydCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAg
ICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6OmdsR2VuVmVy
dGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC0xNDc3LDcgKzE2ODMsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEs
ICZhcnJheSk7CiAjZW5kaWYKQEAgLTE0ODgsNyArMTY5Niw5IEBAIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkp
CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogICAgIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiA6
OmdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CiAjZW5kaWYKQEAgLTE0OTcsNyArMTcwNyw5IEBAIEdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
I2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkp
IHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwogI2Vs
c2UKQEAgLTE1MDcsMTkgKzE3MTksMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMYm9vbGVhbiog
dmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEJvb2xlYW52KHBuYW1l
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBh
cmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE1
MjcsNyArMTc0NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJp
X3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcg
dGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGlu
ZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4K
ICAgICAvLyA6OmdsR2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKQEAgLTE1MzYs
NyArMTc1Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3Yo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVl
KQogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
KnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdl
IG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBp
bml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgogICAgIC8v
IDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CkBAIC0xNTQ2LDcgKzE3NjgsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3YoR0NHTGVudW0gcG5h
bWUsIEdDR0x1aW50IGluZGV4LCBHQwogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAqdmFsdWUgPSAw
OwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJz
dCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcg
dGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAgLy8gOjpnbEdldElu
dGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKQEAgLTE1NTQsNyArMTc3OCw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdihHQ0dMZW51bSBwbmFt
ZSwgR0NHTHVpbnQgaW5kZXgsIEdDCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKICAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBA
IC0xNTYyLDcgKzE3ODgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0x
NTcyLDcgKzE4MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXROb25CdWls
dEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcgogICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGNvbnN0IGF1dG8m
IHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CiAg
ICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewog
ICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CkBAIC0x
NjUwLDcgKzE4ODAsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBsZW5ndGggPSAw
OwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVu
Z3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2NjksNyArMTkwMSw5IEBAIFN0cmluZyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1
ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjc3LDcgKzE5MTEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCkBAIC0xNzEyLDcgKzE5NDgsOCBAQCBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKQEAgLTE3
MzksNyArMTk3Niw4IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgYXV0byYgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzUwLDI1ICsxOTg4LDMzIEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVy
KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRl
cml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZv
cm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFVuaWZvcm1mdihw
cm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0
VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKQEAgLTE3ODMsNyArMjAy
OSw4IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlv
bihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKICAg
ICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTc5Miwx
OSArMjAzOSwyNCBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQ0dMdWludCBpbmRleCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogR0NHTHNp
emVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NH
THVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwogCiAg
ICAgR0x2b2lkKiBwb2ludGVyID0gMDsKICAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYo
aW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CkBAIC0xODEzLDcgKzIwNjUsOCBAQCBHQ0dMc2l6ZWlw
dHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWlu
dCBpbmRleCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50
IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCiAgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMp
CkBAIC0xODQ0LDIxICsyMDk3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENv
bXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1
ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAg
Z2xHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4NjYsNyArMjEyNSw5IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigp
CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1l
YnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAg
ICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAgcmV0dXJuIG87CkBAIC0xODc0LDEz
ICsyMTM1LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1
cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
ICAgICByZXR1cm4gbzsKQEAgLTE4ODgsMTMgKzIxNTMsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIAogUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5
cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIo
KHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRF
WF9TSEFERVIpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBv
ID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG8pOwpAQCAtMTkwMywxMyArMjE3MiwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZv
cm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NF
UlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwogICAgIGlm
IChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewogICAgICAgICAvLyBNYWtl
IHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5n
CkBAIC0xOTIxLDI2ICsyMTk0LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3Jt
R0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmJv
dW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CiAgICAg
ICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwogICAgIH0pOwpAQCAt
MTk5Niw3ICsyMjc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hD
b250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAtMjAyMSw3ICsyMzA0LDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRl
eCwgR0NHTHVpbnQgZGl2aXMKICNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFCTEUoV0VCR0wyKQog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFydEluZGV4KEdDR0x1
aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQcmltaXRpdmVSZXN0
YXJ0SW5kZXgoaW5kZXgpOwogfQogI2VuZGlmCkBAIC0yMDQ3LDcgKzIzMzIsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludHB0ciBkc3RCeXRlTwogI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMp
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVU
YXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KICNlbHNlCkBAIC0yMDY4
LDEzICsyMzU1LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1
YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIHNyY0J5CiAjaWYgSEFWRShPUEVOR0xf
NCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YXBCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6
ZWlwdHIgbGVuZ3RoLCBHQ0dMYml0ZmllbGQgYWNjZXNzKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCiAgICAgcmV0dXJuIDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwg
bGVuZ3RoLCBhY2Nlc3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5tYXBCdWZmZXIoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKwogICAgIHJldHVybiA6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KTsKIH0KICNlbHNlCkBA
IC0yMTM5LDcgKzI0MzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVm
ZmVyKEdDR0xlbnVtIHNyYykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVy
bmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMaW50KiBwYXJhbXMpCiB7CiAjaWYg
VVNFKE9QRU5HTF9FUykKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CkBAIC0yMTUyLDIwICsyNDQ1LDI2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXpl
aSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3Jh
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxz
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRl
eFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTI2MzAsNyArMjkyOSw4IEBAIFZlY3RvcjxHQ0dMdWlu
dD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xP
YmplY3QgcHJvCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3Jt
cyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZv
cm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSwgVmVjdG9yPEdDR0xpbnQ+JiBwYXJhbXMpCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIDo6Z2xHZXRBY3Rp
dmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGlj
ZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xF
Uy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xFUy5jcHAKaW5kZXggOTM4OTVlNTZiMGM1YTViZDg0Y2IwYWE0OTg2ODIw
YWE2NzExNDgxNS4uNjBmZGZjNjVmODczOTU4OTU3OTVhODRlZjFlMDlhYmY2ZDdhYTg0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApAQCAtNDIsNyArNDIsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCB2b2lkKiBkYXRhKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKIApAQCAtMTg4LDEzICsxOTAsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0SW50ZWdl
cnYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMjAzLDcgKzIwOSw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJU
eXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQocHJlY2lzaW9uKTsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hh
ZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsIHByZWNpc2lvbik7CiB9CiAKQEAgLTIzMiwx
MyArMjQwLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmli
dXRlcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNs
YW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwogfQogCkBAIC0yNzgsNyArMjkwLDkg
QEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4odGhpcywgZGVzdGluYXRpb24pKQogewogICAg
IEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogICAgIGF0dHJpYnV0
ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5n
IHZhbGlkYXRpb24uCkBAIC0zNDMsNyArMzU3LDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQK
IAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggYzBhMmVj
Yjg3NDdjMTE4ZjA3MDVkZjkxODk4ZDQ0OTgyZTkwZjJhNy4uZjkxMTVhYWIyZmFkYzNkNTY2NDYw
Yzg4YTIxZjEyOGFjNDM2M2E2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHAKQEAgLTEzOSw3ICsxMzksOCBAQCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
IGF0dAogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gV1RGOjptYWtlVW5pcXVlPFRleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbmRpZgotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJp
YnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBt
YXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgpAQCAtMjEzLDcgKzIxNCw4IEBAIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlm
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRh
dGVBdHRyaWJ1dGVzKCk7CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8v
IFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTMzMyw3ICszMzUs
OCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogI2lmIFVTRShBTkdMRSkKIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAg
Z2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKQEAgLTM3Nyw3ICszODAsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKICNlbHNlCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHN1Y2Nlc3MpOwogICAgIGlmIChtX3RleHR1cmUpCiAgICAgICAgIDo6Z2xEZWxldGVUZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>
<flag name="commit-queue"
          id="427798"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411539</attachid>
            <date>2020-10-15 23:50:16 -0700</date>
            <delta_ts>2020-10-27 02:12:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201016095014.patch</filename>
            <type>text/plain</type>
            <size>115255</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc3M2RjYjU0YTQ3ODg5
YWJjNjJlMTQ0ODY3ZjgwN2I1MjQyNTliMS4uNjRkOWUyZmNiYTFlZTUxYjVmY2JkMTdmMzU5ZDc2
OGUyYzg5MjE4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIwLTEwLTE1ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgV2Vi
R0wgaW1wbGVtZW50YXRpb24gdG8gdXNlIG9ubHkgR3JhcGhpY3NDb250ZXh0R0wgcGFydCAxCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyMTMKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY5ODc2MTA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IERl
YW4gSmFja3Nvbi4KKworICAgICAgICBQYXJ0IDEgb2Ygd29yayB0b3dhcmRzIFdlYkdMIGltcGxl
bWVudGF0aW9uIHdoaWNoIHVzZXMKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0wgYWJzdHJhY3Qg
YmFzZSBjbGFzcyBpbnN0ZWFkIG9mCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNv
bmNyZXRlIGNsYXNzLgorCisgICAgICAgIE1vdmUgcGl4ZWwgZGF0YSByZWxhdGVkIHN0YXRpYyBo
ZWxwZXIgZnVuY2lvbnMgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB0byBH
cmFwaGljc0NvbnRleHRHTC4gVGhlc2UgYXJlCisgICAgICAgIG5vcm1hbCBwaXhlbCBmb3JtYXQg
Y2FsY3VsYXRpb24gZnVuY3Rpb25zIHRoYXQgZG8gbm90IGhhdmUKKyAgICAgICAgY29uY3JldGUg
Y2xhc3MgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTW92ZSBwaXhlbCBwYWNrIHJlbGF0ZWQKKyAg
ICAgICAgc3RydWN0dXJlcyB0byBHcmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICBSZW5hbWUg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yIHRvCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuIFRoZSBHcmFwaGljc0NvbnRleHRHTCBjbGFzcwor
ICAgICAgICBpbnRlcmZhY2UgaXMgYWxyZWFkeSBxdWl0ZSBsZW5ndGh5IGFuZCB0aGUgaW1hZ2Ug
ZXh0cmFjdG9yCisgICAgICAgIGlzIG5vdCB2ZXJ5IHRpZWQgdG8gdGhlIGNvbnRleHQgY2xhc3Mu
CisKKyAgICAgICAgSW50cm9kdWNlIGEgdmlydHVhbCBtZW1iZXIgZnVuY3Rpb24gaW4gR3JhcGhp
Y3NDb250ZXh0R0wgZm9yCisgICAgICAgIGVhY2ggY2FsbCB0aGF0IGlzIGxpa2VseSBuZWVkZWQg
Zm9yIHRoZSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEg
cmVmYWN0b3IuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4ZWxTdG9yZVBh
cmFtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhJbWFnZUFycmF5QnVmZmVyVmlld0hlbHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZUltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFja1BpeGVsU3RvcmVQYXJh
bXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6dGV4ZWxCeXRlc0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJD
b3JlOjpwYWNrUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpj
b21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0w6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdFRleHR1cmVEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkNsaWVudDo6fkNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0w6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RTdWNjZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VQaXhlbERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjppbWFnZUhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpp
bWFnZVNvdXJjZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yOjppbWFnZUFscGhhT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VIdG1s
RG9tU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNl
U2FmZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorCiAyMDIwLTEwLTE1
ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXNzZW4gdGhl
IHJlbGlhbmNlIG9uIFZQQVRIIGluIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBhZWYxYjYyMzIxMjVlMzY0OWI5MGY0M2RlMzg5NmE5ZDBjYWM3YWQ5Li4wNDk2
ODIxZTEzZWZlMjU3ZjEzYjg2M2IwYTFmNWVlZGIwMTJkMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTg5NSw2ICsxODk1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3Jt
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDFhY2YxNDQzOTkyNDg1ODE0OGRkMjBiOWU4ZGU3YTUxZTNiMjJkY2UuLmI3MmZk
NmFlMzlmYTAwMmFmOWVjZThiODc0OWM4ZDMxZDkzMGEzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMTgsNiArMjIxOCw3
IEBACiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1
RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0JCMzRBMTUyNTM0NTc5
MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTEzMjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExh
eWVyQ2xpZW50LmggKi87IH07CiAJCTdCQjM0QTE3MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEExNjI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250
ZXh0R0xBTkdMRVV0aWxpdGllcy5oICovOyB9OworCQk3QkIzNEE0ODI1Mzc3NkNBMDAwMjlEMDgg
LyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNT
VkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVu
dC5oICovOyB9OwogCQk3QzAyOUM2RTI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMjlDNkQyNDkz
QzhGODAwMjY4MjA0IC8qIENvbG9yVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzE4NDNGRTFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2Zp
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0
M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDA3MCw2ICsxMDA3MSw4IEBACiAJCTdBRjlC
MjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdCQjM0QTEzMjUzNDU3OTEwMDAyOUQwOCAvKiBXZWJHTExheWVyQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXJDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JCMzRBMTYyNTM0NUNCMjAwMDI5RDA4IC8qIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQjM0QTQ3MjUz
Nzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRDI0RkFEMzYwMDA1QkVGMTAgLyogU2V0
dGluZ3MuY3BwLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBTZXR0aW5ncy5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzAxMUYzRTI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwLmVyYjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMTFGM0YyNEZBRDM2MDAwNUJFRjEwIC8q
IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaWRsLmVyYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJbnRlcm5hbFNldHRpbmdz
R2VuZXJhdGVkLmlkbC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjE0Niw2
ICsyNjE0OSw4IEBACiAJCQkJMzEzREU4NkQyM0E5Njk2NjAwOEZDNDdCIC8qIEdyYXBoaWNzQ29u
dGV4dEdMLmNwcCAqLywKIAkJCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3ND
b250ZXh0R0wuaCAqLywKIAkJCQk3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCisJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8q
IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwICovLAorCQkJCTdCQjM0QTQ1MjUz
Nzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJ
CQkJMEYwMDEyNDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICov
LAogCQkJCTBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmgg
Ki8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICov
LApAQCAtMzE2MjIsNiArMzE2MjcsNyBAQAogCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAv
KiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0JCMzRBMTcyNTM0NUNC
MjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCQjM0QTQ4MjUzNzc2Q0EwMDAyOUQwOCAv
KiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUNCOUU5MjM3NTVEMDAw
MEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAK
aW5kZXggNjA0NDNiMzAzZjM3YjFkYjZjYTFjNGQyOWQ3M2U3OWJlYjZjZDQ1Ny4uNmUwY2ZmNjgz
Zjg3ZjI4MzZjMjBkNGJkMTMxMWY1ZGRmOGYyYjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMwMDIsOSAr
MzAwMiw5IEBAIEdDR0x1aW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Om1heFRyYW5zZm9ybUZl
ZWRiYWNrU2VwYXJhdGVBdHRyaWJzKCkgY29uc3QKICAgICByZXR1cm4gbV9tYXhUcmFuc2Zvcm1G
ZWVkYmFja1NlcGFyYXRlQXR0cmliczsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBp
eGVsU3RvcmVQYXJhbXMgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFja1BpeGVsU3RvcmVQ
YXJhbXMoKSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6UGl4ZWxTdG9yZVBhcmFt
cyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4ZWxTdG9yZVBhcmFtcygpIGNvbnN0
CiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1z
OworICAgIFBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBt
X3BhY2tBbGlnbm1lbnQ7CiAgICAgcGFyYW1zLnJvd0xlbmd0aCA9IG1fcGFja1Jvd0xlbmd0aDsK
ICAgICBwYXJhbXMuc2tpcFBpeGVscyA9IG1fcGFja1NraXBQaXhlbHM7CkBAIC0zMDEyLDkgKzMw
MTIsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4ZWxTdAogICAgIHJldHVybiBwYXJhbXM7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VEaW1lbnNpb24gZGlt
ZW5zaW9uKSBjb25zdAorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6UGl4ZWxTdG9yZVBhcmFt
cyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleElt
YWdlRGltZW5zaW9uIGRpbWVuc2lvbikgY29uc3QKIHsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJh
bXM7CiAgICAgcGFyYW1zLmFsaWdubWVudCA9IG1fdW5wYWNrQWxpZ25tZW50OwogICAgIHBhcmFt
cy5yb3dMZW5ndGggPSBtX3VucGFja1Jvd0xlbmd0aDsKICAgICBwYXJhbXMuc2tpcFBpeGVscyA9
IG1fdW5wYWNrU2tpcFBpeGVsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA1MDNjNTBkNzcyNDQyOTc3MGNhOGFkZWU1
ODZlNTdhY2M1ZjcxZGY0Li5iZWNkMjkzYjFkNmQwNmViNTgyYTVlMGE0MTMwMGYyY2RhZTkyNWRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oCkBAIC0yNTYsOCArMjU2LDggQEAgcHVibGljOgogCiAgICAgR0NHTHVpbnQgbWF4
VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUF0dHJpYnMoKSBjb25zdDsKIAotICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFBhY2tQaXhlbFN0b3JlUGFyYW1z
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3Rv
cmVQYXJhbXMgZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBnZXRQYWNrUGl4ZWxTdG9yZVBhcmFt
cygpIGNvbnN0IG92ZXJyaWRlOworICAgIFBpeGVsU3RvcmVQYXJhbXMgZ2V0VW5wYWNrUGl4ZWxT
dG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29s
IGNoZWNrQW5kVHJhbnNsYXRlQXR0YWNobWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
Q0dMZW51bSwgVmVjdG9yPEdDR0xlbnVtPiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDc3Njkz
OTM4MWY2Y2EwMzIwZGM1MzlmNTMzOGVmOWQ3NzE4NDRiNDkuLmEzNGNhODU1ZDc1YjU4ZDJkNDk1
ZjY3OTkxYTk3ZTRkNmE5ZWRjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC01MCw2ICs1MCw3IEBA
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgpA
QCAtNDg4OCw3ICs0ODg5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZUFycmF5QnVmZmVyVmlld0hlbHBlcihUZXhJbWFnZUZ1bmN0aW9uSUQKICAgICAgICAgQVNT
RVJUKHNvdXJjZVR5cGUgPT0gVGV4SW1hZ2VEaW1lbnNpb246OlRleDJEKTsKICAgICAgICAgLy8g
T25seSBlbnRlciBoZXJlIGlmIHdpZHRoIG9yIGhlaWdodCBpcyBub24temVyby4gT3RoZXJ3aXNl
LCBjYWxsIHRvIHRoZQogICAgICAgICAvLyB1bmRlcmx5aW5nIGRyaXZlciB0byBnZW5lcmF0ZSBh
cHByb3ByaWF0ZSBHTCBlcnJvcnMgaWYgbmVlZGVkLgotICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyB1bnBhY2tQYXJhbXMgPSBnZXRVbnBhY2tQaXhlbFN0
b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uOjpUZXgyRCk7CisgICAgICAgIFBpeGVsU3RvcmVQ
YXJhbXMgdW5wYWNrUGFyYW1zID0gZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURp
bWVuc2lvbjo6VGV4MkQpOwogICAgICAgICBHQ0dMaW50IGRhdGFTdG9yZVdpZHRoID0gdW5wYWNr
UGFyYW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGggOiB3aWR0aDsKICAgICAg
ICAgaWYgKHVucGFja1BhcmFtcy5za2lwUGl4ZWxzICsgd2lkdGggPiBkYXRhU3RvcmVXaWR0aCkg
ewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJJbnZhbGlkIHVucGFjayBwYXJhbXMgY29tYmlu
YXRpb24uIik7CkBAIC00OTQ1LDcgKzQ5NDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlSW1wbChUZXhJbWFnZUZ1bmN0aW9uSUQgZnVuY3Rpb25JRCwgR0NHTAog
ICAgIGlmIChtX3VucGFja0ZsaXBZKQogICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5z
ZXRZKGltYWdlLT5oZWlnaHQoKSAtIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0Lm1heFkoKSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0
b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNl
Q29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSwgaWdub3JlTmF0aXZlSW1hZ2VB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUsIGln
bm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgaWYgKCFpbWFnZUV4
dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBpbWFn
ZSBkYXRhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTYzMDcsMTcgKzYzMDgsMTcgQEAgUmVmUHRy
PEludDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdMSW50QXJyYXlQ
YXJhbWV0ZXIoR0NHTGVudW0KICAgICByZXR1cm4gSW50MzJBcnJheTo6dHJ5Q3JlYXRlKHZhbHVl
LCBsZW5ndGgpOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFt
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxTdG9yZVBhcmFtcygpIGNv
bnN0CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3QKIHsKLSAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAg
UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgcGFyYW1zLmFsaWdubWVudCA9IG1fcGFja0Fs
aWdubWVudDsKICAgICByZXR1cm4gcGFyYW1zOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnBhY2tQ
aXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uIGRpbWVuc2lvbikgY29uc3QKK1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbiBkaW1l
bnNpb24pIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKGRpbWVuc2lvbik7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOworICAgIFBpeGVsU3Rv
cmVQYXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBtX3VucGFja0FsaWdubWVu
dDsKICAgICByZXR1cm4gcGFyYW1zOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCmluZGV4IDIwNmFjZTM1NTBhYjlh
MTYzMWM1MzUzNjRmYWMxOTIzZjg1NWViZWUuLmUyYTA3YTViYzU2ZGEwMjRkYWUwMjExN2NmNzNi
ZmI0NDk3Zjk3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKQEAgLTg1MSw5ICs4NTEsOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xz
aXplaSBieXRlTGVuZ3RoLCBjb25zdCB2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgdGV4U3ViSW1h
Z2UyREJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQs
IEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgYnl0ZUxlbmd0aCwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZ2V0VGV4SW1hZ2VGdW5jdGlvbk5hbWUoVGV4SW1hZ2VGdW5jdGlvbklEKTsKLQotICAg
IHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFj
a1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1h
Z2VEaW1lbnNpb24pIGNvbnN0OworICAgIHVzaW5nIFBpeGVsU3RvcmVQYXJhbXMgPSBHcmFwaGlj
c0NvbnRleHRHTDo6UGl4ZWxTdG9yZVBhcmFtczsKKyAgICB2aXJ0dWFsIFBpeGVsU3RvcmVQYXJh
bXMgZ2V0UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBpeGVsU3Rv
cmVQYXJhbXMgZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbikgY29u
c3Q7CiAKICNpZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqLCBib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCAxNmNjMTBjNzdlMmY2NmRlMGFh
Nzk4MDM5Yjc4MzY0ZWE5NmRmODc5Li5hMTZmNThkYjNhNDBhNGFlNTdmZjlhN2FjMTE1OGQ3ODcx
YTNlZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0zMSw5ICszMSwzNzkgQEAKICNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorI2luY2x1ZGUg
IkZvcm1hdENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0YXRpYyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdD
R0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHQ0dMZW51bSBkZXN0aW5hdGlvblR5cGUpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OworICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICAgICAgc3dpdGNoIChkZXN0
aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4X1M7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4X1M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JH
QjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBX0lOVEVHRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0Jf
QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6QTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRUQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHODsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQ
SEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlv
bkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MTZfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMTZfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRp
b25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6
CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UjE2OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpEMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlv
bkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MzJfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMzJfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMl9TOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJfUzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
Rm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgor
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIz
MjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6RDMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6
CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6CisgICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNkY7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgor
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTUkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVy
ZV9mbG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01Q
T05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6RDMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Cisg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1
MTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
U0hPUlRfNV82XzU6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0I1NjU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZf
UkVWOgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCMTBGMTFGMTFGOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8xMF8xMDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IHJldHVybiBkc3RGb3JtYXQ7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIHRl
eGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujhf
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHOF9TOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTU1NTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTQ0NDQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
NTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6RDE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjhfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4
OgorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
OF9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSMzJfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkcxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSRzE2X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OgorICAgICAgICByZXR1cm4gNDsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkczMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyX1M6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY6CisgICAgICAg
IHJldHVybiA4OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMy
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyX1M6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOgorICAgICAgICByZXR1
cm4gMTI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9TOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY6CisgICAgICAgIHJldHVy
biAxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKworLy8g
SGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVE
YXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCisvLyBkYXRhIGludG8gdGhlIHNw
ZWNpZmllZCBPcGVuR0wgZGVzdGluYXRpb24gZm9ybWF0IGFuZCB0eXBlLgorLy8gQSBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCisvLyBkYXRh
IGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGgu
CisvLyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KK3N0
YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgc291cmNlRGF0
YVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VEYXRhSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VE
YXRhU3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVu
dCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5z
aWduZWQgZGVzdGluYXRpb25UeXBlLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9w
LCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUKGRlcHRo
ID49IDEpOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0KTsgLy8gRGVyaXZlZCBm
cm9tIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkuCisgICAgaWYgKCF1bnBhY2tJbWFn
ZUhlaWdodCkKKyAgICAgICAgdW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3VyY2VEYXRhU3ViUmVjdGFu
Z2xlLmhlaWdodCgpOworICAgIGludCB2YWxpZFNyYyA9IHNvdXJjZURhdGFXaWR0aCAqIHRleGVs
Qnl0ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisgICAgaW50IHJlbWFpbmRlciA9IHNv
dXJjZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkg
OiAwOworICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7CisgICAgaW50IHNyY1Jvd09m
ZnNldCA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUueCgpICogdGV4ZWxCeXRlc0ZvckZvcm1hdChz
b3VyY2VEYXRhRm9ybWF0KTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRz
dERhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlv
blR5cGUpOworICAgIGludCBkc3RTdHJpZGUgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLndpZHRo
KCkgKiB0ZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFGb3JtYXQpOworICAgIGlmIChmbGlwWSkg
eworICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGlu
YXRpb25EYXRhKSArIGRzdFN0cmlkZSAqICgoZGVwdGggKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xl
LmhlaWdodCgpKSAtIDEpOworICAgICAgICBkc3RTdHJpZGUgPSAtZHN0U3RyaWRlOworICAgIH0K
KyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMOjpoYXNBbHBoYShzb3VyY2VEYXRhRm9ybWF0KSB8
fCAhR3JhcGhpY3NDb250ZXh0R0w6Omhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFHcmFw
aGljc0NvbnRleHRHTDo6aGFzQ29sb3IoZHN0RGF0YUZvcm1hdCkpCisgICAgICAgIGFscGhhT3Ag
PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nOworCisgICAgaWYgKHNvdXJj
ZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1hdCAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYmFzZVB0
ciA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLnkoKTsK
KyAgICAgICAgY29uc3QgdWludDhfdCogYmFzZUVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUg
KiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLm1heFkoKTsKKworICAgICAgICAvLyBJZiBwYWNraW5n
IG11bHRpcGxlIGltYWdlcyBpbnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZsaXBZIGlzIHRydWUsCisg
ICAgICAgIC8vIHRoZW4gdGhlIHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0
IG9mIHRoZQorICAgICAgICAvLyAiYm90dG9tbW9zdCIgb2YgdGhvc2UgaW1hZ2VzLiBTaW5jZSB0
aGUgc291cmNlIHBvaW50ZXIgc3RyaWRlcyBpbgorICAgICAgICAvLyB0aGUgcG9zaXRpdmUgZGly
ZWN0aW9uLCB3ZSBuZWVkIHRvIGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQgdGhlCisgICAgICAgIC8v
IGxhc3QsIG9yICJ0b3Btb3N0Iiwgb2YgdGhlc2UgaW1hZ2VzLgorICAgICAgICBpZiAoZmxpcFkg
JiYgZGVwdGggPiAxKSB7CisgICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgZGlzdGFuY2VUb1Rv
cEltYWdlID0gKGRlcHRoIC0gMSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJbWFnZUhlaWdodDsKKyAg
ICAgICAgICAgIGJhc2VQdHIgLT0gZGlzdGFuY2VUb1RvcEltYWdlOworICAgICAgICAgICAgYmFz
ZUVuZCAtPSBkaXN0YW5jZVRvVG9wSW1hZ2U7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCByb3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOworICAg
ICAgICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRh
KTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyArK2kpIHsKKyAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJhc2VQdHI7CisgICAgICAgICAgICBjb25zdCB1aW50
OF90KiBwdHJFbmQgPSBiYXNlRW5kOworICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkg
eworICAgICAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciArIHNyY1Jvd09mZnNldCwgcm93U2l6
ZSk7CisgICAgICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKKyAgICAgICAgICAgICAgICBk
c3QgKz0gZHN0U3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFzZVB0ciArPSB1
bnBhY2tJbWFnZUhlaWdodCAqIHNyY1N0cmlkZTsKKyAgICAgICAgICAgIGJhc2VFbmQgKz0gdW5w
YWNrSW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcigKKyAgICAgICAgc291
cmNlRGF0YVN1YlJlY3RhbmdsZSwgZGVwdGgsCisgICAgICAgIHVucGFja0ltYWdlSGVpZ2h0LCBz
b3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsCisgICAgICAgIHNyY1N0cmlkZSwgc3JjUm93T2Zm
c2V0LCBkc3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZURhdGFGb3JtYXQs
IGRzdERhdGFGb3JtYXQsIGFscGhhT3ApOworICAgIGlmICghY29udmVydGVyLnN1Y2Nlc3MoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCisKIEdyYXBoaWNz
Q29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGljc0NvbnRleHRHTCopCiAgICAg
OiBtX2F0dHJzKGF0dHJzKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKQEAgLTE4
NCw2ICs1NTQsMzMyIEBAIHVpbnQ4X3QgR3JhcGhpY3NDb250ZXh0R0w6OmdldENoYW5uZWxCaXRz
QnlGb3JtYXQoR0NHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBHcmFwaGljc0NvbnRl
eHRHTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVz
UGVyQ29tcG9uZW50KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9D
T01QT05FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDogLy8g
VHJlYXQgaXQgYXMgb25lIGNvbXBvbmVudC4KKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9
IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5D
RV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpTUkdCX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpCR1JB
X0VYVDogLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZ
VEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMYnl0ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6Cisg
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWJ5dGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgKmJ5dGVz
UGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICAqYnl0ZXNQZXJD
b21wb25lbnQgPSBzaXplb2YoR0NHTHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQ
aXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdXNob3J0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAg
ICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGludCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgKmJ5
dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAqY29t
cG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9m
KEdDR0x1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9
IHNpemVvZihHQ0dMZmxvYXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxP
QVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBv
bmVudCA9IHNpemVvZihHQ0dMaGFsZmZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgICAg
ICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KSArIHNpemVvZihHQ0dMdWlu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdM
Ojpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBjb25z
dCBQaXhlbFN0b3JlUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLCB1
bnNpZ25lZCogcGFkZGluZ0luQnl0ZXMsIHVuc2lnbmVkKiBza2lwU2l6ZUluQnl0ZXMpCit7Cisg
ICAgQVNTRVJUKGltYWdlU2l6ZUluQnl0ZXMpOworICAgIEFTU0VSVChwYXJhbXMuYWxpZ25tZW50
ID09IDEgfHwgcGFyYW1zLmFsaWdubWVudCA9PSAyIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gNCB8
fCBwYXJhbXMuYWxpZ25tZW50ID09IDgpOworICAgIEFTU0VSVChwYXJhbXMucm93TGVuZ3RoID49
IDApOworICAgIEFTU0VSVChwYXJhbXMuaW1hZ2VIZWlnaHQgPj0gMCk7CisgICAgQVNTRVJUKHBh
cmFtcy5za2lwUGl4ZWxzID49IDApOworICAgIEFTU0VSVChwYXJhbXMuc2tpcFJvd3MgPj0gMCk7
CisgICAgQVNTRVJUKHBhcmFtcy5za2lwSW1hZ2VzID49IDApOworICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCB8fCBkZXB0aCA8IDApCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQgfHwgIWRlcHRo
KSB7CisgICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAgICAgICAgaWYgKHBhZGRpbmdJ
bkJ5dGVzKQorICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsKKyAgICAgICAgaWYgKHNr
aXBTaXplSW5CeXRlcykKKyAgICAgICAgICAgICpza2lwU2l6ZUluQnl0ZXMgPSAwOworICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOworICAgIH0KKworICAgIGludCBy
b3dMZW5ndGggPSBwYXJhbXMucm93TGVuZ3RoID4gMCA/IHBhcmFtcy5yb3dMZW5ndGggOiB3aWR0
aDsKKyAgICBpbnQgaW1hZ2VIZWlnaHQgPSBwYXJhbXMuaW1hZ2VIZWlnaHQgPiAwID8gcGFyYW1z
LmltYWdlSGVpZ2h0IDogaGVpZ2h0OworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQs
IGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1l
dGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVu
dCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNOworICAg
IHVuc2lnbmVkIGJ5dGVzUGVyR3JvdXAgPSBieXRlc1BlckNvbXBvbmVudCAqIGNvbXBvbmVudHNQ
ZXJQaXhlbDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFZh
bHVlID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJvd0xlbmd0aCk7CisgICAgY2hlY2tlZFZhbHVl
ICo9IGJ5dGVzUGVyR3JvdXA7CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKworICAg
IHVuc2lnbmVkIGxhc3RSb3dTaXplOworICAgIGlmIChwYXJhbXMucm93TGVuZ3RoID4gMCAmJiBw
YXJhbXMucm93TGVuZ3RoICE9IHdpZHRoKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiB0bXAgPSB3aWR0aDsKKyAgICAgICAgdG1wICo9IGJ5dGVzUGVyR3JvdXA7
CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBsYXN0Um93U2l6ZSA9IHRt
cC51bnNhZmVHZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGFzdFJvd1NpemUgPSBjaGVja2Vk
VmFsdWUudW5zYWZlR2V0KCk7CisKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKKyAgICB1bnNp
Z25lZCByZXNpZHVhbCA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKSAlIHBhcmFtcy5hbGlnbm1l
bnQ7CisgICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcgPSBwYXJhbXMuYWxpZ25t
ZW50IC0gcmVzaWR1YWw7CisgICAgICAgIGNoZWNrZWRWYWx1ZSArPSBwYWRkaW5nOworICAgIH0K
KyAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIHVuc2lnbmVkIHBhZGRlZFJvd1Np
emUgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisKKyAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gcm93cyA9IGltYWdlSGVpZ2h0OworICAgIHJvd3MgKj0gKGRlcHRoIC0g
MSk7CisgICAgLy8gTGFzdCBpbWFnZSBpcyBub3QgYWZmZWN0ZWQgYnkgSU1BR0VfSEVJR0hUIHBh
cmFtZXRlci4KKyAgICByb3dzICs9IGhlaWdodDsKKyAgICBpZiAocm93cy5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAg
ICBjaGVja2VkVmFsdWUgKj0gKHJvd3MgLSAxKTsKKyAgICAvLyBMYXN0IHJvdyBpcyBub3QgYWZm
ZWN0ZWQgYnkgUk9XX0xFTkdUSCBwYXJhbWV0ZXIuCisgICAgY2hlY2tlZFZhbHVlICs9IGxhc3RS
b3dTaXplOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgKmltYWdlU2l6ZUlu
Qnl0ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisgICAgaWYgKHBhZGRpbmdJbkJ5dGVz
KQorICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSBwYWRkaW5nOworCisgICAgQ2hlY2tlZDx1aW50
MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHNraXBTaXplID0gMDsKKyAgICBpZiAocGFyYW1zLnNraXBJ
bWFnZXMgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0
bXAgPSBwYWRkZWRSb3dTaXplOworICAgICAgICB0bXAgKj0gaW1hZ2VIZWlnaHQ7CisgICAgICAg
IHRtcCAqPSBwYXJhbXMuc2tpcEltYWdlczsKKyAgICAgICAgaWYgKHRtcC5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7
CisgICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVHZXQoKTsKKyAgICB9CisgICAgaWYgKHBh
cmFtcy5za2lwUm93cyA+IDApIHsKKyAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3Zl
cmZsb3c+IHRtcCA9IHBhZGRlZFJvd1NpemU7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcFJv
d3M7CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBza2lwU2l6ZSArPSB0
bXAudW5zYWZlR2V0KCk7CisgICAgfQorICAgIGlmIChwYXJhbXMuc2tpcFBpeGVscyA+IDApIHsK
KyAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRtcCA9IGJ5dGVzUGVy
R3JvdXA7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcFBpeGVsczsKKyAgICAgICAgaWYgKHRt
cC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUU7CisgICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVHZXQoKTsKKyAg
ICB9CisgICAgaWYgKHNraXBTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIGlmIChza2lwU2l6ZUluQnl0ZXMp
CisgICAgICAgICpza2lwU2l6ZUluQnl0ZXMgPSBza2lwU2l6ZS51bnNhZmVHZXQoKTsKKworICAg
IGNoZWNrZWRWYWx1ZSArPSBza2lwU2l6ZS51bnNhZmVHZXQoKTsKKyAgICBpZiAoY2hlY2tlZFZh
bHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Cit9
CisKKyNpZiAhVVNFKEFOR0xFKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6cG9zc2libGVGb3Jt
YXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xl
bnVtJiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKQoreworI2RlZmluZSBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlTWFjcm8pIGNh
c2UgaW50ZXJuYWxGb3JtYXRNYWNybzogXAorICAgICAgICBmb3JtYXQgPSBmb3JtYXRNYWNybzsg
XAorICAgICAgICB0eXBlID0gdHlwZU1hY3JvOyBcCisgICAgICAgIGJyZWFrOworCisgICAgc3dp
dGNoIChpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KFJHQiwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSR0JBLCBSR0JBLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShMVU1JTkFOQ0VfQUxQSEEsIExVTUlOQU5DRV9BTFBIQSwgVU5TSUdORURfQllU
RSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoTFVNSU5BTkNFLCBMVU1JTkFO
Q0UsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEFM
UEhBLCBBTFBIQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUjgsIFJFRCwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUjhfU05PUk0sIFJFRCwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUjE2RiwgUkVELCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShSMzJGLCBSRUQsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSOFVJLCBSRURfSU5URUdFUiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjhJLCBSRURfSU5URUdFUiwgQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2VUksIFJFRF9JTlRFR0VSLCBVTlNJR05FRF9TSE9S
VCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2SSwgUkVEX0lOVEVHRVIs
IFNIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSMzJVSSwgUkVEX0lO
VEVHRVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
UjMySSwgUkVEX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoUkc4LCBSRywgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkc4X1NOT1JNLCBSRywgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkcxNkYsIFJHLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSRzMyRiwgUkcsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSRzhVSSwgUkdfSU5URUdFUiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkc4SSwgUkdfSU5URUdFUiwgQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNlVJLCBSR19JTlRFR0VSLCBVTlNJR05FRF9TSE9SVCk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNkksIFJHX0lOVEVHRVIsIFNI
T1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSRzMyVUksIFJHX0lOVEVH
RVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcz
MkksIFJHX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
UkdCOCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShTUkdCOCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShSR0I1NjUsIFJHQiwgVU5TSUdORURfU0hPUlRfNV82XzUpOworICAgICAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhfU05PUk0sIFJHQiwgQllURSk7CisgICAgICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjExRl9HMTFGX0IxMEYsIFJHQiwgVU5TSUdORURf
SU5UXzEwRl8xMUZfMTFGX1JFVik7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
UkdCOV9FNSwgUkdCLCBVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQjE2RiwgUkdCLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IzMkYsIFJHQiwgRkxPQVQpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUp
OworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhJLCBSR0JfSU5URUdFUiwg
QllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMTZVSSwgUkdCX0lO
VEVHRVIsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSR0IxNkksIFJHQl9JTlRFR0VSLCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoUkdCMzJVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJJLCBSR0JfSU5URUdFUiwgSU5UKTsKKyAgICAg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOCwgUkdCQSwgVU5TSUdORURfQllURSk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoU1JHQjhfQUxQSEE4LCBSR0JBLCBV
TlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOF9T
Tk9STSwgUkdCQSwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdC
NV9BMSwgUkdCQSwgVU5TSUdORURfU0hPUlRfNV81XzVfMSk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkdCQTQsIFJHQkEsIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjEwX0EyLCBSR0JBLCBVTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJH
QkExNkYsIFJHQkEsIEhBTEZfRkxPQVQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKFJHQkEzMkYsIFJHQkEsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSR0JBOFVJLCBSR0JBX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkE4SSwgUkdCQV9JTlRFR0VSLCBCWVRFKTsKKyAgICAg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxMF9BMlVJLCBSR0JBX0lOVEVHRVIsIFVO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVik7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkdCQTE2VUksIFJHQkFfSU5URUdFUiwgVU5TSUdORURfU0hPUlQpOworICAgICAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkExNkksIFJHQkFfSU5URUdFUiwgU0hPUlQpOwor
ICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkEzMkksIFJHQkFfSU5URUdFUiwg
SU5UKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMzJVSSwgUkdCQV9J
TlRFR0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KERFUFRIX0NPTVBPTkVOVDE2LCBERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUKTsKKyAg
ICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShERVBUSF9DT01QT05FTlQsIERFUFRIX0NP
TVBPTkVOVCwgVU5TSUdORURfU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKERFUFRIX0NPTVBPTkVOVDI0LCBERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEhfQ09NUE9ORU5UMzJGLCBERVBU
SF9DT01QT05FTlQsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShE
RVBUSF9TVEVOQ0lMLCBERVBUSF9TVEVOQ0lMLCBVTlNJR05FRF9JTlRfMjRfOCk7CisgICAgICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEgyNF9TVEVOQ0lMOCwgREVQVEhfU1RFTkNJ
TCwgVU5TSUdORURfSU5UXzI0XzgpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KERFUFRIMzJGX1NURU5DSUw4LCBERVBUSF9TVEVOQ0lMLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRf
MjRfOF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNH
TDo6U1JHQl9FWFQsIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQsIFVOU0lHTkVEX0JZVEUpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9F
WFQsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQsIFVOU0lHTkVEX0JZVEUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjdW5kZWYgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gIVVTRShBTkdM
RSkKKworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbWFnZSogaW1hZ2Us
IGNvbnN0IHZvaWQqIHBpeGVscywgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29s
IGZsaXBZLCBBbHBoYU9wIGFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25l
ZCBzb3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50
UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFwaXhlbHMpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7CisgICAgLy8gT3V0cHV0IGRhdGEgaXMgdGln
aHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KKyAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFt
czsKKyAgICBwYXJhbXMuYWxpZ25tZW50ID0gMTsKKyAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUlu
Qnl0ZXMoZm9ybWF0LCB0eXBlLCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZS53aWR0aCgpLCBzb3Vy
Y2VJbWFnZVN1YlJlY3RhbmdsZS5oZWlnaHQoKSwgZGVwdGgsIHBhcmFtcywgJnBhY2tlZFNpemUs
IG51bGxwdHIsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOworCisgICAgaWYg
KCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNv
dXJjZUZvcm1hdCwgc291cmNlSW1hZ2VXaWR0aCwgc291cmNlSW1hZ2VIZWlnaHQsIHNvdXJjZUlt
YWdlU3ViUmVjdGFuZ2xlLCBkZXB0aCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnBhY2tJbWFn
ZUhlaWdodCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1h
Z2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcoKmltYWdlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdElt
YWdlRGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQg
dW5wYWNrSW1hZ2VIZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7Cisg
ICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgd2lkdGgg
PSBpbWFnZURhdGEtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0
KCk7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1dCBkYXRhIGlzIHRp
Z2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJh
bXM7CisgICAgcGFyYW1zLmFsaWdubWVudCA9IDE7CisgICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJ
bkJ5dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291
cmNlSW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXpl
LCBudWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlm
ICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFj
a0ltYWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpE
b1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHRHTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxTdG9y
ZVBhcmFtcyYgdW5wYWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGNvbnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIC8vIEFz
c3VtZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KKyAg
ICBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlw
ZSk7CisKKyAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCisgICAgdW5zaWduZWQgY29t
cG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAoIWNvbXB1dGVGb3Jt
YXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZi
eXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Cisg
ICAgZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKKworICAgIHVu
c2lnbmVkIGltYWdlU2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsKKyAgICBjb21wdXRlSW1h
Z2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHVucGFja1BhcmFt
cywgJmltYWdlU2l6ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUluQnl0ZXMpOworICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxz
KTsKKyAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQorICAgICAgICBzcmNEYXRhICs9IHNraXBTaXpl
SW5CeXRlczsKKworICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCB1bnBhY2tQYXJhbXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA6IHdpZHRo
LCBoZWlnaHQsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEsIHVucGFja1BhcmFtcy5h
bGlnbm1lbnQsIDAsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpE
b1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDlm
ZWU3MmYyYzcyYjFiNmVmZWNlYzc3OGQ1NmQwZWU1NWIyOTFiMGUuLmMwMzJlMDRiMWRiZDhiNDM2
YTRhMmI4ODQ0MGYzNDY2NTc5ZDU1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODg4LDYgKzg4
OSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBjbGFzcyBDbGllbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wb3NpdGUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRl
eHRMb3N0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9u
KCkgPSAwOworICAgIH07CisKICAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7CiAgICAgICAgIFN0cmlu
ZyBuYW1lOwogICAgICAgICBHQ0dMZW51bSB0eXBlOwpAQCAtODk3LDYgKzkwNyw5IEBAIHB1Ymxp
YzoKICAgICBHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIERl
c3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0wqIHNo
YXJlZENvbnRleHQgPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTCgp
ID0gZGVmYXVsdDsKIAorICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xp
ZW50cy5hZGQoJmNsaWVudCk7IH0KKyAgICB2b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVu
dCkgeyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9CisKICAgICAvLyA9PT09PT09PT09IFdl
YkdMIDEgZW50cnkgcG9pbnRzLgogCiAgICAgdmlydHVhbCB2b2lkIGFjdGl2ZVRleHR1cmUoR0NH
TGVudW0gdGV4dHVyZSkgPSAwOwpAQCAtMTI1MywxMyArMTI2Niw5MCBAQCBwdWJsaWM6CiAKICAg
ICAvLyA9PT09PT09PT09IE5vbi1XZWJHTCBiYXNlZCBlbnRyeSBwb2ludHMuCiAKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgPSAwOworCisgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3Jl
YXRpb24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0ID0gMDsKKworICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3
aWxsIGJlIHJldHVybmVkIGZyb20gYQorICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRo
aXMgaXMgdXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUworICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0
aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCisgICAgLy8gY2hlY2tp
bmcgbWFuZGF0ZWQgYnkgV2ViR0wuCisgICAgLy8KKyAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9m
IGdsR2V0RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCisgICAgLy8gaW5zdGFuY2Ugb2Yg
YW55IGdpdmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KKyAgICAvLyBn
ZXRFcnJvciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgorICAgIHZpcnR1YWwgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZUZvckRpc3BsYXkoKSA9IDA7CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIC8vIEhlbHBlciB0
byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0
byAwLgorICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgor
ICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0
dGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCkgPSAgMDsKKyNlbmRpZgorCisg
ICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7IH0KKwogICAgIHN0YXRpYyB1
bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDR0xlbnVtKTsKICAgICBzdGF0
aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0NHTGVudW0pOwogCiAgICAgc3RhdGlj
IHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQ0dMZW51bSk7CiAKKyAgICBzdHJ1Y3Qg
UGl4ZWxTdG9yZVBhcmFtcyBmaW5hbCB7CisgICAgICAgIEdDR0xpbnQgYWxpZ25tZW50IHsgNCB9
OworICAgICAgICBHQ0dMaW50IHJvd0xlbmd0aCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBpbWFn
ZUhlaWdodCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBza2lwUGl4ZWxzIHsgMCB9OworICAgICAg
ICBHQ0dMaW50IHNraXBSb3dzIHsgMCB9OworICAgICAgICBHQ0dMaW50IHNraXBJbWFnZXMgeyAw
IH07CisgICAgfTsKKworICAgIC8vIENvbXB1dGVzIHRoZSBjb21wb25lbnRzIHBlciBwaXhlbCBh
bmQgYnl0ZXMgcGVyIGNvbXBvbmVudAorICAgIC8vIGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0
eXBlIGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gZWl0aGVyIHdhcyBhbiBp
bnZhbGlkIGVudW0uCisgICAgc3RhdGljIGJvb2wgY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0
ZXJzKEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQ
ZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIC8vIENvbXB1dGVz
IHRoZSBpbWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwg
cGFkZGluZworICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9f
RVJST1IgaWYgc3VjY2VlZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQg
R0wgZXJyb3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6CisgICAgLy8gICBJ
TlZBTElEX1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBw
ZW5zLgorICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCisg
ICAgc3RhdGljIEdDR0xlbnVtIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMmLCB1bnNpZ25lZCogaW1hZ2VTaXpl
SW5CeXRlcywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5
dGVzKTsKKworI2lmICFVU0UoQU5HTEUpCisgICAgc3RhdGljIGJvb2wgcG9zc2libGVGb3JtYXRB
bmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVt
JiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKTsKKyNlbmRpZiAvLyAhVVNFKEFOR0xFKQorCisgICAg
Ly8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUg
cGFzc2VkIFZlY3RvciwKKyAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0
byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAorICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlw
WSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCisgICAgLy8gdXBvbiBz
dWNjZXNzLgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0
YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0
aCwgaW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1zdXBw
bGllZCB0ZXh0dXJlCisgICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0
aXBseUFscGhhIHBhcmFtZXRlcnMuCisgICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0bHkg
cGFja2VkIGFjY29yZGluZyB0byB0aGUgcGFzc2VkCisgICAgLy8gdW5wYWNrUGFyYW1zLCB0aGUg
b3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgorICAgIHN0YXRpYyBi
b29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMmIHVu
cGFja1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2b2lk
KiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICAvLyBQYWNrcyB0aGUgY29u
dGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRv
IHRoZSBwYXNzZWQgVmVjdG9yCisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQg
YW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFPcCBmbGFncy4KKyAgICAv
LyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURh
dGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2ln
bmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNvdXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKTsKKwogICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgaW50IG1fY3VycmVudFdpZHRoIHsg
MCB9OworICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07CisgICAgSGFzaFNldDxDbGllbnQq
PiBtX2NsaWVudHM7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
IG1fYXR0cnM7CiAgICAgRGVzdGluYXRpb24gbV9kZXN0aW5hdGlvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVmNTE0NzJmMTEwODU4MzhmMmRi
ZWMxZWQ1MzM1ZTRlZTNmMjY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6R3JhcGhpY3ND
b250ZXh0R0xJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2UsIERPTVNvdXJjZSBpbWFnZUh0bWxE
b21Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCit7
CisgICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VI
dG1sRG9tU291cmNlOworICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVt
dWx0aXBseUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgaWdub3JlTmF0aXZlSW1h
Z2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VF
eHRyYWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjliMGM5ZmIxZTYzOWQ5OWY5ODM3
ZmUwNmRmMGFjNzAyOTZjOTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oCkBAIC0wLDAg
KzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBET01T
b3VyY2UgPSBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOworICAgIHVzaW5nIERhdGFGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDsKKyAgICB1c2luZyBBbHBoYU9wID0g
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A7CisgICAgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3RvcihJbWFnZSosIERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7CisKKyAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBp
bXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVz
b3VyY2VzCisgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCisgICAg
fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKTsKKworICAgIGJvb2wgZXh0cmFjdFN1
Y2NlZWRlZCgpIHsgcmV0dXJuIG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQorICAgIGNvbnN0IHZvaWQq
IGltYWdlUGl4ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQorICAgIHVuc2ln
bmVkIGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KKyAgICB1bnNpZ25lZCBp
bWFnZUhlaWdodCgpIHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KKyAgICBEYXRhRm9ybWF0IGlt
YWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQorICAgIEFs
cGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9CisgICAgdW5zaWduZWQg
aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlVW5wYWNr
QWxpZ25tZW50OyB9CisgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJu
IG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Citwcml2YXRlOgorICAgIC8vIEVhY2ggcGxhdGZvcm0g
bXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICAgIC8vIEV4
dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3
aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5kIEFscGhhT3AgZXRjLAor
ICAgIC8vIG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBvciByZWxldmFudCBkYXRhIGlmIG5l
ZWRlZCBhbmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcworICAgIGJvb2wgZXh0cmFjdEltYWdl
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwg
Ym9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisjaWYgVVNF
KENBSVJPKQorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOworI2Vs
aWYgVVNFKENHKQorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOworICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IG1fcGl4ZWxEYXRhOworICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXplZFJH
QkE4RGF0YTsKKyNlbmRpZgorICAgIEltYWdlKiBtX2ltYWdlOworICAgIERPTVNvdXJjZSBtX2lt
YWdlSHRtbERvbVNvdXJjZTsKKyAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKKyAgICBjb25z
dCB2b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKKyAg
ICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OworICAgIERhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZv
cm1hdDsKKyAgICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
R0xBTkdMRS5jcHAKaW5kZXggZDQ3MWM0MjJjYzQ3MjhiZmVjZjMwZTkxZjY5MjdmMTRlMTcyNmRj
NS4uNDY1ZWYyNDNmMzg2ZWIyZjgyYzkyNjRlMTBiOGUzODA1ODFjOTFiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTcwNywxMSArNzA3LDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6
OkZsdXNoKCk7CiB9CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAppbmRleCAwNjk3NWE0
MTM5YTE5ZGE3Nzc2ZTAyMDgyMTQ0MmZlNWJjYjJlMGY3Li5mYWRiMjQzZTY3OGI3MjdmMTBiMGI2
YjNiMmU5MGYwNThiZDM5MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0Uo
Q0FJUk8pCiAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKQEAgLTM5
LDkgKzQwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKK0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yKCkgPSBkZWZhdWx0OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4
dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVH
YW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVH
YW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCkKIHsKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKaW5kZXggN2NjMzk2OTJkZTJjMWM3
Zjg0NjZmNDVhOTZhZTE1YTU1NDcxMGY1ZS4uYmI5MWRlYzkxMjI0ZDQxOTdlY2E4MWJiZGJjNGUw
NTY3ZTQzYzA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKQEAgLTMxNyw5ICszMTgsOSBAQCB2b2lkIGNvbnZl
cnQxNkJpdEZvcm1hdFRvUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc3JjRm9y
bWF0LCBjb25zdCB1aQogCiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJh
Y3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0
SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVO
YXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCiB7CiAgICAgaWYgKCFtX2ltYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNw
cAppbmRleCBjMWY5MjY1YjE2OTVhNWQ2NGMzN2NmYWY1YzhjMDRkYzA5YzU4MWIwLi41YmU1YTlk
NjczYjZkYTA5ZGYyM2Q4YjUyNGZkODIzY2I2Yzg5M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5jcHAKQEAgLTMxLDI0NiArMzEsMTAgQEAKICNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgotI2luY2x1ZGUgIkZv
cm1hdENvbnZlcnRlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJh
eS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci0KLUdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0NHTGVudW0gZGVzdGluYXRpb25Gb3Jt
YXQsIEdDR0xlbnVtIGRlc3RpbmF0aW9uVHlwZSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTg7Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpCWVRFOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UjhfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSRzhfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
Ql9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQjhfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
X0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQThfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKLSAgICAgICAg
c3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0I4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKLSAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0U6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNIT1JUOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9J
TlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQjE2X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTY7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQxNjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19J
TlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6SU5UOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMl9TOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9J
TlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQjMyX1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMzI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5U
RUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZv
cm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgotICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgot
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QjE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlIxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIHN3aXRj
aCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMzJGOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBI
QToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBNDQ0NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85
XzlfUkVWOgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCNTk5OTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpEUzI0Xzg7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYxMUYxMUY7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEw
XzEwX1JFVjoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkEyXzEwXzEwXzEwOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRzdEZvcm1hdDsKLX0K
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2V0QnVmZmVyc1RvQXV0b0NsZWFyKCkKIHsKICAgICBHQ0dMdWludCBidWZmZXJzID0g
R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CkBAIC0zMDcsMTMgKzcxLDE0IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZl
cigpCiAgICAgbV9idWZmZXJzVG9BdXRvQ2xlYXIgPSAwOwogfQogCisjaWYgIVVTRShBTkdMRSkK
IGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdubWVudCkKIHsKICAgICBB
U1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5w
YWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwogICAgIFVuaXF1ZUFy
cmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAw
KSB7CiAgICAgICAgIHVuc2lnbmVkIHNpemU7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICAgICAgUGl4ZWxTdG9yZVBhcmFtcyBw
YXJhbXM7CiAgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tBbGlnbm1lbnQ7CiAgICAg
ICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBl
LCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRyLCBudWxscHRyKTsKICAg
ICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewpAQCAtMzI5
LDQ4NCArOTQsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZQogICAgIH0KICAgICByZXR1cm4g
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwogfQorI2VuZGlmCiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWws
IHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUw6IC8vIFRyZWF0IGl0IGFzIG9uZSBjb21wb25lbnQuCi0gICAgICAgICpjb21w
b25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgKmNvbXBv
bmVudHNQZXJQaXhlbCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4
ZWwgPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAot
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKLSAgICAgICAgKmNvbXBvbmVu
dHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpCWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2Yo
R0NHTGJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVi
eXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6
Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMc2hvcnQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKLSAg
ICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hvcnQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAg
ICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBz
aXplb2YoR0NHTHVzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OklOVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xpbnQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9J
TlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVW
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JF
VjoKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAgICpieXRlc1BlckNv
bXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAotICAgICAg
ICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGhhbGZmbG9hdCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFVjoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0xmbG9hdCkg
KyBzaXplb2YoR0NHTHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgIVVTRShB
TkdMRSkKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3NpYmxlRm9ybWF0QW5kVHlw
ZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSYgZm9y
bWF0LCBHQ0dMZW51bSYgdHlwZSkKLXsKLSNkZWZpbmUgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1hY3JvKSBjYXNlIGludGVy
bmFsRm9ybWF0TWFjcm86IFwKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0TWFjcm87IFwKLSAgICAg
ICAgdHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlTWFjcm87IFwKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwg
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5B
TkNFICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFICAgICAgLCBVTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OkFMUEhBICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSOCAgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UjhfU05PUk0gICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAg
ICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkYgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSMzJGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAg
ICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhVSSAgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4
SSAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgQllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjE2SSAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBTSE9SVCAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlIzMlVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJF
RF9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6Ukc4ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAg
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STSAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSRzE2RiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRyAgICAgICAgICAgICAs
IEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMkYgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkcgICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJ
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHMTZJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lO
VEVHRVIgICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyVUkgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UkczMkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAg
ICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjggICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCOCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05P
Uk0gICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCOV9FNSAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfNV85
XzlfOV9SRVYgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjE2RiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAg
ICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkYgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkdCOFVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAg
LCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ix
NlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIFVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdCX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUkgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IzMkkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Jf
SU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTggICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlNSR0I4X0FMUEhBOCAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAg
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STSAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCNV9BMSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBV
TlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9B
MiAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RiAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQSAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkYgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgRkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOFVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lO
VEVHRVIgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjEwX0EyVUkgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAg
ICwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSSAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTE2SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBTSE9S
VCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkFfSU5URUdFUiAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSSAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0lO
VCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTYgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9DT01QT05FTlQyNCAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01Q
T05FTlQsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGLCBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX1NURU5DSUwgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICwg
VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4ICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEgz
MkZfU1RFTkNJTDggLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCAgLCBGTE9BVF8z
Ml9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
RXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICAgICwgRXh0ZW5zaW9uc0dMOjpTUkdC
X0VYVCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQgICAg
ICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQgICAgICAsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSN1bmRlZiBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFCi0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQotCi1HQ0dMZW51bSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoCi0gICAgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXpl
aSBkZXB0aCwgY29uc3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMm
IHBhcmFtcywKLSAgICB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRlcywgdW5zaWduZWQqIHBhZGRp
bmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5dGVzKQotewotICAgIEFTU0VSVChpbWFn
ZVNpemVJbkJ5dGVzKTsKLSAgICBBU1NFUlQocGFyYW1zLmFsaWdubWVudCA9PSAxIHx8IHBhcmFt
cy5hbGlnbm1lbnQgPT0gMiB8fCBwYXJhbXMuYWxpZ25tZW50ID09IDQgfHwgcGFyYW1zLmFsaWdu
bWVudCA9PSA4KTsKLSAgICBBU1NFUlQocGFyYW1zLnJvd0xlbmd0aCA+PSAwKTsKLSAgICBBU1NF
UlQocGFyYW1zLmltYWdlSGVpZ2h0ID49IDApOwotICAgIEFTU0VSVChwYXJhbXMuc2tpcFBpeGVs
cyA+PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLnNraXBSb3dzID49IDApOwotICAgIEFTU0VSVChw
YXJhbXMuc2tpcEltYWdlcyA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAg
fHwgZGVwdGggPCAwKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUU7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0IHx8ICFkZXB0aCkgewotICAgICAgICAq
aW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChwYWRkaW5nSW5CeXRlcykKLSAgICAg
ICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChza2lwU2l6ZUluQnl0ZXMp
Ci0gICAgICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gMDsKLSAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpbnQgcm93TGVuZ3RoID0gcGFy
YW1zLnJvd0xlbmd0aCA+IDAgPyBwYXJhbXMucm93TGVuZ3RoIDogd2lkdGg7Ci0gICAgaW50IGlt
YWdlSGVpZ2h0ID0gcGFyYW1zLmltYWdlSGVpZ2h0ID4gMCA/IHBhcmFtcy5pbWFnZUhlaWdodCA6
IGhlaWdodDsKLQotICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50LCBjb21wb25lbnRzUGVy
UGl4ZWw7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0
eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQotICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTTsKLSAgICB1bnNpZ25lZCBieXRl
c1Blckdyb3VwID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25lbnRzUGVyUGl4ZWw7Ci0gICAg
Q2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRWYWx1ZSA9IHN0YXRpY19j
YXN0PHVpbnQzMl90Pihyb3dMZW5ndGgpOwotICAgIGNoZWNrZWRWYWx1ZSAqPSBieXRlc1Blckdy
b3VwOwotICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0KLSAgICB1bnNpZ25lZCBsYXN0
Um93U2l6ZTsKLSAgICBpZiAocGFyYW1zLnJvd0xlbmd0aCA+IDAgJiYgcGFyYW1zLnJvd0xlbmd0
aCAhPSB3aWR0aCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
dG1wID0gd2lkdGg7Ci0gICAgICAgIHRtcCAqPSBieXRlc1Blckdyb3VwOwotICAgICAgICBpZiAo
dG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgbGFzdFJvd1NpemUgPSB0bXAudW5zYWZlR2V0KCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGxhc3RSb3dTaXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdl
dCgpOwotCi0gICAgdW5zaWduZWQgcGFkZGluZyA9IDA7Ci0gICAgdW5zaWduZWQgcmVzaWR1YWwg
PSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCkgJSBwYXJhbXMuYWxpZ25tZW50OwotICAgIGlmIChy
ZXNpZHVhbCkgewotICAgICAgICBwYWRkaW5nID0gcGFyYW1zLmFsaWdubWVudCAtIHJlc2lkdWFs
OwotICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFkZGluZzsKLSAgICB9Ci0gICAgaWYgKGNoZWNr
ZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKLSAgICB1bnNpZ25lZCBwYWRkZWRSb3dTaXplID0gY2hlY2tlZFZh
bHVlLnVuc2FmZUdldCgpOwotCi0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+
IHJvd3MgPSBpbWFnZUhlaWdodDsKLSAgICByb3dzICo9IChkZXB0aCAtIDEpOwotICAgIC8vIExh
c3QgaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IElNQUdFX0hFSUdIVCBwYXJhbWV0ZXIuCi0gICAg
cm93cyArPSBoZWlnaHQ7Ci0gICAgaWYgKHJvd3MuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgY2hlY2tlZFZhbHVl
ICo9IChyb3dzIC0gMSk7Ci0gICAgLy8gTGFzdCByb3cgaXMgbm90IGFmZmVjdGVkIGJ5IFJPV19M
RU5HVEggcGFyYW1ldGVyLgotICAgIGNoZWNrZWRWYWx1ZSArPSBsYXN0Um93U2l6ZTsKLSAgICBp
ZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgICppbWFnZVNpemVJbkJ5dGVzID0gY2hlY2tl
ZFZhbHVlLnVuc2FmZUdldCgpOwotICAgIGlmIChwYWRkaW5nSW5CeXRlcykKLSAgICAgICAgKnBh
ZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKLQotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92
ZXJmbG93PiBza2lwU2l6ZSA9IDA7Ci0gICAgaWYgKHBhcmFtcy5za2lwSW1hZ2VzID4gMCkgewot
ICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gdG1wID0gcGFkZGVkUm93
U2l6ZTsKLSAgICAgICAgdG1wICo9IGltYWdlSGVpZ2h0OwotICAgICAgICB0bXAgKj0gcGFyYW1z
LnNraXBJbWFnZXM7Ci0gICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgICAgICBza2lw
U2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0gICAgfQotICAgIGlmIChwYXJhbXMuc2tpcFJvd3Mg
PiAwKSB7Ci0gICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBw
YWRkZWRSb3dTaXplOwotICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBSb3dzOwotICAgICAgICBp
ZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgc2tpcFNpemUgKz0gdG1wLnVuc2FmZUdldCgp
OwotICAgIH0KLSAgICBpZiAocGFyYW1zLnNraXBQaXhlbHMgPiAwKSB7Ci0gICAgICAgIENoZWNr
ZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBieXRlc1Blckdyb3VwOwotICAgICAg
ICB0bXAgKj0gcGFyYW1zLnNraXBQaXhlbHM7Ci0gICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
OwotICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0gICAgfQotICAgIGlmIChz
a2lwU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKLSAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQotICAgICAgICAqc2tp
cFNpemVJbkJ5dGVzID0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0KLSAgICBjaGVja2VkVmFsdWUg
Kz0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0gICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOwotfQotCi1HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtczo6UGl4ZWxTdG9yZVBhcmFtcygpCi0gICAg
OiBhbGlnbm1lbnQoNCkKLSAgICAsIHJvd0xlbmd0aCgwKQotICAgICwgaW1hZ2VIZWlnaHQoMCkK
LSAgICAsIHNraXBQaXhlbHMoMCkKLSAgICAsIHNraXBSb3dzKDApCi0gICAgLCBza2lwSW1hZ2Vz
KDApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6SW1h
Z2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJv
b2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQotewotICAgIG1faW1h
Z2UgPSBpbWFnZTsKLSAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGltYWdlSHRtbERvbVNvdXJj
ZTsKLSAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBo
YSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhY2tJ
bWFnZURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBEYXRhRm9ybWF0
IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgc291cmNlSW1hZ2VXaWR0aCwgdW5zaWduZWQgc291cmNl
SW1hZ2VIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3ViUmVjdGFuZ2xlLCBpbnQg
ZGVwdGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgaW50IHVucGFja0ltYWdlSGVp
Z2h0LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhcGl4ZWxz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBwYWNrZWRTaXplOwotICAg
IC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAg
UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgcGFyYW1zLmFsaWdubWVudCA9IDE7Ci0gICAg
aWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJS
ZWN0YW5nbGUud2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRo
LCBwYXJhbXMsICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkYXRhLnJlc2l6ZShw
YWNrZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHNvdXJjZUltYWdlV2lkdGgsIHNvdXJj
ZUltYWdlSGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIHNvdXJjZVVucGFj
a0FsaWdubWVudCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgZGF0
YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChJbWFnZU9i
c2VydmVyKiBvYnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIG9ic2Vy
dmVyLT5kaWREcmF3KCppbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RJbWFnZURhdGEoCi0gICAgSW1hZ2VEYXRhKiBpbWFn
ZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNl
SW1hZ2VTdWJSZWN0YW5nbGUsCi0gICAgaW50IGRlcHRoLCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZURhdGEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSBpbWFnZURhdGEtPndpZHRo
KCk7Ci0gICAgaW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGln
bm1lbnQgPT0gMSkuCi0gICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgcGFyYW1zLmFs
aWdubWVudCA9IDE7Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5n
bGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRy
KSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhpbWFn
ZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBz
b3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0ltYWdlSGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxw
aGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxTdG9yZVBhcmFtcyYgdW5w
YWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGNvbnN0IHZvaWQq
IHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIC8vIEFzc3VtZXMgZm9ybWF0
LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KLSAgICBEYXRhRm9ybWF0
IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0KLSAgICAv
LyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCi0gICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBp
eGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFy
YW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBv
bmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBieXRlc1BlclBpeGVs
ID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgZGF0YS5yZXNp
emUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKLQotICAgIHVuc2lnbmVkIGltYWdl
U2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsKLSAgICBjb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHVucGFja1BhcmFtcywgJmltYWdlU2l6
ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUluQnl0ZXMpOwotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKTsKLSAgICBpZiAo
c2tpcFNpemVJbkJ5dGVzKQotICAgICAgICBzcmNEYXRhICs9IHNraXBTaXplSW5CeXRlczsKLQot
ICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB1bnBhY2tQYXJh
bXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA6IHdpZHRoLCBoZWlnaHQsIElu
dFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEsIHVucGFja1BhcmFtcy5hbGlnbm1lbnQsIDAs
IGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5
IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWdu
ZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBmb3Jt
YXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4OgotICAg
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
Rzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBNDQ0NDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2X1M6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpEMTY6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OkJHUjg6Ci0gICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkE4X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjg6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QUJHUjg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIzMl9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8xMF8xMDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYxMUYxMUY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTk5OToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMTZfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMzI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyRjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEUzI0Xzg6Ci0gICAgICAgIHJldHVybiA0
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2X1M6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOgotICAgICAgICByZXR1cm4gNjsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2X1M6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSRzMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
MzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyRjoKLSAg
ICAgICAgcmV0dXJuIDg7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJfUzoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY6Ci0gICAgICAg
IHJldHVybiAxMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyX1M6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjoKLSAgICAgICAg
cmV0dXJuIDE2OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFja1BpeGVscyhjb25zdCB1aW50OF90KiBz
b3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZURh
dGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291cmNl
RGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQsIHVu
c2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlv
bkRhdGEsIGJvb2wgZmxpcFkpCi17Ci0gICAgQVNTRVJUKGRlcHRoID49IDEpOwotICAgIFVOVVNF
RF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0KTsgLy8gRGVyaXZlZCBmcm9tIHNvdXJjZURhdGFTdWJS
ZWN0YW5nbGUuaGVpZ2h0KCkuCi0gICAgaWYgKCF1bnBhY2tJbWFnZUhlaWdodCkKLSAgICAgICAg
dW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhlaWdodCgpOwotICAg
IGludCB2YWxpZFNyYyA9IHNvdXJjZURhdGFXaWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoc291
cmNlRGF0YUZvcm1hdCk7Ci0gICAgaW50IHJlbWFpbmRlciA9IHNvdXJjZVVucGFja0FsaWdubWVu
dCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAwOwotICAgIGludCBzcmNT
dHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgLSBy
ZW1haW5kZXIpIDogdmFsaWRTcmM7Ci0gICAgaW50IHNyY1Jvd09mZnNldCA9IHNvdXJjZURhdGFT
dWJSZWN0YW5nbGUueCgpICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3VyY2VEYXRhRm9ybWF0KTsK
LQotICAgIERhdGFGb3JtYXQgZHN0RGF0YUZvcm1hdCA9IGdldERhdGFGb3JtYXQoZGVzdGluYXRp
b25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSk7Ci0gICAgaW50IGRzdFN0cmlkZSA9IHNvdXJjZURh
dGFTdWJSZWN0YW5nbGUud2lkdGgoKSAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoZHN0RGF0YUZvcm1h
dCk7Ci0gICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uRGF0YSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRlICogKChkZXB0aCAqIHNv
dXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkpIC0gMSk7Ci0gICAgICAgIGRzdFN0cmlkZSA9
IC1kc3RTdHJpZGU7Ci0gICAgfQotICAgIGlmICghaGFzQWxwaGEoc291cmNlRGF0YUZvcm1hdCkg
fHwgIWhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFoYXNDb2xvcihkc3REYXRhRm9ybWF0
KSkKLSAgICAgICAgYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsKLQotICAgIGlmIChzb3Vy
Y2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9PSBBbHBoYU9wOjpEb05v
dGhpbmcpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogYmFzZVB0ciA9IHNvdXJjZURhdGEgKyBz
cmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLnkoKTsKLSAgICAgICAgY29uc3QgdWlu
dDhfdCogYmFzZUVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVj
dGFuZ2xlLm1heFkoKTsKLQotICAgICAgICAvLyBJZiBwYWNraW5nIG11bHRpcGxlIGltYWdlcyBp
bnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZsaXBZIGlzIHRydWUsCi0gICAgICAgIC8vIHRoZW4gdGhl
IHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZQotICAgICAgICAv
LyAiYm90dG9tbW9zdCIgb2YgdGhvc2UgaW1hZ2VzLiBTaW5jZSB0aGUgc291cmNlIHBvaW50ZXIg
c3RyaWRlcyBpbgotICAgICAgICAvLyB0aGUgcG9zaXRpdmUgZGlyZWN0aW9uLCB3ZSBuZWVkIHRv
IGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQgdGhlCi0gICAgICAgIC8vIGxhc3QsIG9yICJ0b3Btb3N0
Iiwgb2YgdGhlc2UgaW1hZ2VzLgotICAgICAgICBpZiAoZmxpcFkgJiYgZGVwdGggPiAxKSB7Ci0g
ICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgZGlzdGFuY2VUb1RvcEltYWdlID0gKGRlcHRoIC0g
MSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJbWFnZUhlaWdodDsKLSAgICAgICAgICAgIGJhc2VQdHIg
LT0gZGlzdGFuY2VUb1RvcEltYWdlOwotICAgICAgICAgICAgYmFzZUVuZCAtPSBkaXN0YW5jZVRv
VG9wSW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCByb3dTaXplID0gKGRzdFN0
cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOwotICAgICAgICB1aW50OF90KiBkc3Qg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKLQotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlcHRoOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHB0ciA9IGJhc2VQdHI7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBiYXNl
RW5kOwotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgewotICAgICAgICAgICAgICAg
IG1lbWNweShkc3QsIHB0ciArIHNyY1Jvd09mZnNldCwgcm93U2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgcHRyICs9IHNyY1N0cmlkZTsKLSAgICAgICAgICAgICAgICBkc3QgKz0gZHN0U3RyaWRlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFzZVB0ciArPSB1bnBhY2tJbWFnZUhlaWdodCAq
IHNyY1N0cmlkZTsKLSAgICAgICAgICAgIGJhc2VFbmQgKz0gdW5wYWNrSW1hZ2VIZWlnaHQgKiBz
cmNTdHJpZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Rm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcigKLSAgICAgICAgc291cmNlRGF0YVN1YlJlY3Rhbmds
ZSwgZGVwdGgsCi0gICAgICAgIHVucGFja0ltYWdlSGVpZ2h0LCBzb3VyY2VEYXRhLCBkZXN0aW5h
dGlvbkRhdGEsCi0gICAgICAgIHNyY1N0cmlkZSwgc3JjUm93T2Zmc2V0LCBkc3RTdHJpZGUpOwot
ICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZURhdGFGb3JtYXQsIGRzdERhdGFGb3JtYXQsIGFs
cGhhT3ApOwotICAgIGlmICghY29udmVydGVyLnN1Y2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggMjUyMTlmOGY1MzFjYWRhM2FiZjVkMGU0
MjE1MzM1YzEzNDcwZmUxOC4uNjk4OGJkNjljYTBmMDEwZmExYjY4ZjY2NTMwNzgzZWJmYzYzZjQx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTg3LDI5ICs4NywyMCBA
QCB0eXBlZGVmIFdURjo6SGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTsKIAotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0wKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgLCBwcml2YXRlIFdlYkdMTGF5ZXJDbGllbnQKICNlbmRpZgog
ewogcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0
dWFsIH5DbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBvc2l0ZSgpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ29udGV4dExvc3QoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCByZWN5Y2xlQ29udGV4dCgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSA9IDA7Ci0gICAgfTsKLQogICAg
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9u
OjpPZmZzY3JlZW4pOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCk7CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMPiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIHNoYXJlZENvbnRleHQp
OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9iajsgfQotICAgIFBsYXRmb3Jt
R0xPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90ZXh0
dXJlOyB9Ci0gICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xMYXllci5nZXQoKSk7IH0KKyAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KKyAgICBQbGF0Zm9ybUdMT2JqZWN0
IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdGV4dHVyZTsgfQorICAg
IENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5T2JqOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlnT2JqOyB9CiAgICAgc3RhdGljIEdDR0xl
bnVtIElPU3VyZmFjZVRleHR1cmVUYXJnZXQoKTsKQEAgLTEzMCw5ICsxMjEsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgcmVsZWFzZUN1cnJlbnRDb250ZXh0KFJlbGVhc2VCZWhhdmlvcik7
CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50
cy5hZGQoJmNsaWVudCk7IH0KLSAgICB2b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVudCkg
eyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9Ci0KICAgICAvLyBXaXRoIG11bHRpc2FtcGxp
bmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAKQEAgLTE0NSw4MSArMTMzLDExIEBAIHB1YmxpYzoKICAgICAv
LyBDb21waWxlIGEgc2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBBTkdMRS4KICAgICB2b2lk
IGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCk7CiAKLSAgICAvLyBIZWxwZXIg
dG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQg
dG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4K
LSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNl
dHRpbmcuCi0gICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQgPSA0KTsKLQotICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycyBmb3Ig
dGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgotICAgIC8vCi0KLSAgICBzdHJ1
Y3QgUGl4ZWxTdG9yZVBhcmFtcyBmaW5hbCB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJhbXMoKTsK
LQotICAgICAgICBHQ0dMaW50IGFsaWdubWVudDsKLSAgICAgICAgR0NHTGludCByb3dMZW5ndGg7
Ci0gICAgICAgIEdDR0xpbnQgaW1hZ2VIZWlnaHQ7Ci0gICAgICAgIEdDR0xpbnQgc2tpcFBpeGVs
czsKLSAgICAgICAgR0NHTGludCBza2lwUm93czsKLSAgICAgICAgR0NHTGludCBza2lwSW1hZ2Vz
OwotICAgIH07Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBwZXIgcGl4ZWwgYW5k
IGJ5dGVzIHBlciBjb21wb25lbnQKLSAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlw
ZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgotICAgIC8vIGVpdGhlciB3YXMgYW4gaW52
YWxpZCBlbnVtLgotICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVy
cyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIHVuc2ln
bmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsCi0gICAgICAgIHVuc2lnbmVkKiBieXRlc1BlckNvbXBv
bmVudCk7Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFk
ZGluZ0luQnl0ZXMgaXMgbm90IG51bGwsIHBhZGRpbmcKLSAgICAvLyBpcyBhbHNvIGNhbGN1bGF0
ZWQgaW4gcmV0dXJuLiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWQsIG90aGVyd2lzZQotICAg
IC8vIHJldHVybiB0aGUgc3VnZ2VzdGVkIEdMIGVycm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9m
IHRoZSBmYWlsdXJlOgotICAgIC8vICAgSU5WQUxJRF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMg
bmVnYXRpdmUgb3Igb3ZlcmZsb3cgaGFwcGVucy4KLSAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBm
b3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgotICAgIHN0YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAg
ICAgIEdDR0xzaXplaSB3aWR0aCwKLSAgICAgICAgR0NHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
R0NHTHNpemVpIGRlcHRoLAotICAgICAgICBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwKLSAgICAg
ICAgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsCi0gICAgICAgIHVuc2lnbmVkKiBwYWRkaW5n
SW5CeXRlcywKLSAgICAgICAgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7Ci0KICNpZiAhVVNF
KEFOR0xFKQotICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFs
Rm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51
bSYgdHlwZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKKyAgICBib29sIHRleEltYWdlMkRSZXNv
dXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQp
IGZpbmFsOworI2VuZGlmCiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdp
dmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAotICAgIC8vIHBhY2tpbmcgdGhl
IHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCi0gICAg
Ly8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1
cm5zIHRydWUKLSAgICAvLyB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFjdElt
YWdlRGF0YShJbWFnZURhdGEqLAotICAgICAgICBEYXRhRm9ybWF0LAotICAgICAgICBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwKLSAgICAgICAgaW50IGRlcHRoLAotICAg
ICAgICBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsCi0gICAgICAgIEdDR0xlbnVtIGZvcm1hdCwKLSAg
ICAgICAgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhLAotICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1
cmUKLSAgICAvLyBkYXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEg
cGFyYW1ldGVycy4KLSAgICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgdGlnaHRseSBwYWNrZWQgYWNj
b3JkaW5nIHRvIHRoZSBwYXNzZWQKLSAgICAvLyB1bnBhY2tQYXJhbXMsIHRoZSBvdXRwdXQgZGF0
YSB3aWxsIGJlIHRpZ2h0bHkgcGFja2VkLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNz
ZnVsLCBmYWxzZSBpZiBhbnkgZXJyb3Igb2NjdXJyZWQuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFj
dFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAgIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgY29uc3QgUGl4ZWxTdG9yZVBh
cmFtcyYgdW5wYWNrUGFyYW1zLAotICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5
QWxwaGEsCi0gICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKIAog
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCkBAIC01
MzcsNyArNDU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRCdWZmZXJzVG9BdXRvQ2xlYXIo
KTsKICAgICB2b2lkIHNldEJ1ZmZlcnNUb0F1dG9DbGVhcihHQ0dMYml0ZmllbGQpOwogICAgIEdD
R0xiaXRmaWVsZCBnZXRCdWZmZXJzVG9BdXRvQ2xlYXIoKSBjb25zdDsKLSAgICB2b2lkIGVuYWJs
ZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxlUHJlc2Vy
dmVEcmF3aW5nQnVmZmVyKCkgZmluYWw7CiAKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKICAgICB2b2lkIHNpbXVsYXRlQ29udGV4dENoYW5nZWQoKTsKQEAg
LTU1MCwxNyArNDY4LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRl
eChHQ0dMdWludCkgZmluYWw7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJv
b2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1
ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1
ZmZlcik7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBQTEFURk9S
TShNQUMpCiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKLSNlbmRpZiAvLyBQ
TEFURk9STShDT0NPQSkKIAotICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7Cisg
ICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsKIAotICAgIEdyYXBoaWNz
Q29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9CisgICAg
R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNy
ZWF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3Jl
YXRpb247IH0KIAogICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRp
b24KICAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIGZpbmFsOwpAQCAtNTc3LDE1
ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCkgZmluYWw7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFs
OwogCi0gICAgLy8gU3ludGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0
dXJuZWQgZnJvbSBhCi0gICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2Vk
IHRvIGVtdWxhdGUgT3BlbkdMIEVTCi0gICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9w
IGFuZCB0byBlbmZvcmNlIGFkZGl0aW9uYWwgZXJyb3IKLSAgICAvLyBjaGVja2luZyBtYW5kYXRl
ZCBieSBXZWJHTC4KLSAgICAvLwotICAgIC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJv
ciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBvbmUKLSAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4g
ZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0gZnJvbSBjYWxscyB0bwotICAgIC8vIGdldEVycm9yIGlu
IHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihH
Q0dMZW51bSBlcnJvcik7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJv
cikgZmluYWw7CiAKICAgICAvLyBSZWFkIHJlYWwgT3BlbkdMIGVycm9ycywgYW5kIG1vdmUgdGhl
bSB0byB0aGUgc3ludGhldGljCiAgICAgLy8gZXJyb3IgbGlzdC4gUmV0dXJuIHRydWUgaWYgYXQg
bGVhc3Qgb25lIGVycm9yIGlzIG1vdmVkLgpAQCAtNTk3LDU5ICs1MDMsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gZGV0ZXJtaW5lIHRoaXMuCiAgICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkg
ZmluYWw7CiAKLSAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7
Ci0KLSAgICAvLyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlz
IHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yCi0gICAgLy8gYWNjb3Jk
aW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBh
bmQgQWxwaGFPcCBmbGFncy4KLSAgICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAg
IHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZv
cm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNv
dXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
aW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFn
ZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIGNsYXNzIEltYWdlRXh0cmFj
dG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgRE9NU291
cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLQotICAg
ICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0
aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3VyY2VzCi0gICAgICAgIC8v
IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgotICAgICAgICB+SW1hZ2VFeHRy
YWN0b3IoKTsKLQotICAgICAgICBib29sIGV4dHJhY3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4
dHJhY3RTdWNjZWVkZWQ7IH0KLSAgICAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEoKSB7
IHJldHVybiBtX2ltYWdlUGl4ZWxEYXRhOyB9Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlV2lkdGgo
KSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KLSAgICAgICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQo
KSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9Ci0gICAgICAgIERhdGFGb3JtYXQgaW1hZ2VTb3Vy
Y2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0OyB9Ci0gICAgICAgIEFscGhh
T3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9Ci0gICAgICAgIHVuc2lnbmVk
IGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFj
a0FsaWdubWVudDsgfQotICAgICAgICBET01Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlKCkgeyBy
ZXR1cm4gbV9pbWFnZUh0bWxEb21Tb3VyY2U7IH0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBF
YWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhv
ZC4KLSAgICAgICAgLy8gRXh0cmFjdHMgdGhlIGltYWdlIGFuZCBrZWVwcyB0cmFjayBvZiBpdHMg
c3RhdHVzLCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsIFNvdXJjZSBBbGlnbm1lbnQsIGZvcm1hdCBh
bmQgQWxwaGFPcCBldGMsCi0gICAgICAgIC8vIG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBv
ciByZWxldmFudCBkYXRhIGlmIG5lZWRlZCBhbmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcwot
ICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7Ci0jZWxpZiBVU0UoQ0cpCi0gICAgICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBt
X2RlY29kZWRJbWFnZTsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9waXhlbERhdGE7
Ci0gICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXplZFJHQkE4RGF0YTsKLSNl
bmRpZgotICAgICAgICBJbWFnZSogbV9pbWFnZTsKLSAgICAgICAgRE9NU291cmNlIG1faW1hZ2VI
dG1sRG9tU291cmNlOwotICAgICAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKLSAgICAgICAg
Y29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZVdp
ZHRoOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OwotICAgICAgICBEYXRhRm9ybWF0
IG1faW1hZ2VTb3VyY2VGb3JtYXQ7Ci0gICAgICAgIEFscGhhT3AgbV9hbHBoYU9wOwotICAgICAg
ICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OwotICAgIH07Ci0KLSAgICB2
b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFpbE5leHRTdGF0dXNDaGVjayA9
IHRydWU7IH0KKyAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSBmaW5hbCB7IG1f
ZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7IH0KIAotICAgIEdDR0xlbnVtIGFjdGl2ZVRleHR1
cmVVbml0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsgfQotICAg
IEdDR0xlbnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKTsgfQotICAgIEdDR0xlbnVtIGN1cnJlbnRCb3VuZFRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KICAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTY1
NywxNyArNTEyLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcmVlbkRpZENoYW5nZShQbGF0Zm9y
bURpc3BsYXlJRCk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKTsKKyAg
ICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwogCi0gICAgLy8gSGVscGVyIGZvciBw
YWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVEYXRhIHdoaWNoIGlt
cGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCi0gICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQg
T3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KLSAgICAvLyBBIHNvdXJjZVVucGFj
a0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UKLSAgICAvLyBkYXRh
IGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGgu
Ci0gICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVuIHJvd3Mu
Ci0gICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZURhdGFXaWR0aCwgdW5z
aWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlRGF0YVN1YlJlY3Rh
bmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBh
Y2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3Rp
bmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKTsK
IAogICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQg
Y3JlYXRpb24gYXR0cmlidXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFu
dGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgpAQCAtNjk1LDEzICs1NDQsMTIg
QEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGJvb2wgYWxsb3dPZmZsaW5l
UmVuZGVyZXJzKCkgY29uc3Q7CisgICAgYm9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmco
KTsKKyAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKICAgICAvLyBXZWJHTExheWVyQ2xpZW50
IG92ZXJyaWRlcy4KLSAgICB2b2lkIGRpZERpc3BsYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZERpc3BsYXkoKSBmaW5hbDsKICNlbmRpZgogCi0gICAgaW50IG1fY3VycmVudFdpZHRoIHsgMCB9
OwotICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07Ci0KICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwogICAgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwpAQCAtODg4LDggKzczNiw2
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZT4gbV9wcml2YXRlOwogI2VuZGlmCiAKLSAgICBIYXNoU2V0PENsaWVudCo+IG1fY2xp
ZW50czsKLQogICAgIGJvb2wgbV9pc0ZvcldlYkdMMiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Vz
aW5nQ29yZVByb2ZpbGUgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRleCA3NDFlZTRjMTRlYWEyNjZhNzlmZWI3ZDEyMDYyYWFh
YTNjZWI1MWUwLi5iMTRiNjJkNWU0ZmJlYThlYTJjODc4NTZlN2JmZWQ2YjhkMzg2N2IyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTQyNSwx
MSArNDI1LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNo
KFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGEKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVU
ZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKaW5kZXggOWVmNTMxZWJmOTQyMjg5NDhl
MDNjODYyMzQ0ZTRhNjhhZmRlMmIxZS4uYjE0M2YxZDkzOTgzNjE5ZGZmNjI1YzExZjM2NjAxYTcy
NDUwODhmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtMjksMTUg
KzI5LDE2IEBACiAjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShESVJFQ1Qy
RCkKIAogI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPGQy
ZDEuaD4KICNpbmNsdWRlIDxkMmQxZWZmZWN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9y
KCkgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6fkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2
ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVs
dGlwbGljYXRpb24pCiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411554</attachid>
            <date>2020-10-16 04:18:30 -0700</date>
            <delta_ts>2020-10-16 04:24:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201016141828.patch</filename>
            <type>text/plain</type>
            <size>313489</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGExNmIwMzE3ZWViYTRl
ZDYwOGQxNTE3ODY0NmM1MDNhZWNhMWVmMS4uOTE4MmZkYjlmYjhiNGU0MTlhOWRkYzQ3YjkwZDA0
OGJhOWVjNjgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0OSBAQAorMjAyMC0xMC0xNiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdMIHBhcnQgMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjEwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBE
ZWFuIEphY2tzb24uCisKKyAgICAgICAgUGFydCAyIG9mIHdvcmsgdG93YXJkcyBXZWJHTCBpbXBs
ZW1lbnRhdGlvbiB3aGljaCB1c2VzCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0
IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBj
b25jcmV0ZSBjbGFzcy4KKworICAgICAgICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKSB0bworICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5j
dGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFs
bCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0
byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNlcyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBD
aGVjayBhbGwgcmV0dXJuIHZhbHVlcyBvZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAg
ICAgc2hvdWxkIG5vdCBjYWxsIGludG8gT3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJy
ZW50LAorICAgICAgICBhcyB0aGF0IGNhbiBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3Ig
aW5jb3JyZWN0IHJlc3VsdHMuCisgICAgICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQg
Zmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBv
bmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVu
Y3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhlIG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1
bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGludG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3Qg
ZWZmb3J0IG1hbm5lci4KKworICAgICAgICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRp
cmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAg
ICAgdGhyb3VnaCBnZXRFeHRlbnNpb25zKCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRp
b25hbCBjb2RlCisgICAgICAgIGluc2lkZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4
YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8KKyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4g
VGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24gYmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dMLCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJh
Y3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQg
dG8KKyAgICAgICAgdHdvLiBUaGlzIGlzIHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCwKKyAgICAgICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBp
biB0aGlzIHJlZ2FyZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVy
dGV4QXR0cmliMCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9u
c0dMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBv
cnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJs
aXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Rmxv
YXR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1
ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEludGVnZXJpX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmli
SXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBh
cmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEZyYW1lYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlz
YW1wbGVmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdM
RVJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFk
blBpeGVsc1JvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVz
dEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVy
UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVu
ZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
QnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1
cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVy
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5j
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmpl
Y3R1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3gyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VY
VCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZF
WFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3Jt
aXZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJh
eXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVk
U2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3Yp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlC
dWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5tYXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisKKzIwMjAtMTAt
MTUgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZh
Y3RvciBXZWJHTCBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb25seSBHcmFwaGljc0NvbnRleHRHTCBw
YXJ0IDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NzIxMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk4NzYxMDU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIFBhcnQgMSBvZiB3b3JrIHRvd2FyZHMgV2Vi
R0wgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcworICAgICAgICBHcmFwaGljc0NvbnRleHRHTCBh
YnN0cmFjdCBiYXNlIGNsYXNzIGluc3RlYWQgb2YKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wgY29uY3JldGUgY2xhc3MuCisKKyAgICAgICAgTW92ZSBwaXhlbCBkYXRhIHJlbGF0ZWQg
c3RhdGljIGhlbHBlciBmdW5jaW9ucyBmcm9tCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIHRvIEdyYXBoaWNzQ29udGV4dEdMLiBUaGVzZSBhcmUKKyAgICAgICAgbm9ybWFsIHBpeGVs
IGZvcm1hdCBjYWxjdWxhdGlvbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgaGF2ZQorICAgICAgICBj
b25jcmV0ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBNb3ZlIHBpeGVsIHBhY2sgcmVs
YXRlZAorICAgICAgICBzdHJ1Y3R1cmVzIHRvIEdyYXBoaWNzQ29udGV4dEdMLgorCisgICAgICAg
IFJlbmFtZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgdG8KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci4gVGhlIEdyYXBoaWNzQ29udGV4dEdM
IGNsYXNzCisgICAgICAgIGludGVyZmFjZSBpcyBhbHJlYWR5IHF1aXRlIGxlbmd0aHkgYW5kIHRo
ZSBpbWFnZSBleHRyYWN0b3IKKyAgICAgICAgaXMgbm90IHZlcnkgdGllZCB0byB0aGUgY29udGV4
dCBjbGFzcy4KKworICAgICAgICBJbnRyb2R1Y2UgYSB2aXJ0dWFsIG1lbWJlciBmdW5jdGlvbiBp
biBHcmFwaGljc0NvbnRleHRHTCBmb3IKKyAgICAgICAgZWFjaCBjYWxsIHRoYXQgaXMgbGlrZWx5
IG5lZWRlZCBmb3IgdGhlIFdlYkdMIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgYSByZWZhY3Rvci4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhY2tQaXhl
bFN0b3JlUGFyYW1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlQXJyYXlCdWZmZXJWaWV3SGVscGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxT
dG9yZVBhcmFtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0
YUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXhlbEJ5dGVzRm9yRm9ybWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVy
bmFsRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpwYWNrSW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0SW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjpleHRyYWN0VGV4
dHVyZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50Ojp+Q2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMOjphZGRDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OnJlbW92ZUNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TEltYWdlRXh0cmFjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdFN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjppbWFnZVBpeGVsRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjppbWFnZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6Omlt
YWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3I6OmltYWdlU291cmNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmltYWdlQWxwaGFPcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjppbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjpp
bWFnZUh0bWxEb21Tb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisKIDIw
MjAtMTAtMTYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBHUFVQcm9jZXNzIFdlYkF1ZGlvIG1lZGlhIGVsZW1lbnQgcHJvdmlkZXJz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IGFlZjFiNjIzMjEyNWUzNjQ5YjkwZjQzZGUzODk2YTlkMGNhYzdh
ZDkuLjA0OTY4MjFlMTNlZmUyNTdmMTNiODYzYjBhMWY1ZWVkYjAxMmQzNjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xODk1LDYgKzE4OTUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJU
cmFuc2Zvcm0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZGJkZmYzNDk3YjA0NzdlNzU5MzM1NTRjOWE3Njg0NmNmM2I3YzM1
ZC4uOGRjZmFlNTEzOTA1OWUzZWMwY2QxNzEwOTlhNzdmNDM3MWM0NDRjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjIxOCw2
ICsyMjE4LDcgQEAKIAkJN0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIy
MEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkIzNEEx
NTI1MzQ1NzkxMDAwMjlEMDggLyogV2ViR0xMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JCMzRBMTMyNTM0NTc5MTAwMDI5RDA4IC8q
IFdlYkdMTGF5ZXJDbGllbnQuaCAqLzsgfTsKIAkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8q
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmggKi87IH07CisJCTdCQjM0QTQ4MjUzNzc2Q0Ew
MDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkIzNEE0NTI1Mzc3NkM2MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdCRTc0MjczODFGQTkwNkZCQjRGMEYy
QyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8qIEpTU1ZHR3JhcGhp
Y3NFbGVtZW50LmggKi87IH07CiAJCTdDMDI5QzZFMjQ5M0M4RjgwMDI2ODIwNCAvKiBDb2xvclR5
cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAy
OUM2RDI0OTNDOEY4MDAyNjgyMDQgLyogQ29sb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAv
KiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMDcwLDYgKzEwMDcxLDggQEAK
IAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0JCMzRBMTMyNTM0NTc5MTAwMDI5RDA4IC8qIFdlYkdMTGF5ZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xMYXllckNsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkIzNEExNjI1MzQ1Q0IyMDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFVXRpbGl0aWVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JC
MzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNEMjRGQUQzNjAwMDVCRUYx
MCAvKiBTZXR0aW5ncy5jcHAuZXJiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNldHRpbmdzLmNwcC5lcmI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDMDExRjNFMjRGQUQzNjAwMDVCRUYxMCAvKiBJbnRlcm5hbFNl
dHRpbmdzR2VuZXJhdGVkLmNwcC5lcmIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5j
cHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYzRjI0RkFEMzYwMDA1
QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5pZGwuZXJiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuaWRsLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI2MTQ2LDYgKzI2MTQ5LDggQEAKIAkJCQkzMTNERTg2RDIzQTk2OTY2MDA4RkM0N0IgLyogR3Jh
cGhpY3NDb250ZXh0R0wuY3BwICovLAogCQkJCTMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAvKiBH
cmFwaGljc0NvbnRleHRHTC5oICovLAogCQkJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLywKKwkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAw
MjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCisJCQkJN0JC
MzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Iu
aCAqLywKIAkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgKi8sCiAJCQkJMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4
dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXll
ci5jcHAgKi8sCkBAIC0zMTYyMiw2ICszMTYyNyw3IEBACiAJCQkJMzEzREU4NzAyM0E5Njk3MzAw
OEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QkIzNEEx
NzI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MzMzBBMDIxREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JCMzRBNDgyNTM3NzZDQTAw
MDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQ0I5RTky
Mzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCA2MDQ0M2IzMDNmMzdiMWRiNmNhMWM0ZDI5ZDczZTc5YmViNmNkNDU3Li42
ZTBjZmY2ODNmODdmMjgzNmMyMGQ0YmQxMzExZjVkZGY4ZjJiMzc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAt
MzAwMiw5ICszMDAyLDkgQEAgR0NHTHVpbnQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6bWF4VHJh
bnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUF0dHJpYnMoKSBjb25zdAogICAgIHJldHVybiBtX21heFRy
YW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVBdHRyaWJzOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYWNrUGl4
ZWxTdG9yZVBhcmFtcygpIGNvbnN0CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0
b3JlUGFyYW1zIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhY2tQaXhlbFN0b3JlUGFyYW1z
KCkgY29uc3QKIHsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFt
cyBwYXJhbXM7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgcGFyYW1zLmFsaWdu
bWVudCA9IG1fcGFja0FsaWdubWVudDsKICAgICBwYXJhbXMucm93TGVuZ3RoID0gbV9wYWNrUm93
TGVuZ3RoOwogICAgIHBhcmFtcy5za2lwUGl4ZWxzID0gbV9wYWNrU2tpcFBpeGVsczsKQEAgLTMw
MTIsOSArMzAxMiw5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1z
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhY2tQaXhlbFN0CiAgICAgcmV0dXJuIHBhcmFt
czsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVu
c2lvbiBkaW1lbnNpb24pIGNvbnN0CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0
b3JlUGFyYW1zIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFVucGFja1BpeGVsU3RvcmVQYXJh
bXMoVGV4SW1hZ2VEaW1lbnNpb24gZGltZW5zaW9uKSBjb25zdAogewotICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICBQaXhlbFN0b3JlUGFy
YW1zIHBhcmFtczsKICAgICBwYXJhbXMuYWxpZ25tZW50ID0gbV91bnBhY2tBbGlnbm1lbnQ7CiAg
ICAgcGFyYW1zLnJvd0xlbmd0aCA9IG1fdW5wYWNrUm93TGVuZ3RoOwogICAgIHBhcmFtcy5za2lw
UGl4ZWxzID0gbV91bnBhY2tTa2lwUGl4ZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDUwM2M1MGQ3NzI0NDI5Nzcw
Y2E4YWRlZTU4NmU1N2FjYzVmNzFkZjQuLmJlY2QyOTNiMWQ2ZDA2ZWI1ODJhNWUwYTQxMzAwZjJj
ZGFlOTI1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmgKQEAgLTI1Niw4ICsyNTYsOCBAQCBwdWJsaWM6CiAKICAgICBHQ0dM
dWludCBtYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQXR0cmlicygpIGNvbnN0OwogCi0gICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFja1BpeGVsU3Rv
cmVQYXJhbXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
UGl4ZWxTdG9yZVBhcmFtcyBnZXRVbnBhY2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5z
aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBQaXhlbFN0b3JlUGFyYW1zIGdldFBhY2tQaXhlbFN0
b3JlUGFyYW1zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGl4ZWxTdG9yZVBhcmFtcyBnZXRVbnBh
Y2tQaXhlbFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIGJvb2wgY2hlY2tBbmRUcmFuc2xhdGVBdHRhY2htZW50cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDR0xlbnVtLCBWZWN0b3I8R0NHTGVudW0+Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5k
ZXggNzc2OTM5MzgxZjZjYTAzMjBkYzUzOWY1MzM4ZWY5ZDc3MTg0NGI0OS4uYjM2ZGUxNDYyZTVj
ZDExZjVlYWE3ZjQ4MWM1OGFmMmZjMmUxOTIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTUwLDYg
KzUwLDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVt
ZW50LmgiCkBAIC03MTAsNyArNzExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZShDYW4KICAgICB9
CiAKICAgICBhdXRvIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKGF0
dHJpYnV0ZXMsIGhvc3RXaW5kb3cpOwotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgaWYgKGNh
bnZhc0VsZW1lbnQpIHsKICAgICAgICAgICAgIGNhbnZhc0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQo
V2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRp
b25lcnJvckV2ZW50LAogICAgICAgICAgICAgICAgIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVu
dDo6SXNDYW5jZWxhYmxlOjpZZXMsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4i
KSk7CkBAIC00MzQ4LDkgKzQzNDksMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgKICAgICB2
b2lkKiBkYXRhID0gcGl4ZWxzLmJhc2VBZGRyZXNzKCk7CiAKICNpZiBVU0UoQU5HTEUpCi0gICAg
ICAgIEdDR0xzaXplaSBsZW5ndGgsIGNvbHVtbnMsIHJvd3M7Ci0gICAgICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCAmbGVuZ3RoLCAmY29sdW1ucywgJnJvd3MsIGRhdGEsIGZh
bHNlKTsKKyAgICBHQ0dMc2l6ZWkgbGVuZ3RoID0gMDsKKyAgICBHQ0dMc2l6ZWkgY29sdW1ucyA9
IDA7CisgICAgR0NHTHNpemVpIHJvd3MgPSAwOworICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCAmbGVuZ3RoLCAmY29sdW1ucywgJnJvd3MsIGRhdGEs
IGZhbHNlKTsKICNlbHNlCiAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQogICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5ieXRlTGVuZ3RoKCksIGRhdGEpOwpAQCAt
NDg4OCw3ICs0ODkwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFn
ZUFycmF5QnVmZmVyVmlld0hlbHBlcihUZXhJbWFnZUZ1bmN0aW9uSUQKICAgICAgICAgQVNTRVJU
KHNvdXJjZVR5cGUgPT0gVGV4SW1hZ2VEaW1lbnNpb246OlRleDJEKTsKICAgICAgICAgLy8gT25s
eSBlbnRlciBoZXJlIGlmIHdpZHRoIG9yIGhlaWdodCBpcyBub24temVyby4gT3RoZXJ3aXNlLCBj
YWxsIHRvIHRoZQogICAgICAgICAvLyB1bmRlcmx5aW5nIGRyaXZlciB0byBnZW5lcmF0ZSBhcHBy
b3ByaWF0ZSBHTCBlcnJvcnMgaWYgbmVlZGVkLgotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyB1bnBhY2tQYXJhbXMgPSBnZXRVbnBhY2tQaXhlbFN0b3Jl
UGFyYW1zKFRleEltYWdlRGltZW5zaW9uOjpUZXgyRCk7CisgICAgICAgIFBpeGVsU3RvcmVQYXJh
bXMgdW5wYWNrUGFyYW1zID0gZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVu
c2lvbjo6VGV4MkQpOwogICAgICAgICBHQ0dMaW50IGRhdGFTdG9yZVdpZHRoID0gdW5wYWNrUGFy
YW1zLnJvd0xlbmd0aCA/IHVucGFja1BhcmFtcy5yb3dMZW5ndGggOiB3aWR0aDsKICAgICAgICAg
aWYgKHVucGFja1BhcmFtcy5za2lwUGl4ZWxzICsgd2lkdGggPiBkYXRhU3RvcmVXaWR0aCkgewog
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJJbnZhbGlkIHVucGFjayBwYXJhbXMgY29tYmluYXRp
b24uIik7CkBAIC00OTQ1LDcgKzQ5NDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleEltYWdlSW1wbChUZXhJbWFnZUZ1bmN0aW9uSUQgZnVuY3Rpb25JRCwgR0NHTAogICAg
IGlmIChtX3VucGFja0ZsaXBZKQogICAgICAgICBhZGp1c3RlZFNvdXJjZUltYWdlUmVjdC5zZXRZ
KGltYWdlLT5oZWlnaHQoKSAtIGFkanVzdGVkU291cmNlSW1hZ2VSZWN0Lm1heFkoKSk7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3Io
aW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29u
dmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSwgaWdub3JlTmF0aXZlSW1hZ2VBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
IGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUsIGlnbm9y
ZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgaWYgKCFpbWFnZUV4dHJh
Y3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBpbWFnZSBk
YXRhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTYzMDcsMTcgKzYzMDksMTcgQEAgUmVmUHRyPElu
dDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdMSW50QXJyYXlQYXJh
bWV0ZXIoR0NHTGVudW0KICAgICByZXR1cm4gSW50MzJBcnJheTo6dHJ5Q3JlYXRlKHZhbHVlLCBs
ZW5ndGgpOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYWNrUGl4ZWxTdG9yZVBhcmFtcygpIGNvbnN0
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpQaXhlbFN0b3JlUGFyYW1zIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFBhY2tQaXhlbFN0b3JlUGFyYW1zKCkgY29uc3QKIHsKLSAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CisgICAgUGl4
ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgcGFyYW1zLmFsaWdubWVudCA9IG1fcGFja0FsaWdu
bWVudDsKICAgICByZXR1cm4gcGFyYW1zOwogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
UGl4ZWxTdG9yZVBhcmFtcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnBhY2tQaXhl
bFN0b3JlUGFyYW1zKFRleEltYWdlRGltZW5zaW9uIGRpbWVuc2lvbikgY29uc3QKK1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OlBpeGVsU3RvcmVQYXJhbXMgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbiBkaW1lbnNp
b24pIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BBUkFNKGRpbWVuc2lvbik7Ci0gICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgcGFyYW1zOworICAgIFBpeGVsU3RvcmVQ
YXJhbXMgcGFyYW1zOwogICAgIHBhcmFtcy5hbGlnbm1lbnQgPSBtX3VucGFja0FsaWdubWVudDsK
ICAgICByZXR1cm4gcGFyYW1zOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCmluZGV4IDIwNmFjZTM1NTBhYjlhMTYz
MWM1MzUzNjRmYWMxOTIzZjg1NWViZWUuLmUyYTA3YTViYzU2ZGEwMjRkYWUwMjExN2NmNzNiZmI0
NDk3Zjk3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKQEAgLTg1MSw5ICs4NTEsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXpl
aSBieXRlTGVuZ3RoLCBjb25zdCB2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
REJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdD
R0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6
ZWkgYnl0ZUxlbmd0aCwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKICAgICBzdGF0aWMgY29uc3QgY2hh
ciogZ2V0VGV4SW1hZ2VGdW5jdGlvbk5hbWUoVGV4SW1hZ2VGdW5jdGlvbklEKTsKLQotICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBpeGVsU3RvcmVQYXJhbXMgZ2V0UGFja1Bp
eGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpQaXhlbFN0b3JlUGFyYW1zIGdldFVucGFja1BpeGVsU3RvcmVQYXJhbXMoVGV4SW1hZ2VE
aW1lbnNpb24pIGNvbnN0OworICAgIHVzaW5nIFBpeGVsU3RvcmVQYXJhbXMgPSBHcmFwaGljc0Nv
bnRleHRHTDo6UGl4ZWxTdG9yZVBhcmFtczsKKyAgICB2aXJ0dWFsIFBpeGVsU3RvcmVQYXJhbXMg
Z2V0UGFja1BpeGVsU3RvcmVQYXJhbXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBpeGVsU3RvcmVQ
YXJhbXMgZ2V0VW5wYWNrUGl4ZWxTdG9yZVBhcmFtcyhUZXhJbWFnZURpbWVuc2lvbikgY29uc3Q7
CiAKICNpZiAhVVNFKEFOR0xFKQogICAgIGJvb2wgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNv
bnN0IGNoYXIqLCBib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCAxNmNjMTBjNzdlMmY2NmRlMGFhNzk4
MDM5Yjc4MzY0ZWE5NmRmODc5Li5hMTZmNThkYjNhNDBhNGFlNTdmZjlhN2FjMTE1OGQ3ODcxYTNl
ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuY3BwCkBAIC0zMSw5ICszMSwzNzkgQEAKICNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorI2luY2x1ZGUgIkZv
cm1hdENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdDR0xl
bnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHQ0dMZW51bSBkZXN0aW5hdGlvblR5cGUpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OworICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICAgICAgc3dpdGNoIChkZXN0aW5h
dGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4X1M7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4X1M7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4X1M7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBX0lOVEVHRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQ
SEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RUQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHODsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZv
cm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZf
UzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHMTZfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZfUzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25G
b3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVDoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpEMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZv
cm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJf
UzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R19JTlRFR0VSOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHMzJfUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMl9TOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJfUzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9y
bWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9DT01QT05FTlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6RDMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTMyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9m
bG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6CisgICAgICAgIHN3
aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkcxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgorICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2
RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9m
bG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMzJGOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5B
TkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05F
TlQ6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6RDMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0I1NjU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVW
OgorICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
MTBGMTFGMTFGOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8xMF8xMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBkc3RGb3JtYXQ7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIHVuc2lnbmVkIHRleGVs
Qnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjhfUzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODoKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHOF9TOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpBUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTU1NTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTQ0NDQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6RDE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjhfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4Ogor
ICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOF9T
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlIzMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSMzJfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTJfMTBfMTBfMTA6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTBGMTFGMTFGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU5OTk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkcxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzE2X1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukcx
NkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RDMyOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkQzMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6RFMyNF84OgorICAgICAgICByZXR1cm4gNDsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkczMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyX1M6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY6CisgICAgICAgIHJl
dHVybiA4OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyX1M6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOgorICAgICAgICByZXR1cm4g
MTI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9TOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY6CisgICAgICAgIHJldHVybiAx
NjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKworLy8gSGVs
cGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVEYXRh
IHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCisvLyBkYXRhIGludG8gdGhlIHNwZWNp
ZmllZCBPcGVuR0wgZGVzdGluYXRpb24gZm9ybWF0IGFuZCB0eXBlLgorLy8gQSBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCisvLyBkYXRhIGlz
IHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGguCisv
LyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KK3N0YXRp
YyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgc291cmNlRGF0YVdp
ZHRoLCB1bnNpZ25lZCBzb3VyY2VEYXRhSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VEYXRh
U3ViUmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwg
aW50IHVucGFja0ltYWdlSGVpZ2h0LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWdu
ZWQgZGVzdGluYXRpb25UeXBlLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wLCB2
b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUKGRlcHRoID49
IDEpOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0KTsgLy8gRGVyaXZlZCBmcm9t
IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkuCisgICAgaWYgKCF1bnBhY2tJbWFnZUhl
aWdodCkKKyAgICAgICAgdW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xl
LmhlaWdodCgpOworICAgIGludCB2YWxpZFNyYyA9IHNvdXJjZURhdGFXaWR0aCAqIHRleGVsQnl0
ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisgICAgaW50IHJlbWFpbmRlciA9IHNvdXJj
ZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAw
OworICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7CisgICAgaW50IHNyY1Jvd09mZnNl
dCA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUueCgpICogdGV4ZWxCeXRlc0ZvckZvcm1hdChzb3Vy
Y2VEYXRhRm9ybWF0KTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdERh
dGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5
cGUpOworICAgIGludCBkc3RTdHJpZGUgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLndpZHRoKCkg
KiB0ZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFGb3JtYXQpOworICAgIGlmIChmbGlwWSkgewor
ICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRp
b25EYXRhKSArIGRzdFN0cmlkZSAqICgoZGVwdGggKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLmhl
aWdodCgpKSAtIDEpOworICAgICAgICBkc3RTdHJpZGUgPSAtZHN0U3RyaWRlOworICAgIH0KKyAg
ICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMOjpoYXNBbHBoYShzb3VyY2VEYXRhRm9ybWF0KSB8fCAh
R3JhcGhpY3NDb250ZXh0R0w6Omhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFHcmFwaGlj
c0NvbnRleHRHTDo6aGFzQ29sb3IoZHN0RGF0YUZvcm1hdCkpCisgICAgICAgIGFscGhhT3AgPSBH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nOworCisgICAgaWYgKHNvdXJjZURh
dGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1hdCAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dEdM
OjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogYmFzZVB0ciA9
IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLnkoKTsKKyAg
ICAgICAgY29uc3QgdWludDhfdCogYmFzZUVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBz
b3VyY2VEYXRhU3ViUmVjdGFuZ2xlLm1heFkoKTsKKworICAgICAgICAvLyBJZiBwYWNraW5nIG11
bHRpcGxlIGltYWdlcyBpbnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZsaXBZIGlzIHRydWUsCisgICAg
ICAgIC8vIHRoZW4gdGhlIHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9m
IHRoZQorICAgICAgICAvLyAiYm90dG9tbW9zdCIgb2YgdGhvc2UgaW1hZ2VzLiBTaW5jZSB0aGUg
c291cmNlIHBvaW50ZXIgc3RyaWRlcyBpbgorICAgICAgICAvLyB0aGUgcG9zaXRpdmUgZGlyZWN0
aW9uLCB3ZSBuZWVkIHRvIGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQgdGhlCisgICAgICAgIC8vIGxh
c3QsIG9yICJ0b3Btb3N0Iiwgb2YgdGhlc2UgaW1hZ2VzLgorICAgICAgICBpZiAoZmxpcFkgJiYg
ZGVwdGggPiAxKSB7CisgICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgZGlzdGFuY2VUb1RvcElt
YWdlID0gKGRlcHRoIC0gMSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJbWFnZUhlaWdodDsKKyAgICAg
ICAgICAgIGJhc2VQdHIgLT0gZGlzdGFuY2VUb1RvcEltYWdlOworICAgICAgICAgICAgYmFzZUVu
ZCAtPSBkaXN0YW5jZVRvVG9wSW1hZ2U7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBy
b3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOworICAgICAg
ICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJhc2VQdHI7CisgICAgICAgICAgICBjb25zdCB1aW50OF90
KiBwdHJFbmQgPSBiYXNlRW5kOworICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgewor
ICAgICAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciArIHNyY1Jvd09mZnNldCwgcm93U2l6ZSk7
CisgICAgICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKKyAgICAgICAgICAgICAgICBkc3Qg
Kz0gZHN0U3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFzZVB0ciArPSB1bnBh
Y2tJbWFnZUhlaWdodCAqIHNyY1N0cmlkZTsKKyAgICAgICAgICAgIGJhc2VFbmQgKz0gdW5wYWNr
SW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcigKKyAgICAgICAgc291cmNl
RGF0YVN1YlJlY3RhbmdsZSwgZGVwdGgsCisgICAgICAgIHVucGFja0ltYWdlSGVpZ2h0LCBzb3Vy
Y2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsCisgICAgICAgIHNyY1N0cmlkZSwgc3JjUm93T2Zmc2V0
LCBkc3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZURhdGFGb3JtYXQsIGRz
dERhdGFGb3JtYXQsIGFscGhhT3ApOworICAgIGlmICghY29udmVydGVyLnN1Y2Nlc3MoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCisKIEdyYXBoaWNzQ29u
dGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0
cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGljc0NvbnRleHRHTCopCiAgICAgOiBt
X2F0dHJzKGF0dHJzKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKQEAgLTE4NCw2
ICs1NTQsMzMyIEBAIHVpbnQ4X3QgR3JhcGhpY3NDb250ZXh0R0w6OmdldENoYW5uZWxCaXRzQnlG
b3JtYXQoR0NHTGVudW0gZm9ybWF0KQogICAgIH0KIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHRH
TDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVy
Q29tcG9uZW50KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01Q
T05FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDogLy8gVHJl
YXQgaXQgYXMgb25lIGNvbXBvbmVudC4KKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9B
TFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpTUkdCX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpCR1JBX0VY
VDogLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6
CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMYnl0ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CisgICAg
ICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWJ5dGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDR0xzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICAqYnl0ZXNQZXJDb21w
b25lbnQgPSBzaXplb2YoR0NHTHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhl
bCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdXNob3J0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAgICAg
ICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGludCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgKmJ5dGVz
UGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAqY29tcG9u
ZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdD
R0x1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxP
QVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNp
emVvZihHQ0dMZmxvYXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRf
T0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBvbmVu
dCA9IHNpemVvZihHQ0dMaGFsZmZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgICAgICAq
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KSArIHNpemVvZihHQ0dMdWludCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMOjpj
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBjb25zdCBQ
aXhlbFN0b3JlUGFyYW1zJiBwYXJhbXMsIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLCB1bnNp
Z25lZCogcGFkZGluZ0luQnl0ZXMsIHVuc2lnbmVkKiBza2lwU2l6ZUluQnl0ZXMpCit7CisgICAg
QVNTRVJUKGltYWdlU2l6ZUluQnl0ZXMpOworICAgIEFTU0VSVChwYXJhbXMuYWxpZ25tZW50ID09
IDEgfHwgcGFyYW1zLmFsaWdubWVudCA9PSAyIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gNCB8fCBw
YXJhbXMuYWxpZ25tZW50ID09IDgpOworICAgIEFTU0VSVChwYXJhbXMucm93TGVuZ3RoID49IDAp
OworICAgIEFTU0VSVChwYXJhbXMuaW1hZ2VIZWlnaHQgPj0gMCk7CisgICAgQVNTRVJUKHBhcmFt
cy5za2lwUGl4ZWxzID49IDApOworICAgIEFTU0VSVChwYXJhbXMuc2tpcFJvd3MgPj0gMCk7Cisg
ICAgQVNTRVJUKHBhcmFtcy5za2lwSW1hZ2VzID49IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCB8fCBkZXB0aCA8IDApCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKKyAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQgfHwgIWRlcHRoKSB7
CisgICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAgICAgICAgaWYgKHBhZGRpbmdJbkJ5
dGVzKQorICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsKKyAgICAgICAgaWYgKHNraXBT
aXplSW5CeXRlcykKKyAgICAgICAgICAgICpza2lwU2l6ZUluQnl0ZXMgPSAwOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOworICAgIH0KKworICAgIGludCByb3dM
ZW5ndGggPSBwYXJhbXMucm93TGVuZ3RoID4gMCA/IHBhcmFtcy5yb3dMZW5ndGggOiB3aWR0aDsK
KyAgICBpbnQgaW1hZ2VIZWlnaHQgPSBwYXJhbXMuaW1hZ2VIZWlnaHQgPiAwID8gcGFyYW1zLmlt
YWdlSGVpZ2h0IDogaGVpZ2h0OworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQsIGNv
bXBvbmVudHNQZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVy
cyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkp
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNOworICAgIHVu
c2lnbmVkIGJ5dGVzUGVyR3JvdXAgPSBieXRlc1BlckNvbXBvbmVudCAqIGNvbXBvbmVudHNQZXJQ
aXhlbDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFZhbHVl
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJvd0xlbmd0aCk7CisgICAgY2hlY2tlZFZhbHVlICo9
IGJ5dGVzUGVyR3JvdXA7CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKworICAgIHVu
c2lnbmVkIGxhc3RSb3dTaXplOworICAgIGlmIChwYXJhbXMucm93TGVuZ3RoID4gMCAmJiBwYXJh
bXMucm93TGVuZ3RoICE9IHdpZHRoKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29y
ZE92ZXJmbG93PiB0bXAgPSB3aWR0aDsKKyAgICAgICAgdG1wICo9IGJ5dGVzUGVyR3JvdXA7Cisg
ICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBsYXN0Um93U2l6ZSA9IHRtcC51
bnNhZmVHZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGFzdFJvd1NpemUgPSBjaGVja2VkVmFs
dWUudW5zYWZlR2V0KCk7CisKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKKyAgICB1bnNpZ25l
ZCByZXNpZHVhbCA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKSAlIHBhcmFtcy5hbGlnbm1lbnQ7
CisgICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcgPSBwYXJhbXMuYWxpZ25tZW50
IC0gcmVzaWR1YWw7CisgICAgICAgIGNoZWNrZWRWYWx1ZSArPSBwYWRkaW5nOworICAgIH0KKyAg
ICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIHVuc2lnbmVkIHBhZGRlZFJvd1NpemUg
PSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gcm93cyA9IGltYWdlSGVpZ2h0OworICAgIHJvd3MgKj0gKGRlcHRoIC0gMSk7
CisgICAgLy8gTGFzdCBpbWFnZSBpcyBub3QgYWZmZWN0ZWQgYnkgSU1BR0VfSEVJR0hUIHBhcmFt
ZXRlci4KKyAgICByb3dzICs9IGhlaWdodDsKKyAgICBpZiAocm93cy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICBj
aGVja2VkVmFsdWUgKj0gKHJvd3MgLSAxKTsKKyAgICAvLyBMYXN0IHJvdyBpcyBub3QgYWZmZWN0
ZWQgYnkgUk9XX0xFTkdUSCBwYXJhbWV0ZXIuCisgICAgY2hlY2tlZFZhbHVlICs9IGxhc3RSb3dT
aXplOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgKmltYWdlU2l6ZUluQnl0
ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisgICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQor
ICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSBwYWRkaW5nOworCisgICAgQ2hlY2tlZDx1aW50MzJf
dCwgUmVjb3JkT3ZlcmZsb3c+IHNraXBTaXplID0gMDsKKyAgICBpZiAocGFyYW1zLnNraXBJbWFn
ZXMgPiAwKSB7CisgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAg
PSBwYWRkZWRSb3dTaXplOworICAgICAgICB0bXAgKj0gaW1hZ2VIZWlnaHQ7CisgICAgICAgIHRt
cCAqPSBwYXJhbXMuc2tpcEltYWdlczsKKyAgICAgICAgaWYgKHRtcC5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Cisg
ICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVHZXQoKTsKKyAgICB9CisgICAgaWYgKHBhcmFt
cy5za2lwUm93cyA+IDApIHsKKyAgICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IHRtcCA9IHBhZGRlZFJvd1NpemU7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcFJvd3M7
CisgICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgICAgICBza2lwU2l6ZSArPSB0bXAu
dW5zYWZlR2V0KCk7CisgICAgfQorICAgIGlmIChwYXJhbXMuc2tpcFBpeGVscyA+IDApIHsKKyAg
ICAgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IHRtcCA9IGJ5dGVzUGVyR3Jv
dXA7CisgICAgICAgIHRtcCAqPSBwYXJhbXMuc2tpcFBpeGVsczsKKyAgICAgICAgaWYgKHRtcC5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUU7CisgICAgICAgIHNraXBTaXplICs9IHRtcC51bnNhZmVHZXQoKTsKKyAgICB9
CisgICAgaWYgKHNraXBTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOworICAgIGlmIChza2lwU2l6ZUluQnl0ZXMpCisg
ICAgICAgICpza2lwU2l6ZUluQnl0ZXMgPSBza2lwU2l6ZS51bnNhZmVHZXQoKTsKKworICAgIGNo
ZWNrZWRWYWx1ZSArPSBza2lwU2l6ZS51bnNhZmVHZXQoKTsKKyAgICBpZiAoY2hlY2tlZFZhbHVl
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Cit9CisK
KyNpZiAhVVNFKEFOR0xFKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6cG9zc2libGVGb3JtYXRB
bmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVt
JiBmb3JtYXQsIEdDR0xlbnVtJiB0eXBlKQoreworI2RlZmluZSBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlTWFjcm8pIGNhc2Ug
aW50ZXJuYWxGb3JtYXRNYWNybzogXAorICAgICAgICBmb3JtYXQgPSBmb3JtYXRNYWNybzsgXAor
ICAgICAgICB0eXBlID0gdHlwZU1hY3JvOyBcCisgICAgICAgIGJyZWFrOworCisgICAgc3dpdGNo
IChpbnRlcm5hbEZvcm1hdCkgeworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJH
QiwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSR0JBLCBSR0JBLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShMVU1JTkFOQ0VfQUxQSEEsIExVTUlOQU5DRV9BTFBIQSwgVU5TSUdORURfQllURSk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoTFVNSU5BTkNFLCBMVU1JTkFOQ0Us
IFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEFMUEhB
LCBBTFBIQSwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoUjgsIFJFRCwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUjhfU05PUk0sIFJFRCwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUjE2RiwgUkVELCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSMzJGLCBSRUQsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSOFVJLCBSRURfSU5URUdFUiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUjhJLCBSRURfSU5URUdFUiwgQllURSk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2VUksIFJFRF9JTlRFR0VSLCBVTlNJR05FRF9TSE9SVCk7
CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjE2SSwgUkVEX0lOVEVHRVIsIFNI
T1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSMzJVSSwgUkVEX0lOVEVH
RVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjMy
SSwgUkVEX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
Ukc4LCBSRywgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoUkc4X1NOT1JNLCBSRywgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoUkcxNkYsIFJHLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShSRzMyRiwgUkcsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSRzhVSSwgUkdfSU5URUdFUiwgVU5TSUdORURfQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoUkc4SSwgUkdfSU5URUdFUiwgQllURSk7CisgICAgICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoUkcxNlVJLCBSR19JTlRFR0VSLCBVTlNJR05FRF9TSE9SVCk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkcxNkksIFJHX0lOVEVHRVIsIFNIT1JU
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSRzMyVUksIFJHX0lOVEVHRVIs
IFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkczMkks
IFJHX0lOVEVHRVIsIElOVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdC
OCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShTUkdCOCwgUkdCLCBVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShSR0I1NjUsIFJHQiwgVU5TSUdORURfU0hPUlRfNV82XzUpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhfU05PUk0sIFJHQiwgQllURSk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUjExRl9HMTFGX0IxMEYsIFJHQiwgVU5TSUdORURfSU5U
XzEwRl8xMUZfMTFGX1JFVik7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdC
OV9FNSwgUkdCLCBVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYpOworICAgICAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKFJHQjE2RiwgUkdCLCBIQUxGX0ZMT0FUKTsKKyAgICAgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShSR0IzMkYsIFJHQiwgRkxPQVQpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOwor
ICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjhJLCBSR0JfSU5URUdFUiwgQllU
RSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMTZVSSwgUkdCX0lOVEVH
RVIsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShS
R0IxNkksIFJHQl9JTlRFR0VSLCBTSE9SVCk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoUkdCMzJVSSwgUkdCX0lOVEVHRVIsIFVOU0lHTkVEX0lOVCk7CisgICAgICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCMzJJLCBSR0JfSU5URUdFUiwgSU5UKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOCwgUkdCQSwgVU5TSUdORURfQllURSk7Cisg
ICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoU1JHQjhfQUxQSEE4LCBSR0JBLCBVTlNJ
R05FRF9CWVRFKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBOF9TTk9S
TSwgUkdCQSwgQllURSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoUkdCNV9B
MSwgUkdCQSwgVU5TSUdORURfU0hPUlRfNV81XzVfMSk7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoUkdCQTQsIFJHQkEsIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQpOworICAgICAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQjEwX0EyLCBSR0JBLCBVTlNJR05FRF9JTlRf
Ml8xMF8xMF8xMF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkEx
NkYsIFJHQkEsIEhBTEZfRkxPQVQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KFJHQkEzMkYsIFJHQkEsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShSR0JBOFVJLCBSR0JBX0lOVEVHRVIsIFVOU0lHTkVEX0JZVEUpOworICAgICAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKFJHQkE4SSwgUkdCQV9JTlRFR0VSLCBCWVRFKTsKKyAgICAgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0IxMF9BMlVJLCBSR0JBX0lOVEVHRVIsIFVOU0lH
TkVEX0lOVF8yXzEwXzEwXzEwX1JFVik7CisgICAgICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoUkdCQTE2VUksIFJHQkFfSU5URUdFUiwgVU5TSUdORURfU0hPUlQpOworICAgICAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkExNkksIFJHQkFfSU5URUdFUiwgU0hPUlQpOworICAg
ICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKFJHQkEzMkksIFJHQkFfSU5URUdFUiwgSU5U
KTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShSR0JBMzJVSSwgUkdCQV9JTlRF
R0VSLCBVTlNJR05FRF9JTlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERF
UFRIX0NPTVBPTkVOVDE2LCBERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUKTsKKyAgICAg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShERVBUSF9DT01QT05FTlQsIERFUFRIX0NPTVBP
TkVOVCwgVU5TSUdORURfU0hPUlQpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KERFUFRIX0NPTVBPTkVOVDI0LCBERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCk7CisgICAg
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEhfQ09NUE9ORU5UMzJGLCBERVBUSF9D
T01QT05FTlQsIEZMT0FUKTsKKyAgICAgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShERVBU
SF9TVEVOQ0lMLCBERVBUSF9TVEVOQ0lMLCBVTlNJR05FRF9JTlRfMjRfOCk7CisgICAgICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoREVQVEgyNF9TVEVOQ0lMOCwgREVQVEhfU1RFTkNJTCwg
VU5TSUdORURfSU5UXzI0XzgpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKERF
UFRIMzJGX1NURU5DSUw4LCBERVBUSF9TVEVOQ0lMLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRf
OF9SRVYpOworICAgICAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6
U1JHQl9FWFQsIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQsIFVOU0lHTkVEX0JZVEUpOworICAgICAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQs
IEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQsIFVOU0lHTkVEX0JZVEUpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjdW5kZWYgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRQorCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gIVVTRShBTkdMRSkK
KworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6cGFja0ltYWdlRGF0YShJbWFnZSogaW1hZ2UsIGNv
bnN0IHZvaWQqIHBpeGVscywgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIGZs
aXBZLCBBbHBoYU9wIGFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCBz
b3VyY2VJbWFnZVdpZHRoLCB1bnNpZ25lZCBzb3VyY2VJbWFnZUhlaWdodCwgY29uc3QgSW50UmVj
dCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwgdW5zaWduZWQgc291cmNlVW5w
YWNrQWxpZ25tZW50LCBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsIFZlY3Rvcjx1aW50OF90PiYgZGF0
YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFwaXhlbHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7CisgICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRs
eSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KKyAgICBQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsK
KyAgICBwYXJhbXMuYWxpZ25tZW50ID0gMTsKKyAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZS53aWR0aCgpLCBzb3VyY2VJ
bWFnZVN1YlJlY3RhbmdsZS5oZWlnaHQoKSwgZGVwdGgsIHBhcmFtcywgJnBhY2tlZFNpemUsIG51
bGxwdHIsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOworCisgICAgaWYgKCFw
YWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNvdXJj
ZUZvcm1hdCwgc291cmNlSW1hZ2VXaWR0aCwgc291cmNlSW1hZ2VIZWlnaHQsIHNvdXJjZUltYWdl
U3ViUmVjdGFuZ2xlLCBkZXB0aCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnBhY2tJbWFnZUhl
aWdodCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1hZ2Ut
PmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcoKmltYWdlKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTDo6ZXh0cmFjdEltYWdl
RGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCBpbnQgdW5w
YWNrSW1hZ2VIZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAg
aWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgd2lkdGggPSBp
bWFnZURhdGEtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0KCk7
CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0
bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7
CisgICAgcGFyYW1zLmFsaWdubWVudCA9IDE7CisgICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNl
SW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBu
dWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlmICgh
cGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0lt
YWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHRHTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxTdG9yZVBh
cmFtcyYgdW5wYWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGNv
bnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIC8vIEFzc3Vt
ZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KKyAgICBE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7
CisKKyAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCisgICAgdW5zaWduZWQgY29tcG9u
ZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRB
bmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRl
c1BlckNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBieXRl
c1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CisgICAg
ZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKKworICAgIHVuc2ln
bmVkIGltYWdlU2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsKKyAgICBjb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHVucGFja1BhcmFtcywg
JmltYWdlU2l6ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUluQnl0ZXMpOworICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKTsK
KyAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQorICAgICAgICBzcmNEYXRhICs9IHNraXBTaXplSW5C
eXRlczsKKworICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCB1
bnBhY2tQYXJhbXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA6IHdpZHRoLCBo
ZWlnaHQsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEsIHVucGFja1BhcmFtcy5hbGln
bm1lbnQsIDAsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCmluZGV4IDlmZWU3
MmYyYzcyYjFiNmVmZWNlYzc3OGQ1NmQwZWU1NWIyOTFiMGUuLmMwMzJlMDRiMWRiZDhiNDM2YTRh
MmI4ODQ0MGYzNDY2NTc5ZDU1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODg4LDYgKzg4OSwx
NSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wb3NpdGUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRleHRM
b3N0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkg
PSAwOworICAgIH07CisKICAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7CiAgICAgICAgIFN0cmluZyBu
YW1lOwogICAgICAgICBHQ0dMZW51bSB0eXBlOwpAQCAtODk3LDYgKzkwNyw5IEBAIHB1YmxpYzoK
ICAgICBHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIERlc3Rp
bmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0wqIHNoYXJl
ZENvbnRleHQgPSBudWxscHRyKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTCgpID0g
ZGVmYXVsdDsKIAorICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50
cy5hZGQoJmNsaWVudCk7IH0KKyAgICB2b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVudCkg
eyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9CisKICAgICAvLyA9PT09PT09PT09IFdlYkdM
IDEgZW50cnkgcG9pbnRzLgogCiAgICAgdmlydHVhbCB2b2lkIGFjdGl2ZVRleHR1cmUoR0NHTGVu
dW0gdGV4dHVyZSkgPSAwOwpAQCAtMTI1MywxMyArMTI2Niw5MCBAQCBwdWJsaWM6CiAKICAgICAv
LyA9PT09PT09PT09IE5vbi1XZWJHTCBiYXNlZCBlbnRyeSBwb2ludHMuCiAKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkgPSAwOworCisgICAgdmlydHVhbCBHcmFw
aGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRp
b24oKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0ID0gMDsKKworICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxs
IGJlIHJldHVybmVkIGZyb20gYQorICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMg
aXMgdXNlZCB0byBlbXVsYXRlIE9wZW5HTCBFUworICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUg
ZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCisgICAgLy8gY2hlY2tpbmcg
bWFuZGF0ZWQgYnkgV2ViR0wuCisgICAgLy8KKyAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGds
R2V0RXJyb3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCisgICAgLy8gaW5zdGFuY2Ugb2YgYW55
IGdpdmVuIGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KKyAgICAvLyBnZXRF
cnJvciBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgorICAgIHZpcnR1YWwgdm9pZCBzeW50
aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJvcikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNl
dEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZUZvckRpc3BsYXkoKSA9IDA7CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIC8vIEhlbHBlciB0byB0
ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAw
LgorICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgorICAg
IC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGlu
Zy4KKyAgICB2aXJ0dWFsIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xpbnQgYWxpZ25tZW50ID0gNCkgPSAgMDsKKyNlbmRpZgorCisgICAg
SW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNp
emUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7IH0KKwogICAgIHN0YXRpYyB1bnNp
Z25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDR0xlbnVtKTsKICAgICBzdGF0aWMg
dW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0NHTGVudW0pOwogCiAgICAgc3RhdGljIHVp
bnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQ0dMZW51bSk7CiAKKyAgICBzdHJ1Y3QgUGl4
ZWxTdG9yZVBhcmFtcyBmaW5hbCB7CisgICAgICAgIEdDR0xpbnQgYWxpZ25tZW50IHsgNCB9Owor
ICAgICAgICBHQ0dMaW50IHJvd0xlbmd0aCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBpbWFnZUhl
aWdodCB7IDAgfTsKKyAgICAgICAgR0NHTGludCBza2lwUGl4ZWxzIHsgMCB9OworICAgICAgICBH
Q0dMaW50IHNraXBSb3dzIHsgMCB9OworICAgICAgICBHQ0dMaW50IHNraXBJbWFnZXMgeyAwIH07
CisgICAgfTsKKworICAgIC8vIENvbXB1dGVzIHRoZSBjb21wb25lbnRzIHBlciBwaXhlbCBhbmQg
Ynl0ZXMgcGVyIGNvbXBvbmVudAorICAgIC8vIGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBl
IGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gZWl0aGVyIHdhcyBhbiBpbnZh
bGlkIGVudW0uCisgICAgc3RhdGljIGJvb2wgY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJz
KEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBvbmVudHNQZXJQ
aXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIC8vIENvbXB1dGVzIHRo
ZSBpbWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwgcGFk
ZGluZworICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9fRVJS
T1IgaWYgc3VjY2VlZCwgb3RoZXJ3aXNlCisgICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQgR0wg
ZXJyb3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6CisgICAgLy8gICBJTlZB
TElEX1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBwZW5z
LgorICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCisgICAg
c3RhdGljIEdDR0xlbnVtIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMmLCB1bnNpZ25lZCogaW1hZ2VTaXplSW5C
eXRlcywgdW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5dGVz
KTsKKworI2lmICFVU0UoQU5HTEUpCisgICAgc3RhdGljIGJvb2wgcG9zc2libGVGb3JtYXRBbmRU
eXBlRm9ySW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xlbnVtJiBm
b3JtYXQsIEdDR0xlbnVtJiB0eXBlKTsKKyNlbmRpZiAvLyAhVVNFKEFOR0xFKQorCisgICAgLy8g
RXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUgcGFz
c2VkIFZlY3RvciwKKyAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0
aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAorICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBh
bmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCisgICAgLy8gdXBvbiBzdWNj
ZXNzLgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwgRGF0YUZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsIGludCBkZXB0aCwg
aW50IHVucGFja0ltYWdlSGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsK
KworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1zdXBwbGll
ZCB0ZXh0dXJlCisgICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBs
eUFscGhhIHBhcmFtZXRlcnMuCisgICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0bHkgcGFj
a2VkIGFjY29yZGluZyB0byB0aGUgcGFzc2VkCisgICAgLy8gdW5wYWNrUGFyYW1zLCB0aGUgb3V0
cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgorICAgIHN0YXRpYyBib29s
IGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsU3RvcmVQYXJhbXMmIHVucGFj
a1BhcmFtcywgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBw
aXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICAvLyBQYWNrcyB0aGUgY29udGVu
dHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRo
ZSBwYXNzZWQgVmVjdG9yCisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5k
IHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFPcCBmbGFncy4KKyAgICAvLyBS
ZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEo
SW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVk
IHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNvdXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKTsKKwogICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgaW50IG1fY3VycmVudFdpZHRoIHsgMCB9
OworICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07CisgICAgSGFzaFNldDxDbGllbnQqPiBt
X2NsaWVudHM7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIG1f
YXR0cnM7CiAgICAgRGVzdGluYXRpb24gbV9kZXN0aW5hdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmVmNTE0NzJmMTEwODU4MzhmMmRiZWMx
ZWQ1MzM1ZTRlZTNmMjY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6R3JhcGhpY3NDb250
ZXh0R0xJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2UsIERPTVNvdXJjZSBpbWFnZUh0bWxEb21T
b3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pCit7Cisg
ICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1s
RG9tU291cmNlOworICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0
aXBseUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgaWdub3JlTmF0aXZlSW1hZ2VB
bHBoYVByZW11bHRpcGxpY2F0aW9uKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMSW1hZ2VFeHRyYWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjliMGM5ZmIxZTYzOWQ5OWY5ODM3ZmUw
NmRmMGFjNzAyOTZjOTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFw
aGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBET01Tb3Vy
Y2UgPSBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOworICAgIHVzaW5nIERhdGFGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDsKKyAgICB1c2luZyBBbHBoYU9wID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkFscGhhT3A7CisgICAgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3RvcihJbWFnZSosIERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CisKKyAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3Vy
Y2VzCisgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCisgICAgfkdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IoKTsKKworICAgIGJvb2wgZXh0cmFjdFN1Y2Nl
ZWRlZCgpIHsgcmV0dXJuIG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQorICAgIGNvbnN0IHZvaWQqIGlt
YWdlUGl4ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQorICAgIHVuc2lnbmVk
IGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KKyAgICB1bnNpZ25lZCBpbWFn
ZUhlaWdodCgpIHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KKyAgICBEYXRhRm9ybWF0IGltYWdl
U291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQorICAgIEFscGhh
T3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9CisgICAgdW5zaWduZWQgaW1h
Z2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlVW5wYWNrQWxp
Z25tZW50OyB9CisgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJuIG1f
aW1hZ2VIdG1sRG9tU291cmNlOyB9Citwcml2YXRlOgorICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVz
dCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICAgIC8vIEV4dHJh
Y3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0
aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5kIEFscGhhT3AgZXRjLAorICAg
IC8vIG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBvciByZWxldmFudCBkYXRhIGlmIG5lZWRl
ZCBhbmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcworICAgIGJvb2wgZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgYm9v
bCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisjaWYgVVNFKENB
SVJPKQorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOworI2VsaWYg
VVNFKENHKQorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisgICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IG1fcGl4ZWxEYXRhOworICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXplZFJHQkE4
RGF0YTsKKyNlbmRpZgorICAgIEltYWdlKiBtX2ltYWdlOworICAgIERPTVNvdXJjZSBtX2ltYWdl
SHRtbERvbVNvdXJjZTsKKyAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKKyAgICBjb25zdCB2
b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKKyAgICB1
bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OworICAgIERhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZvcm1h
dDsKKyAgICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5w
YWNrQWxpZ25tZW50OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApp
bmRleCA5NjliYWZjYzg3OWEwOTBiMDNjYmY0NWQxODRjZjEyMWZmNDFhZmJhLi4zNDZkMzZkZTk1
ODVlNjgzZGIzMmFjMjYyMzBkM2YyYThhMzI5MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
CkBAIC03NCw5ICs3NCwxMSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xF
KCkgPSBkZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cykKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAg
IH0KICAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2
LDggQEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVk
IGFscmVhZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1l
KSAmJiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1
ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxl
ZEV4dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hh
ZGVyaXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAm
c291cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1
IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGlu
dCwgR0NHTHNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1
ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25n
IGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25n
IG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBh
ZGRpbmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZm
ZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwg
ZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwog
fQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAg
ICAgR0x1aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJh
eSk7CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAg
ICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFy
cmF5KTsKIH0KIApAQCAtMTkzLDEzICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dM
QU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAo
IWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFy
cmF5T0VTKGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwog
fQogCkBAIC0yMjgsMjUgKzI0NSwzMyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmRyYXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZm
ZXJzRVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5
cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQog
CkBAIC0yNzEsOTcgKzI5NiwxMjkgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVz
dFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FO
R0xFX3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29s
ZWFudlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBh
cmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9h
dHZSb2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRl
Z2VydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQ
cm9ncmFtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9n
cmFtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5H
TEUoR0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNo
YWRlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2
Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9i
dXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICps
ZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxv
Y2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNp
emUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVy
dGV4QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVy
dGV4QXR0cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFy
YW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRl
cnZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQ
b2ludGVydlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVy
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGlu
dCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0
aCwgR0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQ
aXhlbHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNp
emUsIGxlbmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2
LDI2OCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5t
X2lzRm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQog
ewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4
UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBH
Q0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1
ZlNpemUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdl
MkRSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGlu
dCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlRleFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NH
TGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNp
emUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdl
MkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3Nl
ZFRleEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RB
TkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0
LCBpbnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6
ZWkgZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFO
R0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJ
bWFnZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUs
IGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1
c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRCdWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFt
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92
Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVz
dEFOR0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5h
bGZvcm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNp
emUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVy
dGV4QXR0cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZl
cnRleEF0dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJ
dWl2Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dM
dWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkg
Kmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFt
LCBsb2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVV
bmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVz
dEFOR0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+
KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1
c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVy
UGFyYW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRCdWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50
ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZT
aXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVz
dEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBs
ZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxl
ciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUo
dGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBw
cm9ncmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFt
SW50ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRCb29sZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRh
dGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0
QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFO
R0xFKHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2
ZWxQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRl
cnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xF
Um9idXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgx
LDcgKzcwNCw5IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3
aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdD
R0xzaXplaSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVj
dCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3Vs
ZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYx
Niw4NiArNzQxLDExNCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVz
dEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZT
aXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5V
bmlmb3JtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZv
cm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5H
TEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xF
KHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNp
emUsIGNvbnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpw
YXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBh
cmFtZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRU
ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVy
SWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RB
TkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBh
cmFtKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1l
dGVySWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxl
clBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJJdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBs
ZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVj
dGl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZS
b2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVp
bnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBu
YW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0
QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1
c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVp
bnQ2NCo+KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmlu
ZGV4IGQ0NzFjNDIyY2M0NzI4YmZlY2YzMGU5MWY2OTI3ZjE0ZTE3MjZkYzUuLjViNWRlODMwMzNi
MmUyODAwYWFmYWEwZjc4M2IwNWRiOGZmYjNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwCkBAIC0xODEsMTEgKzE4MSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1w
bGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGds
OjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlQU5HTEUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdl
dEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xF
KEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRl
IHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAv
LyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UIHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0z
MjAsMTMgKzMyMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJn
ZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNl
IE1BWF9URVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9T
SVpFLCB2YWx1ZSk7CkBAIC0zNTksMTMgKzM2MywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUs
IEdDR0x1aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVt
IHNoYWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dM
aW50KiBwcmVjaXNpb24pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lz
aW9uKTsKIH0KIApAQCAtMzgyLDEzICszOTAsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpO
ZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRl
cHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6
RmFyKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NH
TGNsYW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0
aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQwMyw3ICs0MTUsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGds
Rmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBh
bGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5n
IHBpeGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRh
cmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZF
UiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUxOCw3ICs1MzIsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1f
bGF5ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTY4LDcgKzU4NCw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNo
YXIgKnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAq
IG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogCiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVI7CiAKQEAgLTYyNCw5ICs2NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBw
aQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9
PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM0LDEyICs2NDksMTQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAg
ICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7CiAKQEAgLTY2MiwxMSArNjc5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGdsOjpDb2xvck1hc2so
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKGF0dHJzLmRlcHRo
KSB7CiAgICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRl
cHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7Cisg
ICAgICAgIGdsOjpDbGVhckRlcHRoZigxLjBmKTsKICAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdM
X0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soR0xf
VFJVRSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwogICAgIH0K
KwogICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9T
VEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKICAgICAgICAgZ2w6OkNsZWFyU3Rl
bmNpbCgwKTsKQEAgLTY4Miw3ICs3MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q2xlYXJDb2xvcihjbGVh
ckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsK
ICAgICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tb
Ml0sIGNvbG9yTWFza1szXSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6
Q2xlYXJEZXB0aGYoY2xlYXJEZXB0aCk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNr
KTsKICAgICB9CiAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKQEAgLTcwNywxNCArNzI1LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogICAgIGdsOjpGbHVzaCgpOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVy
ZTsKICAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTcyMywyNiArNzM4LDM0
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpBdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgR0x1aW50IGZibzsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8gPSBidWZm
ZXI7CkBAIC03NjEsMTA3ICs3ODQsMTQxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0KIAog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0
dXJlLCB0YXJnZXQpOwogICAgIGdsOjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVk
LCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5k
RXF1YXRpb24obW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5k
RXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2Rl
UkdCLCBtb2RlQWxwaGEpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJs
ZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNy
Y1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxw
aGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNp
emUsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCdWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KIAogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xz
aXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKICAgICByZXR1cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0
LCBsZW5ndGgsIGFjY2Vzcyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bm1hcEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFk
VGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dM
aW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQs
IHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xp
bnQqIHBhcmFtcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0
YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4
U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uz
RChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpA
QCAtODY5LDQ2ICs5MjYsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3Rv
cmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBu
YW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFt
LCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBh
cmFtcy5kYXRhKCkpOwogfQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFy
Q29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1w
ZiBhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIs
IGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0Zmll
bGQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXIobWFzayk7CiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
Q2xlYXJTdGVuY2lsKHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xv
ck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1
ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNv
bG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gV2UgbmVlZCB0
aGUgQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9TdXJmYWNl
CiAgICAgLy8gYmFja2J1ZmZlcnMsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IGV4cG9zZWQgdG8gV2Vi
R0wgdXNlciBzaGFkZXJzLgogICAgIC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgaXQgZHVyaW5nIHNo
YWRlciBjb21waWxhdGlvbi4KQEAgLTkyMCwxMyArOTkxLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIEdD
R0xlbnVtIGZyYW1lYnVmZmVyVGFyZ2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29udGV4
dEdMOjpSRUFEX0ZSQU1FQlVGRkVSIDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSOwog
CkBAIC05NDEsNyArMTAxNiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQg
eCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAg
ICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3ND
b250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVI7CiAKQEAgLTk1NiwxOSArMTAzMywyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC05NzYsODIg
KzEwNTksMTA4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpE
ZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkRpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVz
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwg
Y291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwg
R0NHTGludCBsZXZlbCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNl
KEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyb250RmFj
ZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBt
YXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZW5l
cmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCkBAIC0xMDYxLDcgKzExNzAsOSBAQCBib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUp
OwogICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgpAQCAtMTA5
MCw3ICsxMjAxLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0cKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heFVu
aWZvcm1TaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CiAKQEAgLTExMTksNyArMTIzMiw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBz
aGFkZXJzKTsKIH0KIApAQCAtMTEyOCw3ICsxMjQzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFMKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAtMTsKKwogCiAgICAgcmV0dXJuIGdsOjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtMTE0MCw3ICsxMjU3LDkgQEAgaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGMKIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBi
b29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1p
dCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTExNjcsMTkgKzEy
ODYsMjUgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAg
ICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0KIAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKwogICAgIHJldHVybiBnbDo6R2V0
RXJyb3IoKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmco
R0NHTGVudW0gbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcobmFt
ZSkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okhp
bnQodGFyZ2V0LCBtb2RlKTsKIH0KIApAQCAtMTE4OCwxMyArMTMxMywxNyBAQCBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZm
ZXIpCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsK
IH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dM
ZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc0VuYWJsZWQoY2FwKTsKIH0KIApAQCAtMTIwMyw3ICsxMzMyLDkgQEAgR0NHTGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBm
cmFtZWJ1ZmZlcikKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzRnJh
bWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCkBAIC0xMjEyLDcgKzEzNDMsOSBAQCBHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHBy
b2dyYW0pOwogfQogCkBAIC0xMjIxLDcgKzEzNTQsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7CiB9CiAKQEAgLTEyMzAsNyArMTM2NSw5IEBAIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
ICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwogfQog
CkBAIC0xMjM5LDQ0ICsxMzc2LDU4IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCiAgICAgcmV0dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okxp
bmtQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
aXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBH
Q0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBvbHlnb25P
ZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVy
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IApAQCAtMTI4NCw3ICsxNDM1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hh
ZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIHsKICAgICBB
U1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENTdHJpbmcm
IHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNoYXIqIHNo
YWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwpAQCAtMTI5NCwxNzgg
KzE0NDYsMjM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dM
dWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxNYXNrKG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1
aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxNYXNrU2Vw
YXJhdGUoZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0g
enBhc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRl
KGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
TGZsb2F0IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNv
bnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0y
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0
IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZnYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
LCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwgdjAp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBs
b2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5p
Zm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MSwgR0NHTGludCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3Qg
R0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xp
bnQgdjIsIEdDR0xpbnQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDE2LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAK
QEAgLTE0NzMsNzkgKzE2ODEsMTA1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZh
bGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dM
ZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwg
djAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MmZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1
aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xm
bG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
NGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWlu
dCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxp
emVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwg
bm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwg
dHlwZSwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdw
b3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVp
bnQgYXJyYXkgPSAwOwogICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICAgICBy
ZXR1cm4gYXJyYXk7CkBAIC0xNTU1LDcgKzE3ODksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiB9CiAKQEAgLTE1NjMsNTEgKzE3OTks
NjcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc1ZlcnRleEFycmF5KGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMYm9v
bGVhbiogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xlYW52
KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1
ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAg
ICAgCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2
YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1l
LCBHQ0dMdWludCBpbmRleCwgR0NHTGludDY0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICAqdmFsdWUgPSAwOwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNo
bWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKICAg
ICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNI
TUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xNjE1LDcgKzE4
NjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjQzLDcgKzE4OTcs
OSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIGdsOjpH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBp
ZiAoIWxlbmd0aCkKQEAgLTE2NjIsNyArMTkxOCw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjcwLDcgKzE5MjgsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NH
TGVudW0gcG5hbQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTY3
OCw3ICsxOTM4LDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAg
ICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwog
ICAgIGlmICghbGVuZ3RoKQpAQCAtMTY5OSwzMSArMTk2MSw0MSBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0KQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBs
b2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMdWludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApAQCAtMTczMSwy
NSArMjAwMywzMiBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
TG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIHJldHVybiBnbDo6R2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1aW50IGluZGV4
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiBH
Q0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKQEAgLTE3NTgsNyArMjAzNyw4IEBAIEdDR0xz
aXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdD
R0x1aW50IGluZGV4LCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1
YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdD
R0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0
b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZy
b20gdGhlIHN1YmltYWdlIHNpemUuCiAgICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwpAQCAt
MTc2NywyMSArMjA0NywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVz
c2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIo
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpH
ZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE3ODksNyArMjA3NSw5IEBAIFBs
YXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAK
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBn
bDo6R2VuRnJhbWVidWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE3OTcsMTMgKzIw
ODUsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBn
bDo6Q3JlYXRlUHJvZ3JhbSgpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKICAg
ICByZXR1cm4gbzsKQEAgLTE4MTEsMTMgKzIxMDMsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigo
dHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVY
X1NIQURFUik7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVRleHR1cmUoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8g
PSAwOwogICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChvKTsKQEAgLTE4MjYsMTMgKzIxMjIsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAv
LyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBk
cmF3aW5nCiAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCiAgICAgaWYg
KG1faXNGb3JXZWJHTDIpIHsKQEAgLTE4NDcsMjUgKzIxNDcsMzMgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVy
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVd
IChhdXRvJiBrZXlWYWx1ZSkgewogICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3Qg
PT0gdGV4dHVyZTsKICAgICB9KTsKQEAgLTE5MjEsNyArMjIyOSw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3
aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGlmICghbV9pc0ZvcldlYkdMMiAmJiBtX2V4dGVuc2lvbnMpCiAgICAgICAgIGludGVy
bmFsZm9ybWF0ID0gbV9leHRlbnNpb25zLT5hZGp1c3RXZWJHTDFUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSk7CiAgICAgZ2w6OlRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwpAQCAtMTkzMCwzNCArMjI0MCw0NSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBs
ZXZlbCwgRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFu
Y2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNp
emVpIHByaW1jb3VudCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OkRyYXdBcnJh
eXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGVsc2UKLSAg
ICAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNv
dW50LCBwcmltY291bnQpOworICAgICAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NH
TGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9m
ZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICBlbHNlCi0gICAgICAgIGdldEV4
dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNl
dCwgcHJpbWNvdW50KTsKKyAgICAgICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1v
ZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBwcmltY291
bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlz
b3IpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKICAgICBlbHNlCi0gICAgICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0
ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgZ2w6OlZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7CiB9CiAKIEdDR0x1aW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CisKICAgICByZXR1cm4gZ2w6
OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKQEAgLTE5NzQsNyArMjI5NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwK
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFt
ZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQog
ewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAg
ICBHTGludCBtYXhMZW5ndGggPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
QUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RILCAmbWF4TGVuZ3RoKTsKICAgICBp
ZiAobWF4TGVuZ3RoIDw9IDApIHsKQEAgLTE5OTIsNyArMjMxNSw5IEBAIFN0cmluZyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5k
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgs
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtQmxvY2tCaW5kaW5nKHByb2dyYW0s
IHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKIH0KIApAQCAtMjAwMCw3
ICsyMzI1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmlu
ZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wKIAogUGxhdGZvcm1HTE9iamVjdCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5RdWVyaWVzKDEsICZuYW1l
KTsKICAgICByZXR1cm4gbmFtZTsKQEAgLTIwMDgsMTkgKzIzMzUsMjUgQEAgUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmVnaW5RdWVy
eSh0YXJnZXQsIHF1ZXJ5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5k
UXVlcnkoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpF
bmRRdWVyeSh0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRR
dWVyeU9iamVjdHVpdihHQ0dMdWludCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50KiBwYXJh
bXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWl2KGlk
LCBwbmFtZSwgcGFyYW1zKTsKIH0KIApAQCAtMjAyOCw3ICsyMzYxLDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYoR0NHTHVpbnQgaWQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0cKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
R0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5UcmFuc2Zvcm1GZWVkYmFja3MoMSwgJm5hbWUp
OwogICAgIHJldHVybiBuYW1lOwpAQCAtMjAzNiw0OSArMjM3MSw2NCBAQCBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBs
YXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2sp
OwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1G
ZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNUcmFuc2Zvcm1GZWVkYmFjayh0
cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdHJh
bnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRUcmFu
c2Zvcm1GZWVkYmFjayh0YXJnZXQsIHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmlt
aXRpdmVNb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCZWdpblRyYW5zZm9y
bUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCiB7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
VmVjdG9yPENTdHJpbmc+IGNvbnZlcnRlZFZhcnlpbmdzID0gdmFyeWluZ3MubWFwKFtdKGNvbnN0
IFN0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1cm4gdmFyeWluZy51dGY4KCk7CiAgICAg
fSk7CiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBwb2ludGVyc1RvVmFyeWluZ3MgPSBjb252ZXJ0
ZWRWYXJ5aW5ncy5tYXAoW10oY29uc3QgQ1N0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1
cm4gdmFyeWluZy5kYXRhKCk7CiAgICAgfSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCBwb2ludGVyc1RvVmFy
eWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgR0NHTHNpemVpIGJ1ZlNpemUgPSAw
OwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OlRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsKICAgICBp
ZiAoIWJ1ZlNpemUpCkBAIC0yMDk4LDcgKzI0NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEJ1ZmZlckJhc2UodGFyZ2V0LCBpbmRleCwg
YnVmZmVyKTsKIH0KIApAQCAtMjEzMiwzMiArMjQ4NCw0OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBz
cmNCeQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIoR0NH
TGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZMSwg
R0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBkc3RZ
MSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxpdEZyYW1lYnVm
ZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZ
MSwgbWFzaywgZmlsdGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJh
bWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIp
CiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVy
ZSwgbGV2ZWwsIGxheWVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52
YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1l
bnRzLCBjb25zdCBHQ0dMZW51bSogYXR0YWNobWVudHMpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1
ZmZlcih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0NHTGVudW0qIGF0dGFjaG1l
bnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50
cywgYXR0YWNobWVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVhZEJ1ZmZl
cihzcmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NH
TGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVi
dWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJB
TUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTIxNzIsMTYz
ICsyNTQxLDIyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIEdDR0xpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAg
cmV0dXJuIGdsOjpHZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0xdWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQg
djEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWkobG9jYXRpb24s
IHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAs
IHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2Miwg
R0NHTHVpbnQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWko
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEs
IEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1
aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2Nh
dGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQg
c3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3Vpdihs
b2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NH
THVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNHVpdihsb2NhdGlvbiwgc3JjTGVu
Z3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJp
eDJ4M2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCog
ZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgc3JjTGVu
Z3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNl
dCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpV
bmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0
aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVp
bnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bv
c2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQg
c3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4
NHgzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwg
eSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
Ykk0aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xpbnQqIHZhbHVlcykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliSTRpdihpbmRleCwgdmFsdWVzKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWlu
dCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aShpbmRleCwg
eCwgeSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMdWludCogdmFsdWVzKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwgdmFsdWVz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMo
R0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNv
dW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd1JhbmdlRWxl
bWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9mZnNldCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVm
ZmVycyhHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJz
KG4sIGJ1ZnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMaW50KiB2
YWx1ZXMsIEdDR0x1aW50IHNyY09mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRy
YXdidWZmZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVm
ZmVyLCBjb25zdCBHQ0dMdWludCogdmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQpCiB7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNs
ZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMsIEdDR0x1
aW50IHNyY09mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZh
bHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9h
dCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJh
d2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVRdWVyaWVzKDEsICZxdWVyeSk7CiB9CiAKIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVl
cnkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1F1
ZXJ5KHF1ZXJ5KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIEdMaW50IHZhbHVlOwogICAgIGdsOjpHZXRRdWVyeWl2KHRhcmdl
dCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmpl
Y3Q+KHZhbHVlKTsKQEAgLTIzMzYsNyArMjc2Nyw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBs
ZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAg
IGdsOjpHZW5TYW1wbGVycygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yMzQ0LDEw
NCArMjc3NywxMzggQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2FtcGxlcigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNh
bXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpEZWxldGVTYW1wbGVycygxLCAmc2FtcGxlcik7CiB9CiAKIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNTYW1w
bGVyKHNhbXBsZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2Ft
cGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwg
cGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1l
dGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQg
cGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyZnYoc2FtcGxlciwgcG5hbWUsIHZhbHVlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KFBsYXRm
b3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyaXYoc2FtcGxl
ciwgcG5hbWUsIHZhbHVlKTsKIH0KIAogR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwg
ZmxhZ3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5j
KEdDR0xzeW5jIHN5bmMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NH
THVpbnQ2NCB0aW1lb3V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKwog
ICAgIHJldHVybiBnbDo6Q2xpZW50V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBH
Q0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpdihHQ0dMc3luYyBzeW5jLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQgKnZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRTeW5jaXYoc3luYywgcG5hbWUsIGJ1ZlNpemUsIG51bGxw
dHIsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFu
c2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBhdXNlVHJh
bnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpS
ZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6
ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEJ1ZmZlclJhbmdlKHRhcmdl
dCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAogVmVjdG9yPEdDR0x1aW50PiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4geyB9OworCiAgICAgVmVjdG9yPENTdHJp
bmc+IHV0ZjggPSB1bmlmb3JtTmFtZXMubWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHgudXRmOCgp
OyB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGNzdHIgPSB1dGY4Lm1hcChbXShhdXRvJiB4
KSB7IHJldHVybiB4LmRhdGEoKTsgfSk7CiAgICAgVmVjdG9yPEdDR0x1aW50PiByZXN1bHQoY3N0
ci5zaXplKCksIDApOwpAQCAtMjUwMyw2NyArMjk3MCw4OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQg
bG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dM
dWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0x
ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3Qg
R0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc3Jj
TGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEs
IEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2
KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm00ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlv
biwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNM
ZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRp
b24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCog
ZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0
YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3Jj
T2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2Nh
dGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00aXYobG9j
YXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNl
dCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNy
Y09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dM
ZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBz
cmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSAr
IHNyY09mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKaW5kZXgg
MDY5NzVhNDEzOWExOWRhNzc3NmUwMjA4MjE0NDJmZTViY2IyZTBmNy4uZmFkYjI0M2U2NzhiNzI3
ZjEwYjBiNmIzYjJlOTBmMDU4YmQzOTI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWly
by5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkg
JiYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
CkBAIC0zOSw5ICs0MCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7
CitHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yOjp+R3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCitib29sIEdyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wpCiB7CiAgICAgaWYgKCFtX2ltYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCmluZGV4IDdjYzM5Njky
ZGUyYzFjN2Y4NDY2ZjQ1YTk2YWUxNWE1NTQ3MTBmNWUuLmJiOTFkZWM5MTIyNGQ0MTk3ZWNhODFi
YmRiYzRlMDU2N2U0M2MwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCkBAIC0zMTcsOSArMzE4LDkgQEAgdm9p
ZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IHNyY0Zvcm1hdCwgY29uc3QgdWkKIAogfQogCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1h
Z2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4
dEdMSW1hZ2VFeHRyYWN0b3I6On5HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yKCkgPSBk
ZWZhdWx0OwogCi1ib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6
ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24p
Citib29sIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wg
aWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKQogewogICAgIGlmICghbV9p
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29jb2EubW0KaW5kZXggMzJhZTU1Yzk5OWUwMTg3NTkzN2NmOTQ5NGJiNDJiZDUyNDVh
MmM3OS4uMTllNWQ4Njc3NmVjZTY1ZTZlMWRiYjFjNWRiODBhM2ZmN2QwNmNjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0zODgsMTAgKzM4OCw4IEBA
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1fY29u
dGV4dE9iaikgeworICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAg
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgLy8gVE9ETzogY2hlY2sgcmVzdWx0LgogICAgICAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICAgICAgaWYgKGF0dHJz
LmFudGlhbGlhcykgewpAQCAtNDA4LDE4ICs0MDYsMTggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRlVGV4
dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlmICht
X3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1
ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLQotICAgICAgICBpZiAobV9k
aXNwbGF5QnVmZmVyUGJ1ZmZlcikgewotICAgICAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFnZSht
X2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7Ci0g
ICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZm
ZXJQYnVmZmVyKTsKLSAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVyUGJ1
ZmZlcikKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5
QnVmZmVyUGJ1ZmZlcik7CisgICAgaWYgKG1fd2ViR0xMYXllcikgewogICAgICAgICBhdXRvIHJl
Y3ljbGVkQnVmZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKICAgICAgICAgaWYg
KHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZSht
X2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7CiAgICAgICAgIGF1dG8gY29udGVu
dHNIYW5kbGUgPSBbbV93ZWJHTExheWVyIGRldGFjaENsaWVudF07CiAgICAgICAgIGlmIChjb250
ZW50c0hhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmos
IGNvbnRlbnRzSGFuZGxlKTsKLQorICAgIH0KKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAg
ICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
U1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9k
aXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwogICAgIH0KQEAgLTU1MywxMiArNTUxLDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNW
aXNpYmxlKQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVwZGF0ZUNHTENvbnRleHQoKQogewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIExPRyhXZWJHTCwg
IkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2FsbCBD
R0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlEaXNw
bGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nh
c3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9
IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCmluZGV4IGJiZDlkNDQ2ZjkxZWQ1
ZTFiYmJhNGQzNzAyZDQzMmY3MWVmZmE0ZTAuLjE3Nzg2YTY0YmE0ZTFkYTAwOTY0ZWFlOTk3ZDI5
Mjc2NGRhZDE4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC01MCwxNyArNTAs
MjUgQEAgRXh0ZW5zaW9uc0dMT3BlbkdMOjp+RXh0ZW5zaW9uc0dMT3BlbkdMKCkgPSBkZWZhdWx0
OwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAs
IGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0
WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQg
bG9uZyBmaWx0ZXIpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtNzYsNyArODQs
OSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQo
KSkKICAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTkwLDcgKzEw
MCw5IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0
ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFycmF5
KGFycmF5KTsKQEAgLTEwMiw3ICsxMTQsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVu
R0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBFeHRl
bnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1
cHBvcnRlZCgpKQogICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xOTYsNiAr
MjEwLDkgQEAgYm9vbCBFeHRlbnNpb25zR0xPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgbmFtZSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJzRVhU
KEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vICBGSVhN
RTogaW1wbGVtZW50IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3Jtcy4KICNpZiBQTEFURk9STShH
VEspCiAgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOwpAQCAtMjA3LDcgKzIyNCw5IEBAIHZv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29uc3Qg
R0NHTGVudW0qIGJ1ZnMpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NH
THNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2VkKG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICNlbHNlCkBAIC0yMjAsNyArMjM5LDkgQEAg
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9k
ZSwgR0NHTGludCBmaXJzdCwgR0NHTHMKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAg
ICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50
KTsKICNlbHNlCkBAIC0yMzQsNyArMjU1LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEcKIAog
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5k
ZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsVmVydGV4QXR0cmliRGl2aXNv
cihpbmRleCwgZGl2aXNvcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAK
aW5kZXggZjY0YmRlZTMxMjkzM2JmM2VkZDVmYmRmNTMxOTJkYjQ1NGE3ZWRjNi4uYjQ3OWRlMzZh
ZDEwNjBiMmM2ZjcwNmRiOWI4MjAyZDk1ZmFlMGZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMRVMuY3BwCkBAIC04NSw2ICs4NSw4IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6Omlz
RW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2ln
bmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQogeworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9n
bEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKICAgICBlbHNlCkBAIC05Myw2ICs5
NSw4IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
bV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlCkBAIC0xMDYsNiArMTEwLDggQEAgdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8sIGxv
bmcgLyogc3JjWTAgKi8sIGwKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HKQogICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgZWxzZQpAQCAtMTI5LDggKzEzNSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAg
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBHTHVpbnQgYXJyYXkgPSAwOwogICAgICAgICBtX2dsR2VuVmVydGV4
QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTE0NCwzMyAr
MTUxLDM1IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VT
KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9n
bERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09F
UykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFy
cmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCiBHQ0dMYm9v
bGVhbiBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2Jq
ZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJc1Zl
cnRleEFycmF5T0VTKQorICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykgeworICAgICAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CiAgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0K
KyAgICB9CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5
T0VTKQorICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKIH0KIApAQCAtMTg4LDggKzE5Nyw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVzICE9
IEdMX05PX0VSUk9SKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CiAgICAg
aWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1fZ2xH
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9
IFVOS05PV05fQ09OVEVYVF9SRVNFVDsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgICAgICByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzRVhUKCk7CiAgICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9OT19F
UlJPUikKICAgICAgICAgICAgIG1fY29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVzZXQ7
CiAgICAgICAgIHJldHVybiByZWFzb25Gb3JSZXNldDsKQEAgLTIwMiw3ICsyMTIsOSBAQCBpbnQg
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlw
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpCiB7CiAgICAgaWYgKG1fZ2xSZWFkblBp
eGVsc0VYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
ICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMg
d2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAgICAgLy8gYWxsIHByZXZp
b3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMu
CiAgICAgICAgIDo6Z2xGbHVzaCgpOwpAQCAtMjE5LDcgKzIzMSw5IEBAIHZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6CiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdD
R0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpw
YXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2dsR2V0
blVuaWZvcm1mdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTIzMCw3ICsyNDQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwg
R0NHTAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykK
IHsKICAgICBpZiAobV9nbEdldG5Vbmlmb3JtaXZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRuVW5pZm9y
bWl2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMjQ1LDcgKzI2MSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7CiB9CiAKQEAgLTI1Niw3ICsyNzQsOSBAQCB2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTEVTOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNp
emVpIGNvdW50LAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKQEAgLTI2Nyw3ICsyODcsOSBA
QCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50
IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xWZXJ0ZXhBdHRy
aWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmNwcAppbmRleCBjMWY5MjY1YjE2OTVhNWQ2NGMzN2NmYWY1YzhjMDRkYzA5
YzU4MWIwLi41YmU1YTlkNjczYjZkYTA5ZGYyM2Q4YjUyNGZkODIzY2I2Yzg5M2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKQEAgLTMxLDI0NiArMzEsMTAgQEAKICNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5o
IgotI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7
Ci0KLUdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0NHTGVudW0g
ZGVzdGluYXRpb25Gb3JtYXQsIEdDR0xlbnVtIGRlc3RpbmF0aW9uVHlwZSkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
Rm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjhfUzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzhfUzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjhfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQThfUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURToKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQl9JTlRFR0VSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0I4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkE6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkFfSU5URUdFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0U6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ukc4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKLSAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNIT1JUOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lO
VEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkcxNl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2X1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNl9TOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1h
dCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTY7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkQxNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR19JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTY7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6SU5UOgotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMl9TOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lO
VEVHRVI6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkczMl9TOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyX1M7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMl9TOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQp
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpEMzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICAgICAgc3dpdGNo
IChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkExNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkVEOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6Ci0gICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0Jf
QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0
Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkczMkY7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpE
MzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjU2NTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzVfOV85XzlfUkVWOgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCNTk5OTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEUzI0Xzg7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0g
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYx
MUYxMUY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEyXzEwXzEwXzEwOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGRzdEZvcm1hdDsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlc2V0QnVmZmVyc1RvQXV0b0NsZWFyKCkKIHsKICAgICBHQ0dM
dWludCBidWZmZXJzID0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CkBAIC0z
MDcsMTMgKzcxLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVByZXNl
cnZlRHJhd2luZ0J1ZmZlcigpCiAgICAgbV9idWZmZXJzVG9BdXRvQ2xlYXIgPSAwOwogfQogCisj
aWYgIVVTRShBTkdMRSkKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkRS
ZXNvdXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJv
cmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHVucGFja0FsaWdu
bWVudCkKIHsKICAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25t
ZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgp
OwogICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgaWYgKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKSB7CiAgICAgICAgIHVuc2lnbmVkIHNpemU7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpQaXhlbFN0b3JlUGFyYW1zIHBhcmFtczsKKyAgICAgICAgUGl4
ZWxTdG9yZVBhcmFtcyBwYXJhbXM7CiAgICAgICAgIHBhcmFtcy5hbGlnbm1lbnQgPSB1bnBhY2tB
bGlnbm1lbnQ7CiAgICAgICAgIEdDR0xlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCBwYXJhbXMsICZzaXplLCBudWxscHRy
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19F
UlJPUikgewpAQCAtMzI5LDQ4NCArOTQsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZQogICAg
IH0KICAgICByZXR1cm4gdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwogfQorI2Vu
ZGlmCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21w
b25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6IC8vIFRyZWF0IGl0IGFzIG9uZSBjb21wb25lbnQu
Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ukc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoK
LSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6Ci0gICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OAotICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKLSAg
ICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21w
b25lbnQgPSBzaXplb2YoR0NHTGJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQg
PSBzaXplb2YoR0NHTHVieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U0hPUlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dM
c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDR0x1c2hv
cnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTHVzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0g
c2l6ZW9mKEdDR0xpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihH
Q0dMdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
SU5UXzVfOV85XzlfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF8yXzEwXzEwXzEwX1JFVjoKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAg
ICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQ0dMdWludCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGZsb2F0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0NHTGhhbGZmbG9h
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMy
X1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDR0xmbG9hdCkgKyBzaXplb2YoR0NHTHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi0jaWYgIVVTRShBTkdMRSkKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3Np
YmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51bSYgdHlwZSkKLXsKLSNkZWZpbmUgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1h
Y3JvKSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86IFwKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0
TWFjcm87IFwKLSAgICAgICAgdHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlTWFj
cm87IFwKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSOCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAs
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk0gICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkVEICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkYg
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgSEFMRl9G
TE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSRUQgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhVSSAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlI4SSAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9J
TlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UjE2SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIg
ICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
MzJJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkcgICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9S
TSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSRzE2RiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
RyAgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMkYgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHOFVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVH
RVIgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkcxNlVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAg
LCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
VUkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UkczMkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdfSU5URUdFUiAgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjggICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpTUkdCOCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ig
ICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1ICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzZf
NSAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjhfU05PUk0gICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAg
ICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRiAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVYgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCOV9FNSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBV
TlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RiAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQiAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkYg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UkdCOFVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5U
RUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjMyVUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAg
ICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkkgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBOCAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9S
TSAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEJZVEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkdCNV9BMSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0ICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNF80
XzRfNCAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IxMF9BMiAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAg
ICAgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RiAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEzMkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwg
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJ
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBCWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUkgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSSAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTE2SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9J
TlRFR0VSICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkkgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgSU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBMzJVSSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIg
ICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTYgLCBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVCAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNCAsIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09N
UE9ORU5UMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBGTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDggLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RF
TkNJTCAgLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICAgICwgRXh0
ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JH
Ql9BTFBIQV9FWFQgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQgICAgICAs
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSN1bmRlZiBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFCi0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQotCi1HQ0dMZW51bSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoCi0gICAgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgY29uc3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlBp
eGVsU3RvcmVQYXJhbXMmIHBhcmFtcywKLSAgICB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRlcywg
dW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzLCB1bnNpZ25lZCogc2tpcFNpemVJbkJ5dGVzKQotewot
ICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVzKTsKLSAgICBBU1NFUlQocGFyYW1zLmFsaWdubWVu
dCA9PSAxIHx8IHBhcmFtcy5hbGlnbm1lbnQgPT0gMiB8fCBwYXJhbXMuYWxpZ25tZW50ID09IDQg
fHwgcGFyYW1zLmFsaWdubWVudCA9PSA4KTsKLSAgICBBU1NFUlQocGFyYW1zLnJvd0xlbmd0aCA+
PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLmltYWdlSGVpZ2h0ID49IDApOwotICAgIEFTU0VSVChw
YXJhbXMuc2tpcFBpeGVscyA+PSAwKTsKLSAgICBBU1NFUlQocGFyYW1zLnNraXBSb3dzID49IDAp
OwotICAgIEFTU0VSVChwYXJhbXMuc2tpcEltYWdlcyA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAw
IHx8IGhlaWdodCA8IDAgfHwgZGVwdGggPCAwKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0IHx8ICFkZXB0
aCkgewotICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChwYWRkaW5n
SW5CeXRlcykKLSAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChz
a2lwU2l6ZUluQnl0ZXMpCi0gICAgICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gMDsKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKLSAgICB9Ci0KLSAgICBpbnQg
cm93TGVuZ3RoID0gcGFyYW1zLnJvd0xlbmd0aCA+IDAgPyBwYXJhbXMucm93TGVuZ3RoIDogd2lk
dGg7Ci0gICAgaW50IGltYWdlSGVpZ2h0ID0gcGFyYW1zLmltYWdlSGVpZ2h0ID4gMCA/IHBhcmFt
cy5pbWFnZUhlaWdodCA6IGhlaWdodDsKLQotICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50
LCBjb21wb25lbnRzUGVyUGl4ZWw7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFt
ZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25l
bnQpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTTsKLSAg
ICB1bnNpZ25lZCBieXRlc1Blckdyb3VwID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25lbnRz
UGVyUGl4ZWw7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRW
YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihyb3dMZW5ndGgpOwotICAgIGNoZWNrZWRWYWx1
ZSAqPSBieXRlc1Blckdyb3VwOwotICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0KLSAg
ICB1bnNpZ25lZCBsYXN0Um93U2l6ZTsKLSAgICBpZiAocGFyYW1zLnJvd0xlbmd0aCA+IDAgJiYg
cGFyYW1zLnJvd0xlbmd0aCAhPSB3aWR0aCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gdG1wID0gd2lkdGg7Ci0gICAgICAgIHRtcCAqPSBieXRlc1Blckdyb3Vw
OwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgbGFzdFJvd1NpemUgPSB0
bXAudW5zYWZlR2V0KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxhc3RSb3dTaXplID0gY2hlY2tl
ZFZhbHVlLnVuc2FmZUdldCgpOwotCi0gICAgdW5zaWduZWQgcGFkZGluZyA9IDA7Ci0gICAgdW5z
aWduZWQgcmVzaWR1YWwgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCkgJSBwYXJhbXMuYWxpZ25t
ZW50OwotICAgIGlmIChyZXNpZHVhbCkgewotICAgICAgICBwYWRkaW5nID0gcGFyYW1zLmFsaWdu
bWVudCAtIHJlc2lkdWFsOwotICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFkZGluZzsKLSAgICB9
Ci0gICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICB1bnNpZ25lZCBwYWRkZWRSb3dT
aXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwotCi0gICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IHJvd3MgPSBpbWFnZUhlaWdodDsKLSAgICByb3dzICo9IChkZXB0aCAt
IDEpOwotICAgIC8vIExhc3QgaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IElNQUdFX0hFSUdIVCBw
YXJhbWV0ZXIuCi0gICAgcm93cyArPSBoZWlnaHQ7Ci0gICAgaWYgKHJvd3MuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7Ci0g
ICAgY2hlY2tlZFZhbHVlICo9IChyb3dzIC0gMSk7Ci0gICAgLy8gTGFzdCByb3cgaXMgbm90IGFm
ZmVjdGVkIGJ5IFJPV19MRU5HVEggcGFyYW1ldGVyLgotICAgIGNoZWNrZWRWYWx1ZSArPSBsYXN0
Um93U2l6ZTsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwotICAgICppbWFnZVNpemVJ
bkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwotICAgIGlmIChwYWRkaW5nSW5CeXRl
cykKLSAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGluZzsKLQotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBza2lwU2l6ZSA9IDA7Ci0gICAgaWYgKHBhcmFtcy5za2lw
SW1hZ2VzID4gMCkgewotICAgICAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
dG1wID0gcGFkZGVkUm93U2l6ZTsKLSAgICAgICAgdG1wICo9IGltYWdlSGVpZ2h0OwotICAgICAg
ICB0bXAgKj0gcGFyYW1zLnNraXBJbWFnZXM7Ci0gICAgICAgIGlmICh0bXAuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
OwotICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0gICAgfQotICAgIGlmIChw
YXJhbXMuc2tpcFJvd3MgPiAwKSB7Ci0gICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92
ZXJmbG93PiB0bXAgPSBwYWRkZWRSb3dTaXplOwotICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBS
b3dzOwotICAgICAgICBpZiAodG1wLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICAgICAgc2tpcFNpemUgKz0g
dG1wLnVuc2FmZUdldCgpOwotICAgIH0KLSAgICBpZiAocGFyYW1zLnNraXBQaXhlbHMgPiAwKSB7
Ci0gICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiB0bXAgPSBieXRlc1Bl
ckdyb3VwOwotICAgICAgICB0bXAgKj0gcGFyYW1zLnNraXBQaXhlbHM7Ci0gICAgICAgIGlmICh0
bXAuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFOwotICAgICAgICBza2lwU2l6ZSArPSB0bXAudW5zYWZlR2V0KCk7Ci0g
ICAgfQotICAgIGlmIChza2lwU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKLSAgICBpZiAoc2tpcFNpemVJbkJ5dGVz
KQotICAgICAgICAqc2tpcFNpemVJbkJ5dGVzID0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0KLSAg
ICBjaGVja2VkVmFsdWUgKz0gc2tpcFNpemUudW5zYWZlR2V0KCk7Ci0gICAgaWYgKGNoZWNrZWRW
YWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOwot
fQotCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6UGl4ZWxTdG9yZVBhcmFtczo6UGl4ZWxTdG9y
ZVBhcmFtcygpCi0gICAgOiBhbGlnbm1lbnQoNCkKLSAgICAsIHJvd0xlbmd0aCgwKQotICAgICwg
aW1hZ2VIZWlnaHQoMCkKLSAgICAsIHNraXBQaXhlbHMoMCkKLSAgICAsIHNraXBSb3dzKDApCi0g
ICAgLCBza2lwSW1hZ2VzKDApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFn
ZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VI
dG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9u
KQotewotICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGlt
YWdlSHRtbERvbVNvdXJjZTsKLSAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2Uo
cHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGlnbm9yZU5hdGl2
ZUltYWdlQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhY2tJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBo
YU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgc291cmNlSW1hZ2VXaWR0aCwg
dW5zaWduZWQgc291cmNlSW1hZ2VIZWlnaHQsIGNvbnN0IEludFJlY3QmIHNvdXJjZUltYWdlU3Vi
UmVjdGFuZ2xlLCBpbnQgZGVwdGgsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgaW50
IHVucGFja0ltYWdlSGVpZ2h0LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFp
bWFnZSB8fCAhcGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBw
YWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1l
bnQgPT0gMSkuCi0gICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7Ci0gICAgcGFyYW1zLmFsaWdu
bWVudCA9IDE7Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
c291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUu
aGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBudWxscHRyLCBudWxscHRyKSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHNvdXJjZUlt
YWdlV2lkdGgsIHNvdXJjZUltYWdlSGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVw
dGgsIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5wYWNrSW1hZ2VIZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkp
Ci0gICAgICAgIG9ic2VydmVyLT5kaWREcmF3KCppbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RJbWFnZURhdGEoCi0gICAg
SW1hZ2VEYXRhKiBpbWFnZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUsCi0gICAgaW50IGRlcHRoLCBpbnQgdW5w
YWNrSW1hZ2VIZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAg
aWYgKCFpbWFnZURhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSBp
bWFnZURhdGEtPndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0KCk7
Ci0KLSAgICB1bnNpZ25lZCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0
bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgUGl4ZWxTdG9yZVBhcmFtcyBwYXJhbXM7
Ci0gICAgcGFyYW1zLmFsaWdubWVudCA9IDE7Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgc291cmNlSW1hZ2VTdWJSZWN0YW5nbGUud2lkdGgoKSwgc291cmNl
SW1hZ2VTdWJSZWN0YW5nbGUuaGVpZ2h0KCksIGRlcHRoLCBwYXJhbXMsICZwYWNrZWRTaXplLCBu
dWxscHRyLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIGlmICgh
cGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBzb3VyY2VEYXRhRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwgZGVwdGgsIDAsIHVucGFja0lt
YWdlSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxT
dG9yZVBhcmFtcyYgdW5wYWNrUGFyYW1zLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGNvbnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIC8v
IEFzc3VtZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4K
LSAgICBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwg
dHlwZSk7Ci0KLSAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCi0gICAgdW5zaWduZWQg
Y29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAgICBpZiAoIWNvbXB1dGVG
b3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWws
ICZieXRlc1BlckNvbXBvbmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBieXRlc1BlclBpeGVsID0gY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7
Ci0gICAgZGF0YS5yZXNpemUod2lkdGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKLQotICAg
IHVuc2lnbmVkIGltYWdlU2l6ZUluQnl0ZXMsIHNraXBTaXplSW5CeXRlczsKLSAgICBjb21wdXRl
SW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsIHVucGFja1Bh
cmFtcywgJmltYWdlU2l6ZUluQnl0ZXMsIG51bGxwdHIsICZza2lwU2l6ZUluQnl0ZXMpOwotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4
ZWxzKTsKLSAgICBpZiAoc2tpcFNpemVJbkJ5dGVzKQotICAgICAgICBzcmNEYXRhICs9IHNraXBT
aXplSW5CeXRlczsKLQotICAgIGlmICghcGFja1BpeGVscyhzcmNEYXRhLCBzb3VyY2VEYXRhRm9y
bWF0LCB1bnBhY2tQYXJhbXMucm93TGVuZ3RoID8gdW5wYWNrUGFyYW1zLnJvd0xlbmd0aCA6IHdp
ZHRoLCBoZWlnaHQsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCksIDEsIHVucGFja1BhcmFt
cy5hbGlnbm1lbnQsIDAsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9w
OjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZ
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkE4OgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6Ukc4X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2X1M6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEMTY6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkJHUjg6Ci0gICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE4X1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QVJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QUJHUjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMl9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
QTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMl8xMF8x
MF8xMDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxMEYxMUYx
MUY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTk5OToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHMTZfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpEMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
RDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpEUzI0Xzg6Ci0g
ICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2X1M6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOgotICAgICAg
ICByZXR1cm4gNjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2X1M6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSRzMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSRzMyRjoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCMzJfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMkY6Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTMyX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTMyRjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFja1BpeGVscyhj
b25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVu
c2lnbmVkIHNvdXJjZURhdGFXaWR0aCwgdW5zaWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3Qg
SW50UmVjdCYgc291cmNlRGF0YVN1YlJlY3RhbmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGlu
YXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2
b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCi17Ci0gICAgQVNTRVJUKGRlcHRoID49
IDEpOwotICAgIFVOVVNFRF9QQVJBTShzb3VyY2VEYXRhSGVpZ2h0KTsgLy8gRGVyaXZlZCBmcm9t
IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkuCi0gICAgaWYgKCF1bnBhY2tJbWFnZUhl
aWdodCkKLSAgICAgICAgdW5wYWNrSW1hZ2VIZWlnaHQgPSBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xl
LmhlaWdodCgpOwotICAgIGludCB2YWxpZFNyYyA9IHNvdXJjZURhdGFXaWR0aCAqIFRleGVsQnl0
ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7Ci0gICAgaW50IHJlbWFpbmRlciA9IHNvdXJj
ZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAw
OwotICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBh
Y2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7Ci0gICAgaW50IHNyY1Jvd09mZnNl
dCA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUueCgpICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3Vy
Y2VEYXRhRm9ybWF0KTsKLQotICAgIERhdGFGb3JtYXQgZHN0RGF0YUZvcm1hdCA9IGdldERhdGFG
b3JtYXQoZGVzdGluYXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSk7Ci0gICAgaW50IGRzdFN0
cmlkZSA9IHNvdXJjZURhdGFTdWJSZWN0YW5nbGUud2lkdGgoKSAqIFRleGVsQnl0ZXNGb3JGb3Jt
YXQoZHN0RGF0YUZvcm1hdCk7Ci0gICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9u
RGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRl
ICogKChkZXB0aCAqIHNvdXJjZURhdGFTdWJSZWN0YW5nbGUuaGVpZ2h0KCkpIC0gMSk7Ci0gICAg
ICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7Ci0gICAgfQotICAgIGlmICghaGFzQWxwaGEoc291
cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFoYXNDb2xv
cihkc3REYXRhRm9ybWF0KSkKLSAgICAgICAgYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsK
LQotICAgIGlmIChzb3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFPcCA9
PSBBbHBoYU9wOjpEb05vdGhpbmcpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogYmFzZVB0ciA9
IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBzb3VyY2VEYXRhU3ViUmVjdGFuZ2xlLnkoKTsKLSAg
ICAgICAgY29uc3QgdWludDhfdCogYmFzZUVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBz
b3VyY2VEYXRhU3ViUmVjdGFuZ2xlLm1heFkoKTsKLQotICAgICAgICAvLyBJZiBwYWNraW5nIG11
bHRpcGxlIGltYWdlcyBpbnRvIGEgM0QgdGV4dHVyZSwgYW5kIGZsaXBZIGlzIHRydWUsCi0gICAg
ICAgIC8vIHRoZW4gdGhlIHN1Yi1yZWN0YW5nbGUgaXMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9m
IHRoZQotICAgICAgICAvLyAiYm90dG9tbW9zdCIgb2YgdGhvc2UgaW1hZ2VzLiBTaW5jZSB0aGUg
c291cmNlIHBvaW50ZXIgc3RyaWRlcyBpbgotICAgICAgICAvLyB0aGUgcG9zaXRpdmUgZGlyZWN0
aW9uLCB3ZSBuZWVkIHRvIGJhY2sgaXQgdXAgdG8gcG9pbnQgYXQgdGhlCi0gICAgICAgIC8vIGxh
c3QsIG9yICJ0b3Btb3N0Iiwgb2YgdGhlc2UgaW1hZ2VzLgotICAgICAgICBpZiAoZmxpcFkgJiYg
ZGVwdGggPiAxKSB7Ci0gICAgICAgICAgICBjb25zdCBwdHJkaWZmX3QgZGlzdGFuY2VUb1RvcElt
YWdlID0gKGRlcHRoIC0gMSkgKiBzcmNTdHJpZGUgKiB1bnBhY2tJbWFnZUhlaWdodDsKLSAgICAg
ICAgICAgIGJhc2VQdHIgLT0gZGlzdGFuY2VUb1RvcEltYWdlOwotICAgICAgICAgICAgYmFzZUVu
ZCAtPSBkaXN0YW5jZVRvVG9wSW1hZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBy
b3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOwotICAgICAg
ICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyArK2kpIHsKLSAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJhc2VQdHI7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90
KiBwdHJFbmQgPSBiYXNlRW5kOwotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgewot
ICAgICAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciArIHNyY1Jvd09mZnNldCwgcm93U2l6ZSk7
Ci0gICAgICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKLSAgICAgICAgICAgICAgICBkc3Qg
Kz0gZHN0U3RyaWRlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFzZVB0ciArPSB1bnBh
Y2tJbWFnZUhlaWdodCAqIHNyY1N0cmlkZTsKLSAgICAgICAgICAgIGJhc2VFbmQgKz0gdW5wYWNr
SW1hZ2VIZWlnaHQgKiBzcmNTdHJpZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcigKLSAgICAgICAgc291cmNl
RGF0YVN1YlJlY3RhbmdsZSwgZGVwdGgsCi0gICAgICAgIHVucGFja0ltYWdlSGVpZ2h0LCBzb3Vy
Y2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsCi0gICAgICAgIHNyY1N0cmlkZSwgc3JjUm93T2Zmc2V0
LCBkc3RTdHJpZGUpOwotICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJjZURhdGFGb3JtYXQsIGRz
dERhdGFGb3JtYXQsIGFscGhhT3ApOwotICAgIGlmICghY29udmVydGVyLnN1Y2Nlc3MoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggMjUyMTlmOGY1
MzFjYWRhM2FiZjVkMGU0MjE1MzM1YzEzNDcwZmUxOC4uY2RmNjQwOTkzNDM0ODJhNGMxNmQzY2Jl
MzQ3OWM4YzBhYmE0ODE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAg
LTg3LDI5ICs4NywyMCBAQCB0eXBlZGVmIFdURjo6SGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4g
U2hhZGVyTmFtZUhhc2g7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTsK
IAotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
R0wKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGZpbmFsIDogcHVibGljIEdyYXBoaWNz
Q29udGV4dEdMCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLCBwcml2YXRlIFdlYkdMTGF5ZXJD
bGllbnQKICNlbmRpZgogewogcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBvc2l0ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ29udGV4dExvc3Qo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlQ29udGV4dCgpID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSA9IDA7
Ci0gICAgfTsKLQogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlv
biA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4pOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgUmVmPEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
IHNoYXJlZENvbnRleHQpOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9iajsg
fQotICAgIFBsYXRmb3JtR0xPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV90ZXh0dXJlOyB9Ci0gICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xMYXll
ci5nZXQoKSk7IH0KKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0woKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KKyAgICBQ
bGF0Zm9ybUdMT2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
dGV4dHVyZTsgfQorICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwbGF5T2JqOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlnT2JqOyB9CiAg
ICAgc3RhdGljIEdDR0xlbnVtIElPU3VyZmFjZVRleHR1cmVUYXJnZXQoKTsKQEAgLTEyMSw3ICsx
MTIsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IGZpbmFsOwogI2VuZGlmCiAKLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW51bSBjbGFzcyBSZWxlYXNlQmVoYXZpb3IgewogICAg
ICAgICBQcmVzZXJ2ZVRocmVhZFJlc291cmNlcywKQEAgLTEzMCw5ICsxMjAsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGJvb2wgcmVsZWFzZUN1cnJlbnRDb250ZXh0KFJlbGVhc2VCZWhhdmlvcik7
CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50
cy5hZGQoJmNsaWVudCk7IH0KLSAgICB2b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVudCkg
eyBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9Ci0KICAgICAvLyBXaXRoIG11bHRpc2FtcGxp
bmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAKQEAgLTE0NSw4MSArMTMyLDExIEBAIHB1YmxpYzoKICAgICAv
LyBDb21waWxlIGEgc2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBBTkdMRS4KICAgICB2b2lk
IGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCk7CiAKLSAgICAvLyBIZWxwZXIg
dG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQg
dG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4K
LSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNl
dHRpbmcuCi0gICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgR0NHTGludCBhbGlnbm1lbnQgPSA0KTsKLQotICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIGNvbnN0OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycyBmb3Ig
dGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgotICAgIC8vCi0KLSAgICBzdHJ1
Y3QgUGl4ZWxTdG9yZVBhcmFtcyBmaW5hbCB7Ci0gICAgICAgIFBpeGVsU3RvcmVQYXJhbXMoKTsK
LQotICAgICAgICBHQ0dMaW50IGFsaWdubWVudDsKLSAgICAgICAgR0NHTGludCByb3dMZW5ndGg7
Ci0gICAgICAgIEdDR0xpbnQgaW1hZ2VIZWlnaHQ7Ci0gICAgICAgIEdDR0xpbnQgc2tpcFBpeGVs
czsKLSAgICAgICAgR0NHTGludCBza2lwUm93czsKLSAgICAgICAgR0NHTGludCBza2lwSW1hZ2Vz
OwotICAgIH07Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBwZXIgcGl4ZWwgYW5k
IGJ5dGVzIHBlciBjb21wb25lbnQKLSAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlw
ZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgotICAgIC8vIGVpdGhlciB3YXMgYW4gaW52
YWxpZCBlbnVtLgotICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVy
cyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAgICAgIHVuc2ln
bmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsCi0gICAgICAgIHVuc2lnbmVkKiBieXRlc1BlckNvbXBv
bmVudCk7Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFk
ZGluZ0luQnl0ZXMgaXMgbm90IG51bGwsIHBhZGRpbmcKLSAgICAvLyBpcyBhbHNvIGNhbGN1bGF0
ZWQgaW4gcmV0dXJuLiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWQsIG90aGVyd2lzZQotICAg
IC8vIHJldHVybiB0aGUgc3VnZ2VzdGVkIEdMIGVycm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9m
IHRoZSBmYWlsdXJlOgotICAgIC8vICAgSU5WQUxJRF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMg
bmVnYXRpdmUgb3Igb3ZlcmZsb3cgaGFwcGVucy4KLSAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBm
b3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgotICAgIHN0YXRpYyBHQ0dMZW51bSBjb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhHQ0dMZW51bSBmb3JtYXQsCi0gICAgICAgIEdDR0xlbnVtIHR5cGUsCi0gICAg
ICAgIEdDR0xzaXplaSB3aWR0aCwKLSAgICAgICAgR0NHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
R0NHTHNpemVpIGRlcHRoLAotICAgICAgICBjb25zdCBQaXhlbFN0b3JlUGFyYW1zJiwKLSAgICAg
ICAgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsCi0gICAgICAgIHVuc2lnbmVkKiBwYWRkaW5n
SW5CeXRlcywKLSAgICAgICAgdW5zaWduZWQqIHNraXBTaXplSW5CeXRlcyk7Ci0KICNpZiAhVVNF
KEFOR0xFKQotICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFs
Rm9ybWF0KEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSYgZm9ybWF0LCBHQ0dMZW51
bSYgdHlwZSk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKKyAgICBib29sIHRleEltYWdlMkRSZXNv
dXJjZVNhZmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRl
ciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IGFsaWdubWVudCA9IDQp
IGZpbmFsOworI2VuZGlmCiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdp
dmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAotICAgIC8vIHBhY2tpbmcgdGhl
IHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCi0gICAg
Ly8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1
cm5zIHRydWUKLSAgICAvLyB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFjdElt
YWdlRGF0YShJbWFnZURhdGEqLAotICAgICAgICBEYXRhRm9ybWF0LAotICAgICAgICBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwKLSAgICAgICAgaW50IGRlcHRoLAotICAg
ICAgICBpbnQgdW5wYWNrSW1hZ2VIZWlnaHQsCi0gICAgICAgIEdDR0xlbnVtIGZvcm1hdCwKLSAg
ICAgICAgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhLAotICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1
cmUKLSAgICAvLyBkYXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEg
cGFyYW1ldGVycy4KLSAgICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgdGlnaHRseSBwYWNrZWQgYWNj
b3JkaW5nIHRvIHRoZSBwYXNzZWQKLSAgICAvLyB1bnBhY2tQYXJhbXMsIHRoZSBvdXRwdXQgZGF0
YSB3aWxsIGJlIHRpZ2h0bHkgcGFja2VkLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNz
ZnVsLCBmYWxzZSBpZiBhbnkgZXJyb3Igb2NjdXJyZWQuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFj
dFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAgIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwKLSAgICAgICAgY29uc3QgUGl4ZWxTdG9yZVBh
cmFtcyYgdW5wYWNrUGFyYW1zLAotICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5
QWxwaGEsCi0gICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKLSAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdCBmaW5hbDsKIAog
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCkBAIC01
MzcsNyArNDU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRCdWZmZXJzVG9BdXRvQ2xlYXIo
KTsKICAgICB2b2lkIHNldEJ1ZmZlcnNUb0F1dG9DbGVhcihHQ0dMYml0ZmllbGQpOwogICAgIEdD
R0xiaXRmaWVsZCBnZXRCdWZmZXJzVG9BdXRvQ2xlYXIoKSBjb25zdDsKLSAgICB2b2lkIGVuYWJs
ZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxlUHJlc2Vy
dmVEcmF3aW5nQnVmZmVyKCkgZmluYWw7CiAKICAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5n
ZWROb3RpZmljYXRpb24oKTsKICAgICB2b2lkIHNpbXVsYXRlQ29udGV4dENoYW5nZWQoKTsKQEAg
LTU1MCwxNyArNDY3LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRl
eChHQ0dMdWludCkgZmluYWw7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJv
b2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCk7Ci0gICAgYm9vbCBiaW5kRGlzcGxheUJ1
ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1
ZmZlcik7Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBQTEFURk9S
TShNQUMpCiAgICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7CiAjZW5kaWYKLSNlbmRpZiAvLyBQ
TEFURk9STShDT0NPQSkKIAotICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7Cisg
ICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKSBmaW5hbDsKIAotICAgIEdyYXBoaWNz
Q29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9CisgICAg
R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNy
ZWF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3Jl
YXRpb247IH0KIAogICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRp
b24KICAgICBQbGF0Zm9ybUdMT2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIGZpbmFsOwpAQCAtNTc3LDE1
ICs0OTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCkgZmluYWw7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QpIGZpbmFs
OwogCi0gICAgLy8gU3ludGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0
dXJuZWQgZnJvbSBhCi0gICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2Vk
IHRvIGVtdWxhdGUgT3BlbkdMIEVTCi0gICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9w
IGFuZCB0byBlbmZvcmNlIGFkZGl0aW9uYWwgZXJyb3IKLSAgICAvLyBjaGVja2luZyBtYW5kYXRl
ZCBieSBXZWJHTC4KLSAgICAvLwotICAgIC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJv
ciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBvbmUKLSAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4g
ZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0gZnJvbSBjYWxscyB0bwotICAgIC8vIGdldEVycm9yIGlu
IHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihH
Q0dMZW51bSBlcnJvcik7CisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQ0dMZW51bSBlcnJv
cikgZmluYWw7CiAKICAgICAvLyBSZWFkIHJlYWwgT3BlbkdMIGVycm9ycywgYW5kIG1vdmUgdGhl
bSB0byB0aGUgc3ludGhldGljCiAgICAgLy8gZXJyb3IgbGlzdC4gUmV0dXJuIHRydWUgaWYgYXQg
bGVhc3Qgb25lIGVycm9yIGlzIG1vdmVkLgpAQCAtNTk3LDU5ICs1MDIsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gZGV0ZXJtaW5lIHRoaXMuCiAgICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkg
ZmluYWw7CiAKLSAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7
Ci0KLSAgICAvLyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlz
IHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yCi0gICAgLy8gYWNjb3Jk
aW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBh
bmQgQWxwaGFPcCBmbGFncy4KLSAgICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAg
IHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdD
R0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZv
cm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZUltYWdlV2lkdGgsIHVuc2lnbmVkIHNv
dXJjZUltYWdlSGVpZ2h0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VJbWFnZVN1YlJlY3RhbmdsZSwg
aW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBhY2tJbWFn
ZUhlaWdodCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIGNsYXNzIEltYWdlRXh0cmFj
dG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgRE9NU291
cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLQotICAg
ICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0
aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3VyY2VzCi0gICAgICAgIC8v
IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgotICAgICAgICB+SW1hZ2VFeHRy
YWN0b3IoKTsKLQotICAgICAgICBib29sIGV4dHJhY3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4
dHJhY3RTdWNjZWVkZWQ7IH0KLSAgICAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEoKSB7
IHJldHVybiBtX2ltYWdlUGl4ZWxEYXRhOyB9Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlV2lkdGgo
KSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KLSAgICAgICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQo
KSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9Ci0gICAgICAgIERhdGFGb3JtYXQgaW1hZ2VTb3Vy
Y2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0OyB9Ci0gICAgICAgIEFscGhh
T3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9Ci0gICAgICAgIHVuc2lnbmVk
IGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFj
a0FsaWdubWVudDsgfQotICAgICAgICBET01Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlKCkgeyBy
ZXR1cm4gbV9pbWFnZUh0bWxEb21Tb3VyY2U7IH0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBF
YWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhv
ZC4KLSAgICAgICAgLy8gRXh0cmFjdHMgdGhlIGltYWdlIGFuZCBrZWVwcyB0cmFjayBvZiBpdHMg
c3RhdHVzLCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsIFNvdXJjZSBBbGlnbm1lbnQsIGZvcm1hdCBh
bmQgQWxwaGFPcCBldGMsCi0gICAgICAgIC8vIG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBv
ciByZWxldmFudCBkYXRhIGlmIG5lZWRlZCBhbmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcwot
ICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGJvb2wgaWdub3JlTmF0aXZlSW1hZ2VBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7Ci0jZWxpZiBVU0UoQ0cpCi0gICAgICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBt
X2RlY29kZWRJbWFnZTsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9waXhlbERhdGE7
Ci0gICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXplZFJHQkE4RGF0YTsKLSNl
bmRpZgotICAgICAgICBJbWFnZSogbV9pbWFnZTsKLSAgICAgICAgRE9NU291cmNlIG1faW1hZ2VI
dG1sRG9tU291cmNlOwotICAgICAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKLSAgICAgICAg
Y29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZVdp
ZHRoOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OwotICAgICAgICBEYXRhRm9ybWF0
IG1faW1hZ2VTb3VyY2VGb3JtYXQ7Ci0gICAgICAgIEFscGhhT3AgbV9hbHBoYU9wOwotICAgICAg
ICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OwotICAgIH07Ci0KLSAgICB2
b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFpbE5leHRTdGF0dXNDaGVjayA9
IHRydWU7IH0KKyAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSBmaW5hbCB7IG1f
ZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7IH0KIAotICAgIEdDR0xlbnVtIGFjdGl2ZVRleHR1
cmVVbml0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsgfQotICAg
IEdDR0xlbnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKTsgfQotICAgIEdDR0xlbnVtIGN1cnJlbnRCb3VuZFRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KICAgICB1bnNp
Z25lZCB0ZXh0dXJlU2VlZChHQ0dMdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTY1
NywxNyArNTExLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjcmVlbkRpZENoYW5nZShQbGF0Zm9y
bURpc3BsYXlJRCk7CiAjZW5kaWYKIAotICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKTsKKyAg
ICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwogCi0gICAgLy8gSGVscGVyIGZvciBw
YWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVEYXRhIHdoaWNoIGlt
cGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCi0gICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQg
T3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KLSAgICAvLyBBIHNvdXJjZVVucGFj
a0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UKLSAgICAvLyBkYXRh
IGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGgu
Ci0gICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVuIHJvd3Mu
Ci0gICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHNvdXJjZURhdGFXaWR0aCwgdW5z
aWduZWQgc291cmNlRGF0YUhlaWdodCwgY29uc3QgSW50UmVjdCYgc291cmNlRGF0YVN1YlJlY3Rh
bmdsZSwgaW50IGRlcHRoLCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGludCB1bnBh
Y2tJbWFnZUhlaWdodCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3Rp
bmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKTsK
KyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBl
dmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVi
bGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3Bl
bkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwog
CiAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBj
cmVhdGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50
aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCkBAIC02OTUsMTMgKzU0NiwxMiBA
QCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgYm9vbCBhbGxvd09mZmxpbmVS
ZW5kZXJlcnMoKSBjb25zdDsKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygp
OworICAgIGJvb2wgYmluZERpc3BsYXlCdWZmZXJCYWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IGJhY2tpbmcsIHZvaWQqIHBidWZmZXIpOwogICAgIC8vIFdlYkdMTGF5ZXJDbGllbnQg
b3ZlcnJpZGVzLgotICAgIHZvaWQgZGlkRGlzcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
RGlzcGxheSgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07
Ci0gICAgaW50IG1fY3VycmVudEhlaWdodCB7IDAgfTsKLQogI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CkBAIC04ODgsOCArNzM4LDYg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQ
cml2YXRlPiBtX3ByaXZhdGU7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGll
bnRzOwotCiAgICAgYm9vbCBtX2lzRm9yV2ViR0wyIHsgZmFsc2UgfTsKICAgICBib29sIG1fdXNp
bmdDb3JlUHJvZmlsZSB7IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQmFzZS5jcHAKaW5kZXggMjBiZjJmNGY5ODRjYzdmMmJiNzNjNmRhNTU5ZjA4MDBhMzNh
MTQ5Yy4uNzUwZWQzMjZlY2U2NWU4OGY2YjQxMzYwMTVjNGY5MzM3NDQ4OWNhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKQEAgLTIzNyw3ICsyMzcsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVj
ZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICNpZiBVU0UoT1BFTkdMKQogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsK
ICAgICBjYXNlIERFUFRIX1NURU5DSUw6CkBAIC0yNjQsNyArMjY2LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyBy
ZXR1cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzCiAgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1
cm4gdGhlIG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4K
ICAgICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRz
IHRvIGJlIGRpdmlkZWQgYnkgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBzd2l0Y2ggKHBu
YW1lKSB7CiAjaWYgVVNFKE9QRU5HTCkKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlM6CkBAIC0zMTAsNyArMzE0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBB
U1NFUlQocmFuZ2UpOwogICAgIEFTU0VSVChwcmVjaXNpb24pOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAKICAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMT1dfSU5UOgpAQCAtNDAzLDEzICs0MDksMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xlbnUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xh
bXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCkBAIC00MjgsNyArNDM4LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLAogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGds
Rmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBh
bGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5n
IHBpeGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsKICAgICBBU1NF
UlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwogICAgIGlm
IChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
aW5kZXggNzQxZWU0YzE0ZWFhMjY2YTc5ZmViN2QxMjA2MmFhYWEzY2ViNTFlMC4uYjhmODlmZGI4
YmRkMTJhOTVmMDY4NTEwNmFiNGEzYjAwMTg5YzhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC0yMDAsNyArMjAwLDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIGlmIChtX2xheWVyQ29t
cG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICNpZiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2Nv
cGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKQEAgLTIzOSw3ICsyNDEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNp
Z25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50
V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKIAogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAo
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKQEAgLTI3Myw5ICsyNzcsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBj
aGFyICpwaXhlbHMsIGludCBwaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0woKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVu
dFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjgzLDEyICsyODQsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVu
dFdpZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBUZW1w
b3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxT
RSk7CkBAIC00MjUsMTQgKzQyOCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
cmVjaXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKICAgICA6Omds
QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTQ0MSw3ICs0NDEsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMTwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5yZW1vdmUocHJvZ3JhbSk7CiAgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwogfQpAQCAtNDQ5LDcgKzQ1MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0
dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWFwcGVkTmFt
ZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVU
RSwgbmFtZSk7CiAgICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGlu
ZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKQEAgLTQ1OCwxMyArNDYxLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJp
bmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmlu
ZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVm
ZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEdMdWludCBmYm87CiAgICAgaWYgKGJ1
ZmZlcikKICAgICAgICAgZmJvID0gYnVmZmVyOwpAQCAtNDgwLDEwMiArNDg3LDEzMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRS
ZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0
YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9z
dGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKICAgICA6OmdsQmluZFRl
eHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1w
ZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9k
ZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKIH0KIAogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NH
TGVudW0gZGZhY3RvcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRGdW5j
KHNmYWN0b3IsIGRmYWN0b3IpOwogfSAgICAgICAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0Is
IEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhh
LCBkc3RBbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRh
dGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAw
LCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NH
TGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwg
R0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwog
fQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcmV0dXJu
IDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcs
IEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsQ2xlYXIobWFzayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVh
biBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUgd2F5IEFOR0xF
IG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKICAgICAvLyBwb2ludCBhIGdsb2JhbCBoYXNobWFwIHRv
IHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgpAQCAtNjM3LDcgKzY3NSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hhZGVyU291cmNl
RW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CiAKQEAgLTY3MSw3ICs3MTAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIAog
ICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CkBAIC02ODYsNyArNzI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRl
eEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cKIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIAog
ICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7
CkBAIC03MDEsMTkgKzc0NCwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC03MjEsODMgKzc3MCwx
MDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xEZXRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlz
YWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERpc2Fi
bGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRHJhd0Fy
cmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBH
Q0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkp
KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsRmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNo
KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50
LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBs
ZXZlbCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJl
MkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAg
ICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVy
ZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xl
bnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZyb250RmFjZShtb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NH
TGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZW5lcmF0ZU1p
cG1hcCh0YXJnZXQpOwogfQogCkBAIC04MDcsNyArODgyLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0wKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xp
bnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKICAgICBW
ZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KQEAgLTg1Myw3ICs5MzAs
OSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUg
PSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAtODk5LDcgKzk3OCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xH
ZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0K
IApAQCAtMTA0Miw3ICsxMTIzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICBpZiAo
IXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwog
CiAgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6Z2xHZXRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTA1NCwxNCArMTEzNywxOCBAQCBpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgYwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKIAogICAg
IC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcg
YSBoYW5nIGlmCkBAIC0xMDg4LDE5ICsxMTc1LDI1IEBAIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRFcnJvcigpCiAgICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50
YWtlRmlyc3QoKTsKICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJ
T047CisKICAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7CiB9CiAKIFN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKQEAgLTExMDks
MTMgKzEyMDIsMTcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVm
ZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogICAgIGlmICghYnVmZmVyKQogICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1
cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7CiB9CiAKQEAgLTExMjQs
NyArMTIyMSw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1l
YnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgaWYgKCFmcmFtZWJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCiAgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKIH0KIApA
QCAtMTEzMyw3ICsxMjMyLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgaWYgKCFwcm9ncmFtKQog
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gRkxfRkFMU0U7CisK
ICAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTE0Miw3ICsxMjQz
LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVy
KFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmUKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAg
ICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwogfQogCkBAIC0x
MTUxLDcgKzEyNTQsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJl
dHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKIH0KIApAQCAtMTE2MCwyMCArMTI2NSwyNiBAQCBH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtR0xP
YmplY3QgdGV4dHVyZSkKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNUZXh0
dXJlKHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lk
dGgoR0NHTGZsb2F0IHdpZHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xMaW5l
V2lkdGgod2lkdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJv
Z3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogCiAgICAgR0NHTHNpemVpIGNvdW50ID0gMDsKICAgICBQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CkBAIC0xMTg3LDI1ICsxMjk4LDMzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3Rvciwg
dW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFn
ZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTEyMTMsNyAr
MTMzMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5Owog
CkBAIC0xMjI0LDE3OCArMTM0NSwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVu
YywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYw
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6
ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFy
cmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIApAQCAtMTQwMyw3MyArMTU4MCw5NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWYWxp
ZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRl
eCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAs
IEdDR0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwg
djAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjNmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50
IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxv
YXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjRmKGlu
ZGV4LCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBv
aW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJv
b2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgs
IHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xW
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiAoIVVTRShPUEVOR0xfRVMpICYm
IChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAg
ICA6OmdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC0xNDgyLDcgKzE2ODMsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6OmdsRGVsZXRlVmVy
dGV4QXJyYXlzKDEsICZhcnJheSk7CiAjZW5kaWYKQEAgLTE0OTMsNyArMTY5Niw5IEBAIEdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwog
ICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogI2lmICghVVNFKE9QRU5HTF9FUykg
JiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQog
ICAgIHJldHVybiA6OmdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CiAjZW5kaWYKQEAgLTE1MDIsNyAr
MTcwNyw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFy
cmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xCaW5kVmVydGV4QXJyYXko
YXJyYXkpOwogI2Vsc2UKQEAgLTE1MTIsMTkgKzE3MTksMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBH
Q0dMYm9vbGVhbiogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7
CiB9CiAKQEAgLTE1MzIsNyArMTc0NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQxMTc4OiBCZWZv
cmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5o
IGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3Bl
bkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVl
KTsKQEAgLTE1NDEsNyArMTc1Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
aW50NjQqIHZhbHVlKQogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFi
bGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNy
ZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMg
My4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CkBAIC0xNTUxLDcg
KzE3NjgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3Yo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQwogewogICAgIFVOVVNFRF9QQVJBTShw
bmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICAqdmFsdWUgPSAwOwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMg
d2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5k
IGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAg
Ly8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKQEAgLTE1NTksNyAr
MTc3OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdihH
Q0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCkKICAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7
IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIDo6Z2xHZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1l
LCB2YWx1ZSk7CkBAIC0xNTY3LDcgKzE3ODgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUp
OwogfQogCkBAIC0xNTc3LDcgKzE4MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVjdCBwcgogICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQo
cHJvZ3JhbSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cC5lbmQoKSkgewogICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShw
bmFtZSk7CkBAIC0xNjU1LDcgKzE4ODAsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBB
U1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGlu
dCBsZW5ndGggPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0df
TEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2NzQsNyArMTkwMSw5IEBA
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjgy
LDcgKzE5MTEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbQogewogICAgIEFTU0VSVChzaGFk
ZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCkBAIC0xNzE3LDcgKzE5NDgsOCBA
QCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKQEAgLTE3NDQsNyArMTk3Niw4IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VS
VChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgYXV0
byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzU1LDI1ICsxOTg4LDMzIEBAIFN0
cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJh
bWV0ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFRleFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJp
dih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdl
dFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKQEAg
LTE3ODgsNyArMjAyOSw4IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgU3RyaW5nIG1hcHBlZE5h
bWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JN
LCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBpcyBtYXBwaW5n
ICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkp
OwpAQCAtMTc5NywxOSArMjAzOSwyNCBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dMdWludCBpbmRl
eCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQ0dMdWlu
dCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsK
IH0KIAogR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOwogCiAgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKICAgICA6OmdsR2V0VmVydGV4QXR0
cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CkBAIC0xODE4LDcgKzIwNjUsOCBA
QCBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9m
ZnNldChHQ0dMdWludCBpbmRleCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4
b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCiAgICAgaWYgKHR5cGUgPT0gSEFM
Rl9GTE9BVF9PRVMpCkBAIC0xODQ5LDIxICsyMDk3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50
IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9y
bWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0
YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQg
byA9IDA7CiAgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4NzEs
NyArMjEyNSw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWlu
dCBvID0gMDsKICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAgcmV0dXJuIG87
CkBAIC0xODc5LDEzICsyMTM1LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKICAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
RVhUKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4OTMsMTMgKzIxNTMsMTcgQEAgUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkK
IAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVy
KEdDR0xlbnVtIHR5cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2xD
cmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURF
UiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwog
ICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTkwOCwxMyArMjE3MiwxNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRlQnVmZmVycygxLCAm
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdG
Qk8pOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTykgewogICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2Vk
IGZvciBkcmF3aW5nCkBAIC0xOTI2LDI2ICsyMTk0LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICBnbERlbGV0ZVByb2dyYW0o
cHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRl
cmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdM
T2JqZWN0IHNoYWRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbERlbGV0ZVNoYWRl
cihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0
dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZh
bHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwog
ICAgIH0pOwpAQCAtMjAwMSw3ICsyMjc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAtMjAyNiw3ICsyMzA0
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXMKICNpZiBIQVZFKE9QRU5HTF80KSAmJiBFTkFC
TEUoV0VCR0wyKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0aXZlUmVzdGFy
dEluZGV4KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQ
cmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwogfQogI2VuZGlmCkBAIC0yMDUyLDcgKzIzMzIs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlTwogI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUo
T1BFTkdMX0VTXzMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3Vi
RGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0
ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRh
cmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KICNl
bHNlCkBAIC0yMDczLDEzICsyMzU1LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIHNyY0J5CiAjaWYg
SEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQqIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zm
c2V0LCBHQ0dMc2l6ZWlwdHIgbGVuZ3RoLCBHQ0dMYml0ZmllbGQgYWNjZXNzKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCiAgICAgcmV0dXJuIDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJn
ZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KTsK
IH0KICNlbHNlCkBAIC0yMTQ0LDcgKzI0MzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMaW50KiBwYXJh
bXMpCiB7CiAjaWYgVVNFKE9QRU5HTF9FUykKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW1zKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CkBAIC0yMTU3LDIw
ICsyNDQ1LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9y
bWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTI2MzUsNyArMjkyOSw4IEBAIFZl
Y3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2Vz
KFBsYXRmb3JtR0xPYmplY3QgcHJvCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
Y3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQ0dM
dWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSwgVmVjdG9yPEdDR0xpbnQ+JiBw
YXJhbXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAg
IDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwg
dW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKaW5kZXggOTM4OTVlNTZiMGM1YTViZDg0
Y2IwYWE0OTg2ODIwYWE2NzExNDgxNS4uNjBmZGZjNjVmODczOTU4OTU3OTVhODRlZjFlMDlhYmY2
ZDdhYTg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApAQCAt
NDIsNyArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0
aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCB2b2lk
KiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKIApAQCAtMTg4LDEzICsxOTAsMTcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJ
bnRSZWN0JikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMjAzLDcgKzIwOSw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dM
ZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQocHJl
Y2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsIHByZWNpc2lvbik7CiB9
CiAKQEAgLTIzMiwxMyArMjQwLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZh
bGlkYXRlQXR0cmlidXRlcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRo
UmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwogfQogCkBAIC0y
NzgsNyArMjkwLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAsIG1fcHJpdmF0ZSht
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4odGhpcywgZGVzdGluYXRp
b24pKQogewogICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwog
ICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNo
YW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0zNDMsNyArMzU3LDkgQEAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHQKIAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRH
TE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAK
aW5kZXggYzBhMmVjYjg3NDdjMTE4ZjA3MDVkZjkxODk4ZDQ0OTgyZTkwZjJhNy4uODlkMTRkMjk1
NmI3MmZhNDJlZTk4MzYyYWI4MGQyYmIzMGFiM2VkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTEzOSw3ICsxMzksOCBAQCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dAogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gV1RGOjptYWtlVW5p
cXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsK
ICNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7
CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgpA
QCAtMjEzLDcgKzIxNCw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgbV90ZXhtYXBM
YXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcywg
ZGVzdGluYXRpb24pOwogI2VuZGlmCiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAgICAgYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJp
bmcgdmFsaWRhdGlvbi4KQEAgLTMzMyw3ICszMzUsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dAogI2lmIFVTRShBTkdMRSkKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3Vj
Y2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTM3Nyw3
ICszODAsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKCkKICNlbHNlCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29sIHN1Y2Nlc3Mg
PSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOwogICAgIGlmIChtX3RleHR1cmUpCiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJl
Y3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0R0xEaXJlY3QyRC5jcHAKaW5kZXggOWVmNTMxZWJmOTQyMjg5NDhlMDNjODYyMzQ0ZTRh
NjhhZmRlMmIxZS4uYjE0M2YxZDkzOTgzNjE5ZGZmNjI1YzExZjM2NjAxYTcyNDUwODhmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dEdMRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtMjksMTUgKzI5LDE2IEBACiAj
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShESVJFQ1QyRCkKIAogI2luY2x1
ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Iu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNs
dWRlIDxkMmQxZWZmZWN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0
OworR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6fkdyYXBoaWNzQ29udGV4dEdMSW1h
Z2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29s
IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBib29sIGlnbm9yZU5hdGl2ZUltYWdlQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvcjo6
ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSwgYm9vbCBpZ25vcmVOYXRpdmVJbWFnZUFscGhhUHJlbXVsdGlwbGljYXRpb24p
CiB7CiAgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411555</attachid>
            <date>2020-10-16 04:25:01 -0700</date>
            <delta_ts>2020-10-16 05:08:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201016142457.patch</filename>
            <type>text/plain</type>
            <size>200866</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FlNTZlMmE2YjI1ZGMx
N2UxNzYyODEzNjE0YzQxYTU0Y2VhYTIxNS4uMmQ4NTdjNjUyNzBmOThhOWNkOTVmNmYzNzI2NGRk
ZWZlMmZjOGE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0xNiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdMIHBhcnQgMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjEwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBE
ZWFuIEphY2tzb24uCisKKyAgICAgICAgUGFydCAyIG9mIHdvcmsgdG93YXJkcyBXZWJHTCBpbXBs
ZW1lbnRhdGlvbiB3aGljaCB1c2VzCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0
IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBj
b25jcmV0ZSBjbGFzcy4KKworICAgICAgICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKSB0bworICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5j
dGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFs
bCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0
byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNlcyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBD
aGVjayBhbGwgcmV0dXJuIHZhbHVlcyBvZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAg
ICAgc2hvdWxkIG5vdCBjYWxsIGludG8gT3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJy
ZW50LAorICAgICAgICBhcyB0aGF0IGNhbiBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3Ig
aW5jb3JyZWN0IHJlc3VsdHMuCisgICAgICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQg
Zmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBv
bmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVu
Y3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhlIG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1
bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGludG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3Qg
ZWZmb3J0IG1hbm5lci4KKworICAgICAgICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRp
cmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAg
ICAgdGhyb3VnaCBnZXRFeHRlbnNpb25zKCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRp
b25hbCBjb2RlCisgICAgICAgIGluc2lkZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4
YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8KKyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4g
VGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24gYmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dMLCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJh
Y3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQg
dG8KKyAgICAgICAgdHdvLiBUaGlzIGlzIHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCwKKyAgICAgICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBp
biB0aGlzIHJlZ2FyZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVy
dGV4QXR0cmliMCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9u
c0dMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBv
cnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJs
aXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Rmxv
YXR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1
ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEludGVnZXJpX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmli
SXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBh
cmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEZyYW1lYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlz
YW1wbGVmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdM
RVJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFk
blBpeGVsc1JvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVz
dEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVy
UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVu
ZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
QnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1
cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVy
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5j
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmpl
Y3R1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3gyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VY
VCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZF
WFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3Jt
aXZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJh
eXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVk
U2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3Yp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlC
dWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5tYXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTAt
MTYgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIEF1ZGlvIHdvcmtsZXQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMzRj
YTg1NWQ3NWI1OGQyZDQ5NWY2Nzk5MWE5N2U0ZDZhOWVkYzUzLi5iMzZkZTE0NjJlNWNkMTFmNWVh
YTdmNDgxYzU4YWYyZmMyZTE5MjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsK
LSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7Cisg
ICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAg
ICAgICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAg
ICAgICAgICBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAi
Q291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEw
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNl
QWRkcmVzcygpOwogCiAjaWYgVVNFKEFOR0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBj
b2x1bW5zLCByb3dzOwotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xF
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwg
Jmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxl
bmd0aCA9IDA7CisgICAgR0NHTHNpemVpIGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dz
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFO
R0xFKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgo
KSwgJmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlm
IChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkucmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRl
eCA5NjliYWZjYzg3OWEwOTBiMDNjYmY0NWQxODRjZjEyMWZmNDFhZmJhLi4zNDZkMzZkZTk1ODVl
NjgzZGIzMmFjMjYyMzBkM2YyYThhMzI5MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBA
IC03NCw5ICs3NCwxMSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkg
PSBkZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykK
KyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0K
ICAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDgg
QEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFs
cmVhZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAm
JiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0
RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4
dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
aXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291
cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwg
R0NHTHNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZl
cihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRz
dFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1h
c2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRp
bmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJB
TkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0
WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFO
R0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
R0x1aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAg
aWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5
KTsKIH0KIApAQCAtMTkzLDEzICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5H
TEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFy
cmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5
T0VTKGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQog
CkBAIC0yMjgsMjUgKzI0NSwzMyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJz
RVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NH
THNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBA
IC0yNzEsOTcgKzI5NiwxMjkgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdl
YkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xF
X3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFu
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFt
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZS
b2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2Vy
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9n
cmFtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFt
aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUo
R0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRl
ciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xm
bG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0
QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1z
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZS
b2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4
LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
R0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhl
bHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUs
IGxlbmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2
OCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lz
Rm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFy
YW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dM
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNp
emUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRl
eFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUs
IEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
Um9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBp
bWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRl
eEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdM
RShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBp
bnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xF
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFn
ZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1
ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRCdWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFO
R0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZv
cm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRl
eEF0dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2
Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBs
b2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFO
R0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRh
dGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RB
TkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xp
bnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFy
YW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRC
dWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXpl
LCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFO
R0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIs
IHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwg
cG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9n
cmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50
ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRC
b29sZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJv
b2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xF
KHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5n
dGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZS
b2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9i
dXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcg
KzcwNCw5IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xz
aXplaSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBm
aXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4
NiArNzQxLDExNCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFO
R0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlm
b3JtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1p
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUo
R0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IGNvbnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0
LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFt
ZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdM
RShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFt
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwg
cGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVy
SWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBh
cmFtZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJ
dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1
c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5H
TEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RB
TkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2
NCo+KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4
IDQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0ZTEwYjhlMzgwNTgxYzkxYjIuLjViNWRlODMwMzNiMmUy
ODAwYWFmYWEwZjc4M2IwNWRiOGZmYjNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuY3BwCkBAIC0xODEsMTEgKzE4MSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVD
b3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
QU5HTEUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRy
cy5kZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4
dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVS
LCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdM
X1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRo
YXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBo
YXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UIHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjAs
MTMgKzMyMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1B
WF9URVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpF
LCB2YWx1ZSk7CkBAIC0zNTksMTMgKzM2MywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdD
R0x1aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNo
YWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50
KiBwcmVjaXNpb24pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9u
KTsKIH0KIApAQCAtMzgyLDEzICszOTAsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFy
LCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRo
UmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFy
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQwMyw3ICs0MTUsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwg
cHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBp
eGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0
dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdl
dCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUxOCw3ICs1MzIsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTY4LDcgKzU4NCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1f
Y3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogCiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVI7CiAKQEAgLTYyNCw5ICs2NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM0LDEyICs2NDksMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CiAKQEAgLTY2MiwxMSArNjc5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGdsOjpDb2xvck1hc2soR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7
CiAgICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRo
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAg
ICAgIGdsOjpDbGVhckRlcHRoZigxLjBmKTsKICAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdMX0RF
UFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soR0xfVFJV
RSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwogICAgIH0KKwog
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKICAgICAgICAgZ2w6OkNsZWFyU3RlbmNp
bCgwKTsKQEAgLTY4Miw3ICs3MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNv
bG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAg
ICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0s
IGNvbG9yTWFza1szXSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6Q2xl
YXJEZXB0aGYoY2xlYXJEZXB0aCk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsK
ICAgICB9CiAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKQEAgLTcwOSw3ICs3MjcsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0
ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQgPSB0ZXh0dXJlOwogICAgIGdsOjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAt
NzE4LDI2ICs3MzgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hh
ZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBHTHVpbnQgZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAg
ICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTc1NiwxMDcgKzc4NCwxNDEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4
dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CiAgICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3Io
R0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNs
YW1wZiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6QmxlbmRFcXVhdGlvbihtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVt
IG1vZGVBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3Ip
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRG
dW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1
c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwogfQogCiB2b2lkKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTHNpemVpcHRyIGxlbmd0aCwgR0NHTGJpdGZpZWxkIGFjY2VzcykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2Uo
dGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdl
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJl
YWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0
LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTGludCogcGFyYW1zKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZT
aXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdG9yYWdl
M0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CkBAIC04NjQsNDYgKzkyNiw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBH
Qwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNl
cywgR0NHTGVudW0gcG5hbWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0
YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gZ2w6OkNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1w
ZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpD
bGVhcihtYXNrKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBH
Q0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICAvLyBXZSBuZWVkIHRoZSBBTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSBleHRlbnNpb24gdG8gc3Vw
cG9ydCBJT1N1cmZhY2UKICAgICAvLyBiYWNrYnVmZmVycywgYnV0IHdlIGRvbid0IHdhbnQgaXQg
ZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNoYWRlcnMuCiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJs
ZSBpdCBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uLgpAQCAtOTE1LDEzICs5OTEsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVI7CiAKQEAgLTkzNiw3ICsxMDE2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0cKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJH
TDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAtOTUxLDE5ICsxMDMzLDI1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVu
dW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q3VsbEZhY2UobW9kZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBm
dW5jKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aEZ1bmMoZnVuYyk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBm
bGFnKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9
CiAKQEAgLTk3MSw4MiArMTA1OSwxMDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAg
ICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RGlzYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NH
TGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAg
Y2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdF
bGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6RnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTEwNTYsNyArMTE3MCw5
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIGdsOjpH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7CiAgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCkBAIC0xMDg1LDcgKzEyMDEsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAt
MTExNCw3ICsxMjMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCkBAIC0xMTIzLDcgKzEyNDMsOSBAQCBpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgUwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0xMTM1LDcgKzEyNTcsOSBA
QCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgYwogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4g
YXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpA
QCAtMTE2MiwxOSArMTI4NiwyNSBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7
CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAg
cmV0dXJuIGdsOjpHZXRFcnJvcigpOwogfQogCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6
OkdldFN0cmluZyhuYW1lKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpo
aW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOwogfQogCkBAIC0xMTgzLDEzICsxMzEzLDE3
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0J1
ZmZlcihidWZmZXIpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCkBAIC0xMTk4LDcgKzEzMzIsOSBA
QCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJl
dHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiB9CiAKQEAgLTEyMDcsNyArMTM0
Myw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEyMTYsNyArMTM1NCw5IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHJlbmRlcmJ1ZmZlCiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6
SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIApAQCAtMTIyNSw3ICsxMzY1LDkgQEAg
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzU2hhZGVy
KHNoYWRlcik7CiB9CiAKQEAgLTEyMzQsNDQgKzEzNzYsNTggQEAgR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAg
ICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6TGluZVdpZHRoKHdpZHRoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6TGlua1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xm
bG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xl
YW4gaW52ZXJ0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Np
c3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCkBAIC0xMjc5LDcgKzE0MzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZwogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Y29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAg
Y29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7
CkBAIC0xMjg5LDE3OCArMTQ0NiwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVu
YywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWYobG9jYXRpb24sIHYw
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6
ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFy
cmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VXNlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIApAQCAtMTQ2OCw3OSArMTY4MSwxMDUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0
dHJpYjJmKGluZGV4LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIz
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZs
b2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0Zihp
bmRleCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xi
b29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYklQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Vmlld3Bv
cnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIEdMdWludCBhcnJheSA9IDA7CiAgICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAm
YXJyYXkpOwogICAgIHJldHVybiBhcnJheTsKQEAgLTE1NTAsNyArMTc4OSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKIH0KIApAQCAt
MTU1OCw1MSArMTc5OSw2NyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0g
cG5hbWUsIEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHYocG5hbWUs
IHZhbHVlKTsKIH0KICAgICAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2NCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFs
dWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3Yo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NGlf
dihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsK
QEAgLTE2MTAsNyArMTg2Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAg
LTE2MzgsNyArMTg5Nyw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9
IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
ZW5ndGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTY1Nyw3ICsxOTE4LDkgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2NjUsNyArMTkyOCw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUp
OwogfQogCkBAIC0xNjczLDcgKzE5MzgsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBs
ZW5ndGggPSAwOwogICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdU
SCwgJmxlbmd0aCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0xNjk0LDMxICsxOTYxLDQxIEBAIFN0
cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFy
YW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0VW5pZm9ybXVpdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwog
fQogCkBAIC0xNzI2LDI1ICsyMDAzLDMyIEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgcmV0dXJu
IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKIAogICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CiAgICAgZ2w6OkdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwpAQCAtMTc1Myw3ICsy
MDM3LDggQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KICAgICBnbDo6VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CkBAIC0xNzYyLDIxICsyMDQ3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9
IDA7CiAgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTc4NCw3
ICsyMDc1LDkgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50
IG8gPSAwOwogICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpA
QCAtMTc5MiwxMyArMjA4NSwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTgwNiwxMyArMjEwMywxNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIo
R0NHTGVudW0gdHlwZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6
Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFE
RVIgOiBHTF9WRVJURVhfU0hBREVSKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTgyMSwxMyArMjEyMiwxNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVCdWZmZXJz
KDEsICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVG
cmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRv
IGJlIHVzZWQgZm9yIGRyYXdpbmcKICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVs
ZXRlZC4KICAgICBpZiAobV9pc0ZvcldlYkdMMikgewpAQCAtMTg0MiwyNSArMjE0NywzMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGZyYW1lYnVmZmVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1v
dmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1
ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwogICAgIH0pOwpAQCAtMTkxNiw3ICsyMjI5LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJl
Y3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFtX2lzRm9yV2ViR0wyICYmIG1fZXh0ZW5zaW9ucykK
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBtX2V4dGVuc2lvbnMtPmFkanVzdFdlYkdMMVRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKICAgICBnbDo6
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CkBAIC0xOTI1LDM0ICsyMjQwLDQ1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAg
ICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7
CiAgICAgZWxzZQotICAgICAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZCht
b2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgICAgIGdsOjpEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BV
U3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2Vi
R0wyKQogICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBl
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIGVsc2UK
LSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3Vu
dCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9m
ZnNldCksIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgZGl2aXNvcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OlZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0
ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICBn
bDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIAogR0NHTHVp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKwog
ICAgIHJldHVybiBnbDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2Nr
TmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtMTk2OSw3ICsyMjk1LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKwogICAgIEdMaW50IG1heExlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEgsICZtYXhM
ZW5ndGgpOwogICAgIGlmIChtYXhMZW5ndGggPD0gMCkgewpAQCAtMTk4Nyw3ICsyMzE1LDkgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3IKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1CbG9ja0Jp
bmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwog
fQogCkBAIC0xOTk1LDcgKzIzMjUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblF1
ZXJpZXMoMSwgJm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpAQCAtMjAwMywxOSArMjMzNSwyNSBA
QCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWl2KEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQqIHBhcmFtcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UXVl
cnlPYmplY3R1aXYoaWQsIHBuYW1lLCBwYXJhbXMpOwogfQogCkBAIC0yMDIzLDcgKzIzNjEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWlu
dCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDRwogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblRyYW5zZm9ybUZlZWRi
YWNrcygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yMDMxLDQ5ICsyMzcxLDY0IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNm
b3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZ0cmFu
c2Zvcm1GZWVkYmFjayk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2sp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5z
Zm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNr
KEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJlZ2luVHJhbnNmb3JtRmVlZGJhY2socHJpbWl0aXZlTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6RW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0g
YnVmZmVyTW9kZSkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBWZWN0b3I8Q1N0cmluZz4gY29udmVydGVkVmFyeWluZ3MgPSB2YXJ5aW5n
cy5tYXAoW10oY29uc3QgU3RyaW5nJiB2YXJ5aW5nKSB7CiAgICAgICAgIHJldHVybiB2YXJ5aW5n
LnV0ZjgoKTsKICAgICB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IHBvaW50ZXJzVG9WYXJ5
aW5ncyA9IGNvbnZlcnRlZFZhcnlpbmdzLm1hcChbXShjb25zdCBDU3RyaW5nJiB2YXJ5aW5nKSB7
CiAgICAgICAgIHJldHVybiB2YXJ5aW5nLmRhdGEoKTsKICAgICB9KTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKwogICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0s
IHBvaW50ZXJzVG9WYXJ5aW5ncy5zaXplKCksIHBvaW50ZXJzVG9WYXJ5aW5ncy5kYXRhKCksIGJ1
ZmZlck1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBHQ0dMc2l6
ZWkgYnVmU2l6ZSA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSCwgJmJ1
ZlNpemUpOwogICAgIGlmICghYnVmU2l6ZSkKQEAgLTIwOTMsNyArMjQ0OCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZm
ZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyQmFzZSh0
YXJnZXQsIGluZGV4LCBidWZmZXIpOwogfQogCkBAIC0yMTI3LDMyICsyNDg0LDQ5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIHNyY0J5CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRG
cmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBH
Q0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgx
LCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpCbGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZ
MCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwg
R0NHTGludCBsYXllcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDR0xlbnVtKiBhdHRhY2htZW50cykKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SW52
YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQ0dM
ZW51bSogYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcih0YXJnZXQs
IG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQog
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBH
Q0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsK
IApAQCAtMjE2NywxNjMgKzI1NDEsMjI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gLTE7CisKICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTJ1aShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3Vp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBH
Q0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xdWl2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0
aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWl2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRh
ICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4MmZ2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFu
c3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0
cml4NHgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0
KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEg
KyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHos
IEdDR0xpbnQgdykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmli
STRpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGludCogdmFsdWVz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4
LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0x1aW50KiB2
YWx1ZXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2
KGluZGV4LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5k
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpEcmF3UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RHJhd0J1ZmZlcnMobiwgYnVmcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIGNv
bnN0IEdDR0xpbnQqIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZl
cml2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBH
Q0dMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdDR0x1aW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09m
ZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMZmxvYXQq
IHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVy
ZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVF1ZXJpZXMoMSwgJnF1ZXJ5KTsK
IH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICBy
ZXR1cm4gZ2w6OklzUXVlcnkocXVlcnkpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0xpbnQgdmFsdWU7CiAgICAgZ2w6Okdl
dFF1ZXJ5aXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGxhdGZvcm1HTE9iamVjdD4odmFsdWUpOwpAQCAtMjMzMSw3ICsyNzY3LDkgQEAgUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmEKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlU2FtcGxlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQg
bmFtZSA9IDA7CiAgICAgZ2w6OkdlblNhbXBsZXJzKDEsICZuYW1lKTsKICAgICByZXR1cm4gbmFt
ZTsKQEAgLTIzMzksMTA0ICsyNzc3LDEzOCBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNhbXBsZXJzKDEsICZzYW1wbGVyKTsKIH0KIAog
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFNhbXBsZXIodW5pdCwgc2Ft
cGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0
ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNh
bXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2Ft
cGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2KFBsYXRmb3JtR0xPYmplY3Qg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJmdihzYW1wbGVyLCBwbmFtZSwg
dmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFy
YW1ldGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJh
bWV0ZXJpdihzYW1wbGVyLCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc3luYyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxk
IGZsYWdzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpGZW5jZVN5
bmMoY29uZGl0aW9uLCBmbGFncyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gZ2w6OklzU3luYyhzeW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVTeW5jKHN5bmMpOwogfQogCiBHQ0dMZW51bSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX1dB
SVRfRkFJTEVEOworCiAgICAgcmV0dXJuIGdsOjpDbGllbnRXYWl0U3luYyhzeW5jLCBmbGFncywg
dGltZW91dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OldhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2l2KEdDR0xzeW5j
IHN5bmMsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCAqdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFN5bmNpdihzeW5jLCBwbmFtZSwg
YnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdD
R0xzaXplaXB0ciBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVm
ZmVyUmFuZ2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOwogfQogCiBWZWN0
b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFt
ZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB7IH07CisKICAg
ICBWZWN0b3I8Q1N0cmluZz4gdXRmOCA9IHVuaWZvcm1OYW1lcy5tYXAoW10oYXV0byYgeCkgeyBy
ZXR1cm4geC51dGY4KCk7IH0pOwogICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gY3N0ciA9IHV0Zjgu
bWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHguZGF0YSgpOyB9KTsKICAgICBWZWN0b3I8R0NHTHVp
bnQ+IHJlc3VsdChjc3RyLnNpemUoKSwgMCk7CkBAIC0yNDk4LDY3ICsyOTcwLDg5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBz
cmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdD
R0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNyY0xl
bmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3Jj
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihH
Q0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQs
IEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5p
Zm9ybTFpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBj
b25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwg
c3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRh
LCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZz
ZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTRpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNw
b3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJh
bnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29jb2EubW0KaW5kZXggMzJhZTU1Yzk5OWUwMTg3NTkzN2NmOTQ5NGJiNDJiZDUy
NDVhMmM3OS4uMTllNWQ4Njc3NmVjZTY1ZTZlMWRiYjFjNWRiODBhM2ZmN2QwNmNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0zODgsMTAgKzM4OCw4
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1f
Y29udGV4dE9iaikgeworICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
ICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgLy8gVE9ETzogY2hlY2sgcmVzdWx0LgogICAg
ICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICAgICAgaWYgKGF0
dHJzLmFudGlhbGlhcykgewpAQCAtNDA4LDE4ICs0MDYsMTggQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRl
VGV4dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlm
IChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLQotICAgICAgICBpZiAo
bV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikgewotICAgICAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFn
ZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7
Ci0gICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyKTsKLSAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVy
UGJ1ZmZlcikKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgaWYgKG1fd2ViR0xMYXllcikgewogICAgICAgICBhdXRv
IHJlY3ljbGVkQnVmZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKICAgICAgICAg
aWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFj
ZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7CiAgICAgICAgIGF1dG8gY29u
dGVudHNIYW5kbGUgPSBbbV93ZWJHTExheWVyIGRldGFjaENsaWVudF07CiAgICAgICAgIGlmIChj
b250ZW50c0hhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlP
YmosIGNvbnRlbnRzSGFuZGxlKTsKLQorICAgIH0KKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAg
ICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwogICAgIH0KQEAgLTU1MywxMiArNTUxLDEwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wg
aXNWaXNpYmxlKQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVwZGF0ZUNHTENvbnRleHQoKQogewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIExPRyhXZWJH
TCwgIkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2Fs
bCBDR0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlE
aXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0
X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4
dCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCmluZGV4IGJiZDlkNDQ2Zjkx
ZWQ1ZTFiYmJhNGQzNzAyZDQzMmY3MWVmZmE0ZTAuLjE3Nzg2YTY0YmE0ZTFkYTAwOTY0ZWFlOTk3
ZDI5Mjc2NGRhZDE4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC01MCwxNyAr
NTAsMjUgQEAgRXh0ZW5zaW9uc0dMT3BlbkdMOjp+RXh0ZW5zaW9uc0dMT3BlbkdMKCkgPSBkZWZh
dWx0OwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gw
LCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywg
ZmlsdGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0
ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtNzYsNyAr
ODQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0
ZWQoKSkKICAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTkwLDcg
KzEwMCw5IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNW
ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFy
cmF5KGFycmF5KTsKQEAgLTEwMiw3ICsxMTQsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xP
cGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVj
dFN1cHBvcnRlZCgpKQogICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xOTYs
NiArMjEwLDkgQEAgYm9vbCBFeHRlbnNpb25zR0xPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJz
RVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vICBG
SVhNRTogaW1wbGVtZW50IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3Jtcy4KICNpZiBQTEFURk9S
TShHVEspCiAgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOwpAQCAtMjA3LDcgKzIyNCw5IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29u
c3QgR0NHTGVudW0qIGJ1ZnMpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2Vk
KG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICNlbHNlCkBAIC0yMjAsNyArMjM5LDkg
QEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHMKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNv
dW50KTsKICNlbHNlCkBAIC0yMzQsNyArMjU1LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6
OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEcK
IAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsVmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5j
cHAKaW5kZXggZjY0YmRlZTMxMjkzM2JmM2VkZDVmYmRmNTMxOTJkYjQ1NGE3ZWRjNi4uYjQ3OWRl
MzZhZDEwNjBiMmM2ZjcwNmRiOWI4MjAyZDk1ZmFlMGZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMRVMuY3BwCkBAIC04NSw2ICs4NSw4IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVu
c2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQogeworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKICAgICAgICAg
bV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKICAgICBlbHNlCkBAIC05Myw2
ICs5NSw4IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBp
ZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlCkBAIC0xMDYsNiArMTEwLDggQEAgdm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8s
IGxvbmcgLyogc3JjWTAgKi8sIGwKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQogICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgZWxzZQpAQCAtMTI5LDggKzEzNSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7Cisg
ICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICBHTHVpbnQgYXJyYXkgPSAwOwogICAgICAgICBtX2dsR2VuVmVy
dGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTE0NCwz
MyArMTUxLDM1IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAo
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwg
JmFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCiBHQ0dM
Ym9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJ
c1ZlcnRleEFycmF5T0VTKQorICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykgeworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CiAgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7
Ci0KKyAgICB9CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFy
cmF5T0VTKQorICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0gICAgZWxzZQorICAgIH0gZWxz
ZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKIH0KIApAQCAtMTg4LDggKzE5Nyw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVz
ICE9IEdMX05PX0VSUk9SKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CiAg
ICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1f
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNl
dCA9IFVOS05PV05fQ09OVEVYVF9SRVNFVDsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFw
aGljc1Jlc2V0U3RhdHVzRVhUKCk7CiAgICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9O
T19FUlJPUikKICAgICAgICAgICAgIG1fY29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVz
ZXQ7CiAgICAgICAgIHJldHVybiByZWFzb25Gb3JSZXNldDsKQEAgLTIwMiw3ICsyMTIsOSBAQCBp
bnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogdm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dM
c2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0g
dHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpCiB7CiAgICAgaWYgKG1fZ2xSZWFk
blBpeGVsc0VYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2Fs
bHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAgICAgLy8gYWxsIHBy
ZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhl
bHMuCiAgICAgICAgIDo6Z2xGbHVzaCgpOwpAQCAtMjE5LDcgKzIzMSw5IEBAIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6CiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhU
KEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0
ICpwYXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2ds
R2V0blVuaWZvcm1mdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIzMCw3ICsyNDQsOSBAQCB2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlv
biwgR0NHTAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQ0dM
dWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBpbnQgKnBhcmFt
cykKIHsKICAgICBpZiAobV9nbEdldG5Vbmlmb3JtaXZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRuVW5p
Zm9ybWl2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjQ1LDcgKzI2MSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NH
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJz
dCwgY291bnQsIHByaW1jb3VudCk7CiB9CiAKQEAgLTI1Niw3ICsyNzQsOSBAQCB2b2lkIEV4dGVu
c2lvbnNHTE9wZW5HTEVTOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRB
TkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKQEAgLTI2Nyw3ICsyODcs
OSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1
aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oCmluZGV4IDY5ODhiZDY5Y2EwZjAxMGZhMWI2OGY2NjUzMDc4M2ViZmM2
M2Y0MTIuLmNkZjY0MDk5MzQzNDgyYTRjMTZkM2NiZTM0NzljOGMwYWJhNDgxODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0xMTIsNyArMTEyLDYgQEAgcHVibGljOgog
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKICNlbmRpZgog
Ci0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIGVudW0gY2xhc3MgUmVsZWFzZUJlaGF2aW9yIHsKICAgICAgICAgUHJlc2VydmVUaHJl
YWRSZXNvdXJjZXMsCkBAIC01MTcsNiArNTE2LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RX
aW5kb3cqLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7CiAKKyAgICAvLyBDYWxsZWQg
b25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwg
T3BlbkdMLgorICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50
cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wg
bWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCiAgICAgLy8gVGFrZSBp
bnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1
dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0
ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwCmluZGV4IDIwYmYyZjRmOTg0Y2M3ZjJiYjczYzZkYTU1OWYwODAwYTMzYTE0OWMu
Ljc1MGVkMzI2ZWNlNjVlODhmNmI0MTM2MDE1YzRmOTMzNzQ0ODljYTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShjb25zdCBJbnRSZWN0JiByZWMKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAjaWYgVVNFKE9QRU5HTCkKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAg
Y2FzZSBERVBUSF9TVEVOQ0lMOgpAQCAtMjY0LDcgKzI2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkK
ICAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJu
IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cwogICAgIC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRo
ZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFjaCB2ZWN0b3IgaGFzIDQgY29tcG9uZW50cykuCiAgICAg
Ly8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBi
ZSBkaXZpZGVkIGJ5IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgc3dpdGNoIChwbmFtZSkg
ewogI2lmIFVTRShPUEVOR0wpCiAgICAgY2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JT
OgpAQCAtMzEwLDcgKzMxNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJU
KHJhbmdlKTsKICAgICBBU1NFUlQocHJlY2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
CiAgICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TE9XX0lOVDoKQEAgLTQwMywxMyArNDA5LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6
TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xE
ZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKIH0KIApAQCAtNDI4LDcgKzQzOCw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwKIAogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gYWxsIHBy
ZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhl
bHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZsdXNoKCk7CiAgICAgQVNTRVJUKG1f
c3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKICAgICBpZiAoYXR0
cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4
IGIxNGI2MmQ1ZTRmYmVhOGVhMmM4Nzg1NmU3YmZlZDZiOGQzODY3YjIuLmI4Zjg5ZmRiOGJkZDEy
YTk1ZjA2ODUxMDZhYjRhM2IwMDE4OWM4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMjAwLDcgKzIwMCw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKICAgICBpZiAobV9sYXllckNvbXBvc2l0
ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAjaWYgIVVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNj
aXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC0yMzksNyArMjQxLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQg
Y2hhciAqcGl4ZWxzLCBpbnQgcGkKICAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRo
ICogbV9jdXJyZW50SGVpZ2h0ICogNCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAKICAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CkBAIC0yNzMsOSArMjc3LDYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAq
cGl4ZWxzLCBpbnQgcGkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI4
MywxMiArMjg0LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOwogICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwpA
QCAtNDI3LDcgKzQzMCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lv
bnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0IHZlcnRleFNoYWRlciwgUGxhCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVy
ZTsKICAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTQzNiw3ICs0NDEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBB
U1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CiAgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOwogfQpAQCAtNDQ0LDcgKzQ1MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
R0xPCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBTdHJp
bmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9U
WVBFX0FUVFJJQlVURSwgbmFtZSk7CiAgICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRp
b24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKQEAgLTQ1MywxMyArNDYxLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0x1CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEdMdWludCBmYm87
CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgZmJvID0gYnVmZmVyOwpAQCAtNDc1LDEwMiArNDg3
LDEzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5zZXRCb3Vu
ZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKICAg
ICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVl
biwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2Rl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsK
IH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0g
c2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfSAgICAgICAKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dM
ZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVu
dW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNp
emUsIGRhdGEpOwogfQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBH
Q0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsQ2xlYXIobWFzayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVk
LCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0
aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKICAgICAvLyBwb2ludCBhIGdsb2Jh
bCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgpAQCAtNjMyLDcgKzY3
NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBzaGFkZXIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxl
U2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFk
ZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwg
U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CiAKQEAgLTY2Niw3ICs3MTAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKIAogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyk7CkBAIC02ODEsNyArNzI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKIAogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJv
dW5kRHJhd0ZCTyk7CkBAIC02OTYsMTkgKzc0NCwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC03
MTYsODMgKzc3MCwxMDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hh
ZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
bV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xE
ZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbERpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVz
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dM
ZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zm
c2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwg
Y291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsRmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGludCBsZXZlbCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZy
b250RmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJh
dGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCkBAIC04MDIsNyArODgyLDkgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIEdDR0wKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVT
aXplKTsKICAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KQEAg
LTg0OCw3ICs5MzAsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4
VW5pZm9ybVNpemUgPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZF
X1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAtODk0LDcgKzk3OCw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBz
aGFkZXJzKTsKIH0KIApAQCAtMTAzNyw3ICsxMTIzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFMKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAtMTsKKwogCiAgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHBy
b2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJH
TCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4
KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTA0OSwxNCArMTEzNywx
OCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgYwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAg
cmV0dXJuIC0xOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gOjpnbEdl
dEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBm
YWxzZTsKIAogICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZv
aWQgY3JlYXRpbmcgYSBoYW5nIGlmCkBAIC0xMDgzLDE5ICsxMTc1LDI1IEBAIEdDR0xlbnVtIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCiAgICAgICAgIHJldHVybiBtX3N5bnRo
ZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7CiB9CiAKIFN0cmlu
ZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2Rl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7CiB9
CiAKQEAgLTExMDQsMTMgKzEyMDIsMTcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogICAgIGlmICghYnVmZmVy
KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKICAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7CiB9
CiAKQEAgLTExMTksNyArMTIyMSw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgaWYg
KCFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVm
ZmVyKTsKIH0KIApAQCAtMTEyOCw3ICsxMjMyLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgaWYg
KCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
RkxfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAt
MTEzNyw3ICsxMjQzLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
UmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmUKICAgICBpZiAoIXJlbmRl
cmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIp
OwogfQogCkBAIC0xMTQ2LDcgKzEyNTQsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKCFzaGFk
ZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKwogICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKIH0KIApAQCAtMTE1NSwyMCAr
MTI2NSwyNiBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJl
KFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVy
biA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgR0NHTHNpemVpIGNvdW50ID0g
MDsKICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CkBAIC0xMTgyLDI1ICsx
Mjk4LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4
ZWxTdG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NH
TGZsb2F0IHVuaXRzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQb2x5Z29uT2Zm
c2V0KGZhY3RvciwgdW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
YW1wbGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwg
R0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAK
QEAgLTEyMDgsNyArMTMzMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRl
clNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIFNoYWRlclNvdXJjZUVu
dHJ5IGVudHJ5OwogCkBAIC0xMjE5LDE3OCArMTM0NSwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBT
dHJpbmcKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVu
dW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwg
R0NHTGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBt
YXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NH
THVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE1hc2so
bWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVt
IHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
U3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWws
IEdDR0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWYo
bG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTFmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBh
cnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlv
biwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2
MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0
IEdDR0xpbnQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYx
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYw
LCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewog
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NH
TGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDJm
dihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VXNlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTM5OCw3MyArMTU4MCw5NyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2
MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihH
Q0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBH
Q0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZs
b2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwg
R0NHTGZsb2F0IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0
IHYyLCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRl
eEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZs
b2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0g
dHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0
ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiAoIVVTRShP
UEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9S
TShDT0NPQSkKICAgICA6OmdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC0xNDc3LDcg
KzE2ODMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJh
eShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6
OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiAjZW5kaWYKQEAgLTE0ODgsNyArMTY5
Niw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5
KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwogICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogI2lmICghVVNF
KE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRG
T1JNKENPQ09BKQogICAgIHJldHVybiA6OmdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CiAjZW5kaWYK
QEAgLTE0OTcsNyArMTcwNyw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xCaW5k
VmVydGV4QXJyYXkoYXJyYXkpOwogI2Vsc2UKQEAgLTE1MDcsMTkgKzE3MTksMjUgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMYm9vbGVhbiogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZs
b2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0RmxvYXR2KHBu
YW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE1MjcsNyArMTc0NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4
LCBHQ0dMCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcmlfdihwbmFtZSwg
aW5kZXgsIHZhbHVlKTsKQEAgLTE1MzYsNyArMTc1Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBH
Q0dMCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVlKQogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6
IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcg
Z2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2lu
ZyBPcGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7
CkBAIC0xNTQ2LDcgKzE3NjgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJ
bnRlZ2VyNjRpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQwogewogICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVu
YWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQg
Y3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBF
UyAzLjAuCiAgICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsK
QEAgLTE1NTQsNyArMTc3OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVnZXI2NGlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhdHRhY2htZW50
ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKICAgICAgICAgYXR0YWNobWVudCA9IERFUFRI
X0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgogICAg
IDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xNTYyLDcgKzE3ODgsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dM
ZW51bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBw
bmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNTcyLDcgKzE4MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9i
amVjdCBwcgogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENv
dW50TWFwLmZpbmQocHJvZ3JhbSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5lbmQoKSkgewogICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNv
dW50Rm9yVHlwZShwbmFtZSk7CkBAIC0xNjUwLDcgKzE4ODAsOSBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2Njks
NyArMTkwMSw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwog
fQogCkBAIC0xNjc3LDcgKzE5MTEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbQogewogICAg
IEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCkBAIC0xNzEy
LDcgKzE5NDgsOCBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcklu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKQEAgLTE3MzksNyArMTk3Niw4IEBAIFN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAg
ICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwog
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzUwLDI1ICsx
OTg4LDMzIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNl
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
ZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJh
bWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRU
ZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1
ZSk7CiB9CiAKQEAgLTE3ODMsNyArMjAyOSw4IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgU3Ry
aW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNLCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlv
biBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0
ZjgoKS5kYXRhKCkpOwpAQCAtMTc5MiwxOSArMjAzOSwyNCBAQCBHQ0dMaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBjbwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
Q0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwg
dmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5h
bWUsIHZhbHVlKTsKIH0KIAogR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOwogCiAgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKICAgICA6Omds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CkBAIC0xODEz
LDcgKzIwNjUsOCBAQCBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZl
cnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZl
bCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCiAgICAgaWYg
KHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCkBAIC0xODQ0LDIxICsyMDk3LDI3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
aW50IGxldmVsLCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zm
c2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4g
bzsKQEAgLTE4NjYsNyArMjEyNSw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsK
KwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CiAg
ICAgcmV0dXJuIG87CkBAIC0xODc0LDEzICsyMTM1LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4ODgsMTMgKzIxNTMs
MTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZS
QUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZvKTsK
ICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTkwMywxMyArMjE3Miwx
NyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0
dXJlKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRm
b3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRl
QnVmZmVycygxLCAmYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJh
d0ZCTykgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2lu
ZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCkBAIC0xOTIxLDI2ICsyMTk0LDM0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
ZnJhbWVidWZmZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dy
YW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICBnbERl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRl
cmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRl
cihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bERlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0g
KGF1dG8mIGtleVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9
PSB0ZXh0dXJlOwogICAgIH0pOwpAQCAtMTk5Niw3ICsyMjc3LDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBH
Q0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAt
MjAyMSw3ICsyMzA0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXMKICNpZiBIQVZFKE9QRU5H
TF80KSAmJiBFTkFCTEUoV0VCR0wyKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJp
bWl0aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwogfQogI2VuZGlmCkBAIC0y
MDQ3LDcgKzIzMzIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlTwogI2lmIEhBVkUoT1BFTkdM
XzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdl
dCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6
ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29weUJ1ZmZlclN1
YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBz
aXplKTsKIH0KICNlbHNlCkBAIC0yMDY4LDEzICsyMzU1LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IHNyY0J5CiAjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQqIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgbGVuZ3RoLCBHQ0dMYml0ZmllbGQgYWNjZXNz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgcmV0dXJuIDo6Z2xNYXBCdWZm
ZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwogfQogCiBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0NHTGVudW0gdGFyZ2V0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsVW5tYXBCdWZm
ZXIodGFyZ2V0KTsKIH0KICNlbHNlCkBAIC0yMTM5LDcgKzI0MzAsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBH
Q0dMaW50KiBwYXJhbXMpCiB7CiAjaWYgVVNFKE9QRU5HTF9FUykKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBw
bmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
CkBAIC0yMTUyLDIwICsyNDQ1LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1w
bGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBs
ZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UyRCh0
YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTI2MzAsNyAr
MjkyOSw4IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVu
aWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0
IFZlY3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSwgVmVjdG9y
PEdDR0xpbnQ+JiBwYXJhbXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKIAogICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRp
Y2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKaW5kZXggOTM4OTVl
NTZiMGM1YTViZDg0Y2IwYWE0OTg2ODIwYWE2NzExNDgxNS4uNjBmZGZjNjVmODczOTU4OTU3OTVh
ODRlZjFlMDlhYmY2ZDdhYTg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEVTLmNwcApAQCAtNDIsNyArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgYXV0byBh
dHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIApAQCAtMTg4LDEzICsxOTAsMTcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeShjb25zdCBJbnRSZWN0JikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMjAzLDcg
KzIwOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAg
ICBBU1NFUlQocHJlY2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsIHBy
ZWNpc2lvbik7CiB9CiAKQEAgLTIzMiwxMyArMjQwLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBk
ZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgp
OwogfQogCkBAIC0yNzgsNyArMjkwLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAs
IG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4odGhp
cywgZGVzdGluYXRpb24pKQogewogICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNo
YXJlZENvbnRleHQpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIAogICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5
IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0zNDMsNyArMzU3LDkgQEAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyBhdHQKIAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERl
bGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlci5jcHAKaW5kZXggYzBhMmVjYjg3NDdjMTE4ZjA3MDVkZjkxODk4ZDQ0OTgyZTkwZjJh
Ny4uODlkMTRkMjk1NmI3MmZhNDJlZTk4MzYyYWI4MGQyYmIzMGFiM2VkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTEzOSw3ICsxMzks
OCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0g
V1RGOjptYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRl
c3RpbmF0aW9uKTsKICNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wg
c3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vz
cywgc3VjY2Vzcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2
YWxpZGF0aW9uLgpAQCAtMjEzLDcgKzIxNCw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAg
ICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxh
eWVyPigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlmCiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUg
Y2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTMzMyw3ICszMzUsOCBAQCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dAogI2lmIFVTRShBTkdMRSkKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAgZ2w6OkRl
bGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKQEAgLTM3Nyw3ICszODAsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKCkKICNlbHNlCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgIGlmIChtX3RleHR1cmUpCiAgICAgICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>
<flag name="commit-queue"
          id="427797"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411556</attachid>
            <date>2020-10-16 04:28:59 -0700</date>
            <delta_ts>2020-10-16 04:39:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201016142856.patch</filename>
            <type>text/plain</type>
            <size>200870</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FlNTZlMmE2YjI1ZGMx
N2UxNzYyODEzNjE0YzQxYTU0Y2VhYTIxNS4uMmQ4NTdjNjUyNzBmOThhOWNkOTVmNmYzNzI2NGRk
ZWZlMmZjOGE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0xNiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdMIHBhcnQgMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjEwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBE
ZWFuIEphY2tzb24uCisKKyAgICAgICAgUGFydCAyIG9mIHdvcmsgdG93YXJkcyBXZWJHTCBpbXBs
ZW1lbnRhdGlvbiB3aGljaCB1c2VzCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0
IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBj
b25jcmV0ZSBjbGFzcy4KKworICAgICAgICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKSB0bworICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5j
dGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFs
bCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0
byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNlcyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBD
aGVjayBhbGwgcmV0dXJuIHZhbHVlcyBvZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAg
ICAgc2hvdWxkIG5vdCBjYWxsIGludG8gT3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJy
ZW50LAorICAgICAgICBhcyB0aGF0IGNhbiBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3Ig
aW5jb3JyZWN0IHJlc3VsdHMuCisgICAgICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQg
Zmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBv
bmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVu
Y3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhlIG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1
bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGludG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3Qg
ZWZmb3J0IG1hbm5lci4KKworICAgICAgICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRp
cmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAg
ICAgdGhyb3VnaCBnZXRFeHRlbnNpb25zKCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRp
b25hbCBjb2RlCisgICAgICAgIGluc2lkZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4
YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8KKyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4g
VGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24gYmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dMLCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJh
Y3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQg
dG8KKyAgICAgICAgdHdvLiBUaGlzIGlzIHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCwKKyAgICAgICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBp
biB0aGlzIHJlZ2FyZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVy
dGV4QXR0cmliMCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9u
c0dMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBv
cnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJs
aXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Rmxv
YXR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1
ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEludGVnZXJpX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmli
SXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBh
cmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEZyYW1lYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlz
YW1wbGVmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdM
RVJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFk
blBpeGVsc1JvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVz
dEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVy
UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVu
ZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
QnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1
cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVy
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5j
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmpl
Y3R1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3gyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VY
VCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZF
WFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3Jt
aXZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJh
eXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVk
U2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3Yp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlC
dWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5tYXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTAt
MTYgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIEF1ZGlvIHdvcmtsZXQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMzRj
YTg1NWQ3NWI1OGQyZDQ5NWY2Nzk5MWE5N2U0ZDZhOWVkYzUzLi5iMzZkZTE0NjJlNWNkMTFmNWVh
YTdmNDgxYzU4YWYyZmMyZTE5MjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsK
LSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7Cisg
ICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAg
ICAgICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAg
ICAgICAgICBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAi
Q291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEw
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNl
QWRkcmVzcygpOwogCiAjaWYgVVNFKEFOR0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBj
b2x1bW5zLCByb3dzOwotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xF
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwg
Jmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxl
bmd0aCA9IDA7CisgICAgR0NHTHNpemVpIGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dz
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFO
R0xFKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgo
KSwgJmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlm
IChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkucmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRl
eCA5NjliYWZjYzg3OWEwOTBiMDNjYmY0NWQxODRjZjEyMWZmNDFhZmJhLi4zNDZkMzZkZTk1ODVl
NjgzZGIzMmFjMjYyMzBkM2YyYThhMzI5MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBA
IC03NCw5ICs3NCwxMSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkg
PSBkZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykK
KyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0K
ICAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDgg
QEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFs
cmVhZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAm
JiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0
RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4
dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
aXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291
cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwg
R0NHTHNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZl
cihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRz
dFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1h
c2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRp
bmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJB
TkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0
WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFO
R0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
R0x1aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAg
aWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5
KTsKIH0KIApAQCAtMTkzLDEzICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5H
TEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFy
cmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5
T0VTKGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQog
CkBAIC0yMjgsMjUgKzI0NSwzMyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJz
RVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NH
THNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBA
IC0yNzEsOTcgKzI5NiwxMjkgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdl
YkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xF
X3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFu
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFt
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZS
b2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2Vy
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9n
cmFtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFt
aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUo
R0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRl
ciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xm
bG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0
QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1z
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZS
b2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4
LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
R0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhl
bHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUs
IGxlbmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2
OCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lz
Rm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFy
YW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dM
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNp
emUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRl
eFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUs
IEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
Um9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBp
bWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRl
eEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdM
RShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBp
bnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xF
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFn
ZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1
ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRCdWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFO
R0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZv
cm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRl
eEF0dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2
Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBs
b2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFO
R0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRh
dGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RB
TkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xp
bnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFy
YW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRC
dWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXpl
LCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFO
R0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIs
IHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwg
cG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9n
cmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50
ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRC
b29sZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJv
b2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xF
KHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5n
dGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZS
b2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9i
dXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcg
KzcwNCw5IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xz
aXplaSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBm
aXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4
NiArNzQxLDExNCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFO
R0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlm
b3JtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1p
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUo
R0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IGNvbnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0
LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFt
ZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdM
RShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFt
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwg
cGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVy
SWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBh
cmFtZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJ
dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1
c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5H
TEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RB
TkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2
NCo+KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4
IDQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0ZTEwYjhlMzgwNTgxYzkxYjIuLjViNWRlODMwMzNiMmUy
ODAwYWFmYWEwZjc4M2IwNWRiOGZmYjNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuY3BwCkBAIC0xODEsMTEgKzE4MSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVD
b3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
QU5HTEUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRy
cy5kZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4
dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVS
LCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdM
X1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRo
YXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBo
YXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UIHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjAs
MTMgKzMyMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1B
WF9URVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpF
LCB2YWx1ZSk7CkBAIC0zNTksMTMgKzM2MywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdD
R0x1aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNo
YWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50
KiBwcmVjaXNpb24pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9u
KTsKIH0KIApAQCAtMzgyLDEzICszOTAsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFy
LCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRo
UmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFy
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQwMyw3ICs0MTUsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwg
cHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBp
eGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0
dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdl
dCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUxOCw3ICs1MzIsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTY4LDcgKzU4NCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1f
Y3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogCiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVI7CiAKQEAgLTYyNCw5ICs2NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM0LDEyICs2NDksMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CiAKQEAgLTY2MiwxMSArNjc5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGdsOjpDb2xvck1hc2soR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7
CiAgICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRo
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAg
ICAgIGdsOjpDbGVhckRlcHRoZigxLjBmKTsKICAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdMX0RF
UFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soR0xfVFJV
RSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwogICAgIH0KKwog
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKICAgICAgICAgZ2w6OkNsZWFyU3RlbmNp
bCgwKTsKQEAgLTY4Miw3ICs3MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNv
bG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAg
ICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0s
IGNvbG9yTWFza1szXSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6Q2xl
YXJEZXB0aGYoY2xlYXJEZXB0aCk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsK
ICAgICB9CiAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKQEAgLTcwOSw3ICs3MjcsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0
ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQgPSB0ZXh0dXJlOwogICAgIGdsOjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAt
NzE4LDI2ICs3MzgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hh
ZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBHTHVpbnQgZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAg
ICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTc1NiwxMDcgKzc4NCwxNDEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4
dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CiAgICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3Io
R0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNs
YW1wZiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6QmxlbmRFcXVhdGlvbihtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVt
IG1vZGVBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3Ip
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRG
dW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1
c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwogfQogCiB2b2lkKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTHNpemVpcHRyIGxlbmd0aCwgR0NHTGJpdGZpZWxkIGFjY2VzcykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2Uo
dGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdl
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJl
YWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0
LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTGludCogcGFyYW1zKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZT
aXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdG9yYWdl
M0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CkBAIC04NjQsNDYgKzkyNiw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBH
Qwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNl
cywgR0NHTGVudW0gcG5hbWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0
YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gZ2w6OkNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1w
ZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpD
bGVhcihtYXNrKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBH
Q0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICAvLyBXZSBuZWVkIHRoZSBBTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSBleHRlbnNpb24gdG8gc3Vw
cG9ydCBJT1N1cmZhY2UKICAgICAvLyBiYWNrYnVmZmVycywgYnV0IHdlIGRvbid0IHdhbnQgaXQg
ZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNoYWRlcnMuCiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJs
ZSBpdCBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uLgpAQCAtOTE1LDEzICs5OTEsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVI7CiAKQEAgLTkzNiw3ICsxMDE2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0cKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJH
TDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAtOTUxLDE5ICsxMDMzLDI1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVu
dW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q3VsbEZhY2UobW9kZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBm
dW5jKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aEZ1bmMoZnVuYyk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBm
bGFnKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9
CiAKQEAgLTk3MSw4MiArMTA1OSwxMDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAg
ICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RGlzYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NH
TGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAg
Y2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdF
bGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6RnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTEwNTYsNyArMTE3MCw5
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIGdsOjpH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7CiAgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCkBAIC0xMDg1LDcgKzEyMDEsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAt
MTExNCw3ICsxMjMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCkBAIC0xMTIzLDcgKzEyNDMsOSBAQCBpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgUwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0xMTM1LDcgKzEyNTcsOSBA
QCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgYwogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4g
YXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpA
QCAtMTE2MiwxOSArMTI4NiwyNSBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7
CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAg
cmV0dXJuIGdsOjpHZXRFcnJvcigpOwogfQogCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6
OkdldFN0cmluZyhuYW1lKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpo
aW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOwogfQogCkBAIC0xMTgzLDEzICsxMzEzLDE3
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0J1
ZmZlcihidWZmZXIpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCkBAIC0xMTk4LDcgKzEzMzIsOSBA
QCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJl
dHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiB9CiAKQEAgLTEyMDcsNyArMTM0
Myw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEyMTYsNyArMTM1NCw5IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHJlbmRlcmJ1ZmZlCiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6
SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIApAQCAtMTIyNSw3ICsxMzY1LDkgQEAg
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzU2hhZGVy
KHNoYWRlcik7CiB9CiAKQEAgLTEyMzQsNDQgKzEzNzYsNTggQEAgR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAg
ICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6TGluZVdpZHRoKHdpZHRoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6TGlua1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xm
bG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xl
YW4gaW52ZXJ0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Np
c3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCkBAIC0xMjc5LDcgKzE0MzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZwogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Y29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAg
Y29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7
CkBAIC0xMjg5LDE3OCArMTQ0NiwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVu
YywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWYobG9jYXRpb24sIHYw
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6
ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFy
cmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VXNlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIApAQCAtMTQ2OCw3OSArMTY4MSwxMDUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0
dHJpYjJmKGluZGV4LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIz
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZs
b2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0Zihp
bmRleCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xi
b29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYklQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Vmlld3Bv
cnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIEdMdWludCBhcnJheSA9IDA7CiAgICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAm
YXJyYXkpOwogICAgIHJldHVybiBhcnJheTsKQEAgLTE1NTAsNyArMTc4OSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKIH0KIApAQCAt
MTU1OCw1MSArMTc5OSw2NyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0g
cG5hbWUsIEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHYocG5hbWUs
IHZhbHVlKTsKIH0KICAgICAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2NCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFs
dWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3Yo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NGlf
dihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsK
QEAgLTE2MTAsNyArMTg2Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAg
LTE2MzgsNyArMTg5Nyw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9
IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
ZW5ndGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTY1Nyw3ICsxOTE4LDkgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2NjUsNyArMTkyOCw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUp
OwogfQogCkBAIC0xNjczLDcgKzE5MzgsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBs
ZW5ndGggPSAwOwogICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdU
SCwgJmxlbmd0aCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0xNjk0LDMxICsxOTYxLDQxIEBAIFN0
cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFy
YW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0VW5pZm9ybXVpdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwog
fQogCkBAIC0xNzI2LDI1ICsyMDAzLDMyIEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgcmV0dXJu
IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKIAogICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CiAgICAgZ2w6OkdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwpAQCAtMTc1Myw3ICsy
MDM3LDggQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KICAgICBnbDo6VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CkBAIC0xNzYyLDIxICsyMDQ3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9
IDA7CiAgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTc4NCw3
ICsyMDc1LDkgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50
IG8gPSAwOwogICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpA
QCAtMTc5MiwxMyArMjA4NSwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTgwNiwxMyArMjEwMywxNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIo
R0NHTGVudW0gdHlwZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6
Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFE
RVIgOiBHTF9WRVJURVhfU0hBREVSKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTgyMSwxMyArMjEyMiwxNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVCdWZmZXJz
KDEsICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVG
cmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRv
IGJlIHVzZWQgZm9yIGRyYXdpbmcKICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVs
ZXRlZC4KICAgICBpZiAobV9pc0ZvcldlYkdMMikgewpAQCAtMTg0MiwyNSArMjE0NywzMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGZyYW1lYnVmZmVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1v
dmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1
ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwogICAgIH0pOwpAQCAtMTkxNiw3ICsyMjI5LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJl
Y3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFtX2lzRm9yV2ViR0wyICYmIG1fZXh0ZW5zaW9ucykK
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBtX2V4dGVuc2lvbnMtPmFkanVzdFdlYkdMMVRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKICAgICBnbDo6
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CkBAIC0xOTI1LDM0ICsyMjQwLDQ1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAg
ICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7
CiAgICAgZWxzZQotICAgICAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZCht
b2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgICAgIGdsOjpEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BV
U3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2Vi
R0wyKQogICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBl
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIGVsc2UK
LSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3Vu
dCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9m
ZnNldCksIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgZGl2aXNvcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OlZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0
ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICBn
bDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIAogR0NHTHVp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKwog
ICAgIHJldHVybiBnbDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2Nr
TmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtMTk2OSw3ICsyMjk1LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKwogICAgIEdMaW50IG1heExlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEgsICZtYXhM
ZW5ndGgpOwogICAgIGlmIChtYXhMZW5ndGggPD0gMCkgewpAQCAtMTk4Nyw3ICsyMzE1LDkgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3IKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1CbG9ja0Jp
bmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwog
fQogCkBAIC0xOTk1LDcgKzIzMjUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblF1
ZXJpZXMoMSwgJm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpAQCAtMjAwMywxOSArMjMzNSwyNSBA
QCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWl2KEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQqIHBhcmFtcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UXVl
cnlPYmplY3R1aXYoaWQsIHBuYW1lLCBwYXJhbXMpOwogfQogCkBAIC0yMDIzLDcgKzIzNjEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWlu
dCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDRwogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblRyYW5zZm9ybUZlZWRi
YWNrcygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yMDMxLDQ5ICsyMzcxLDY0IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNm
b3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZ0cmFu
c2Zvcm1GZWVkYmFjayk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2sp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5z
Zm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNr
KEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJlZ2luVHJhbnNmb3JtRmVlZGJhY2socHJpbWl0aXZlTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6RW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0g
YnVmZmVyTW9kZSkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBWZWN0b3I8Q1N0cmluZz4gY29udmVydGVkVmFyeWluZ3MgPSB2YXJ5aW5n
cy5tYXAoW10oY29uc3QgU3RyaW5nJiB2YXJ5aW5nKSB7CiAgICAgICAgIHJldHVybiB2YXJ5aW5n
LnV0ZjgoKTsKICAgICB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IHBvaW50ZXJzVG9WYXJ5
aW5ncyA9IGNvbnZlcnRlZFZhcnlpbmdzLm1hcChbXShjb25zdCBDU3RyaW5nJiB2YXJ5aW5nKSB7
CiAgICAgICAgIHJldHVybiB2YXJ5aW5nLmRhdGEoKTsKICAgICB9KTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKwogICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0s
IHBvaW50ZXJzVG9WYXJ5aW5ncy5zaXplKCksIHBvaW50ZXJzVG9WYXJ5aW5ncy5kYXRhKCksIGJ1
ZmZlck1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBHQ0dMc2l6
ZWkgYnVmU2l6ZSA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSCwgJmJ1
ZlNpemUpOwogICAgIGlmICghYnVmU2l6ZSkKQEAgLTIwOTMsNyArMjQ0OCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZm
ZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyQmFzZSh0
YXJnZXQsIGluZGV4LCBidWZmZXIpOwogfQogCkBAIC0yMTI3LDMyICsyNDg0LDQ5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIHNyY0J5CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRG
cmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBH
Q0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgx
LCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpCbGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZ
MCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwg
R0NHTGludCBsYXllcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDR0xlbnVtKiBhdHRhY2htZW50cykKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SW52
YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQ0dM
ZW51bSogYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcih0YXJnZXQs
IG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQog
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBH
Q0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsK
IApAQCAtMjE2NywxNjMgKzI1NDEsMjI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gLTE7CisKICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTJ1aShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3Vp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBH
Q0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xdWl2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0
aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWl2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRh
ICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4MmZ2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFu
c3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0
cml4NHgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0
KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEg
KyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHos
IEdDR0xpbnQgdykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmli
STRpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGludCogdmFsdWVz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4
LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0x1aW50KiB2
YWx1ZXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2
KGluZGV4LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5k
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpEcmF3UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RHJhd0J1ZmZlcnMobiwgYnVmcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIGNv
bnN0IEdDR0xpbnQqIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZl
cml2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBH
Q0dMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdDR0x1aW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09m
ZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMZmxvYXQq
IHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVy
ZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVF1ZXJpZXMoMSwgJnF1ZXJ5KTsK
IH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICBy
ZXR1cm4gZ2w6OklzUXVlcnkocXVlcnkpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0xpbnQgdmFsdWU7CiAgICAgZ2w6Okdl
dFF1ZXJ5aXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGxhdGZvcm1HTE9iamVjdD4odmFsdWUpOwpAQCAtMjMzMSw3ICsyNzY3LDkgQEAgUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmEKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlU2FtcGxlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQg
bmFtZSA9IDA7CiAgICAgZ2w6OkdlblNhbXBsZXJzKDEsICZuYW1lKTsKICAgICByZXR1cm4gbmFt
ZTsKQEAgLTIzMzksMTA0ICsyNzc3LDEzOCBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNhbXBsZXJzKDEsICZzYW1wbGVyKTsKIH0KIAog
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFNhbXBsZXIodW5pdCwgc2Ft
cGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0
ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNh
bXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2Ft
cGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2KFBsYXRmb3JtR0xPYmplY3Qg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJmdihzYW1wbGVyLCBwbmFtZSwg
dmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFy
YW1ldGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJh
bWV0ZXJpdihzYW1wbGVyLCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc3luYyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxk
IGZsYWdzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpGZW5jZVN5
bmMoY29uZGl0aW9uLCBmbGFncyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gZ2w6OklzU3luYyhzeW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVTeW5jKHN5bmMpOwogfQogCiBHQ0dMZW51bSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX1dB
SVRfRkFJTEVEOworCiAgICAgcmV0dXJuIGdsOjpDbGllbnRXYWl0U3luYyhzeW5jLCBmbGFncywg
dGltZW91dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OldhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2l2KEdDR0xzeW5j
IHN5bmMsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCAqdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFN5bmNpdihzeW5jLCBwbmFtZSwg
YnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdD
R0xzaXplaXB0ciBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVm
ZmVyUmFuZ2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOwogfQogCiBWZWN0
b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFt
ZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB7IH07CisKICAg
ICBWZWN0b3I8Q1N0cmluZz4gdXRmOCA9IHVuaWZvcm1OYW1lcy5tYXAoW10oYXV0byYgeCkgeyBy
ZXR1cm4geC51dGY4KCk7IH0pOwogICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gY3N0ciA9IHV0Zjgu
bWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHguZGF0YSgpOyB9KTsKICAgICBWZWN0b3I8R0NHTHVp
bnQ+IHJlc3VsdChjc3RyLnNpemUoKSwgMCk7CkBAIC0yNDk4LDY3ICsyOTcwLDg5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBz
cmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdD
R0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNyY0xl
bmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3Jj
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihH
Q0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQs
IEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5p
Zm9ybTFpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBj
b25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwg
c3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRh
LCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZz
ZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTRpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNw
b3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJh
bnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29jb2EubW0KaW5kZXggMzJhZTU1Yzk5OWUwMTg3NTkzN2NmOTQ5NGJiNDJiZDUy
NDVhMmM3OS4uMTllNWQ4Njc3NmVjZTY1ZTZlMWRiYjFjNWRiODBhM2ZmN2QwNmNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0zODgsMTAgKzM4OCw4
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1f
Y29udGV4dE9iaikgeworICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
ICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgLy8gVE9ETzogY2hlY2sgcmVzdWx0LgogICAg
ICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICAgICAgaWYgKGF0
dHJzLmFudGlhbGlhcykgewpAQCAtNDA4LDE4ICs0MDYsMTggQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRl
VGV4dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlm
IChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLQotICAgICAgICBpZiAo
bV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikgewotICAgICAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFn
ZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7
Ci0gICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyKTsKLSAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVy
UGJ1ZmZlcikKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgaWYgKG1fd2ViR0xMYXllcikgewogICAgICAgICBhdXRv
IHJlY3ljbGVkQnVmZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKICAgICAgICAg
aWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFj
ZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7CiAgICAgICAgIGF1dG8gY29u
dGVudHNIYW5kbGUgPSBbbV93ZWJHTExheWVyIGRldGFjaENsaWVudF07CiAgICAgICAgIGlmIChj
b250ZW50c0hhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlP
YmosIGNvbnRlbnRzSGFuZGxlKTsKLQorICAgIH0KKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAg
ICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwogICAgIH0KQEAgLTU1MywxMiArNTUxLDEwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wg
aXNWaXNpYmxlKQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVwZGF0ZUNHTENvbnRleHQoKQogewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIExPRyhXZWJH
TCwgIkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2Fs
bCBDR0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlE
aXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0
X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4
dCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCmluZGV4IGJiZDlkNDQ2Zjkx
ZWQ1ZTFiYmJhNGQzNzAyZDQzMmY3MWVmZmE0ZTAuLjE3Nzg2YTY0YmE0ZTFkYTAwOTY0ZWFlOTk3
ZDI5Mjc2NGRhZDE4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC01MCwxNyAr
NTAsMjUgQEAgRXh0ZW5zaW9uc0dMT3BlbkdMOjp+RXh0ZW5zaW9uc0dMT3BlbkdMKCkgPSBkZWZh
dWx0OwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gw
LCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywg
ZmlsdGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0
ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtNzYsNyAr
ODQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0
ZWQoKSkKICAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTkwLDcg
KzEwMCw5IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNW
ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFy
cmF5KGFycmF5KTsKQEAgLTEwMiw3ICsxMTQsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xP
cGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVj
dFN1cHBvcnRlZCgpKQogICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xOTYs
NiArMjEwLDkgQEAgYm9vbCBFeHRlbnNpb25zR0xPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJz
RVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vICBG
SVhNRTogaW1wbGVtZW50IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3Jtcy4KICNpZiBQTEFURk9S
TShHVEspCiAgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOwpAQCAtMjA3LDcgKzIyNCw5IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29u
c3QgR0NHTGVudW0qIGJ1ZnMpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2Vk
KG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICNlbHNlCkBAIC0yMjAsNyArMjM5LDkg
QEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHMKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNv
dW50KTsKICNlbHNlCkBAIC0yMzQsNyArMjU1LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6
OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEcK
IAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsVmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5j
cHAKaW5kZXggZjY0YmRlZTMxMjkzM2JmM2VkZDVmYmRmNTMxOTJkYjQ1NGE3ZWRjNi4uYWI4Y2I1
NGY1ZTg3OWVmNGI4YTkwZDE5YTdlYzkyYzg5Y2UyMDU3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMRVMuY3BwCkBAIC04NSw2ICs4NSw4IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVu
c2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQogeworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKICAgICAgICAg
bV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKICAgICBlbHNlCkBAIC05Myw2
ICs5NSw4IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBp
ZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlCkBAIC0xMDYsNiArMTEwLDggQEAgdm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8s
IGxvbmcgLyogc3JjWTAgKi8sIGwKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQogICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgZWxzZQpAQCAtMTI5LDggKzEzNSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7Cisg
ICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICBHTHVpbnQgYXJyYXkgPSAwOwogICAgICAgICBtX2dsR2VuVmVy
dGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTE0NCwz
MyArMTUxLDM1IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAo
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwg
JmFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCiBHQ0dM
Ym9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJ
c1ZlcnRleEFycmF5T0VTKQorICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykgeworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CiAgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7
Ci0KKyAgICB9CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFy
cmF5T0VTKQorICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0gICAgZWxzZQorICAgIH0gZWxz
ZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKIH0KIApAQCAtMTg4LDggKzE5Nyw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVz
ICE9IEdMX05PX0VSUk9SKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CiAg
ICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1f
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNl
dCA9IFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkI7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmVhc29uRm9yUmVzZXQgPSBtX2dsR2V0
R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgpOwogICAgICAgICBpZiAocmVhc29uRm9yUmVzZXQgIT0g
R0xfTk9fRVJST1IpCiAgICAgICAgICAgICBtX2NvbnRleHRSZXNldFN0YXR1cyA9IHJlYXNvbkZv
clJlc2V0OwogICAgICAgICByZXR1cm4gcmVhc29uRm9yUmVzZXQ7CkBAIC0yMDIsNyArMjEyLDkg
QEAgaW50IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkK
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKQogewogICAgIGlmIChtX2ds
UmVhZG5QaXhlbHNFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgogICAgICAgICA6OmdsRmx1c2goKTsKQEAgLTIxOSw3ICsyMzEsOSBAQCB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpegogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1m
dkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBm
bG9hdCAqcGFyYW1zKQogewogICAgIGlmIChtX2dsR2V0blVuaWZvcm1mdkVYVCkgewotICAgICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
bV9nbEdldG5Vbmlmb3JtZnZFWFQocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzAsNyArMjQ0LDkgQEAgdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDR0wKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQo
R0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgaW50ICpw
YXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWl2RVhUKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2dsR2V0
blVuaWZvcm1pdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NSw3ICsyNjEsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDRwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogfQogCkBAIC0yNTYsNyArMjc0LDkgQEAgdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwogfQogCkBAIC0yNjcsNyAr
Mjg3LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcihH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2dsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA2OTg4YmQ2OWNhMGYwMTBmYTFiNjhmNjY1MzA3ODNl
YmZjNjNmNDEyLi5jZGY2NDA5OTM0MzQ4MmE0YzE2ZDNjYmUzNDc5YzhjMGFiYTQ4MTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtMTEyLDcgKzExMiw2IEBAIHB1Ymxp
YzoKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CiAjZW5k
aWYKIAotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBlbnVtIGNsYXNzIFJlbGVhc2VCZWhhdmlvciB7CiAgICAgICAgIFByZXNlcnZl
VGhyZWFkUmVzb3VyY2VzLApAQCAtNTE3LDYgKzUxNiw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwogCisgICAgLy8gQ2Fs
bGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBj
YWxsIE9wZW5HTC4KKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBw
b2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIC8vIFRh
a2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0
cmlidXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5k
IGRldGVybWluZSB3aGljaCBjb3VsZCBvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAppbmRleCAyMGJmMmY0Zjk4NGNjN2YyYmI3M2M2ZGE1NTlmMDgwMGEzM2Ex
NDljLi43NTBlZDMyNmVjZTY1ZTg4ZjZiNDEzNjAxNWM0ZjkzMzc0NDg5Y2E1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMjM3LDcgKzIzNyw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgcmVjCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogI2lmIFVTRShPUEVOR0wpCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewog
ICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKQEAgLTI2NCw3ICsyNjYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFs
dWUpCiAgICAgLy8gYmVjYXVzZSBkZXNrdG9wIEdMJ3MgY29ycmVzcG9uZGluZyBxdWVyaWVzIHJl
dHVybiB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMKICAgICAvLyB3aGVyZWFzIEdMRVMyIHJldHVy
biB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgKGVhY2ggdmVjdG9yIGhhcyA0IGNvbXBvbmVudHMpLgog
ICAgIC8vIFRoZXJlZm9yZSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlc2t0b3AgR0wgbmVlZHMg
dG8gYmUgZGl2aWRlZCBieSA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5h
bWUpIHsKICNpZiBVU0UoT1BFTkdMKQogICAgIGNhc2UgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzoKQEAgLTMxMCw3ICszMTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTAogICAgIEFT
U0VSVChyYW5nZSk7CiAgICAgQVNTRVJUKHByZWNpc2lvbik7CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKIAogICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxPV19JTlQ6CkBAIC00MDMsMTMgKzQwOSwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFt
cGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKQEAgLTQyOCw3ICs0MzgsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsCiAKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGbHVzaCgpOwogICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApp
bmRleCBiMTRiNjJkNWU0ZmJlYThlYTJjODc4NTZlN2JmZWQ2YjhkMzg2N2IyLi5lZmY4NjAyZDc5
ZmZjZDIyYTZmM2ViZGRiYjQ4NGU4MjVkZTZhNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTIwMCw3ICsyMDAsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogI2lmICFV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29w
ZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwpAQCAtMjM5LDcgKzI0MSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2ln
bmVkIGNoYXIgKnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRX
aWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlmIChj
b250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtMjczLDkgKzI3Nyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNo
YXIgKnBpeGVscywgaW50IHBpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50
V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yODMsMTIgKzI4NCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogCiAgICAgbV9jdXJyZW50
V2lkdGggPSB3aWR0aDsKICAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIFRlbXBv
cmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNF
KTsKQEAgLTQyNyw3ICs0MzAsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVj
aXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRl
eHR1cmU7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CkBAIC00MzYsNyArNDQx
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xBdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKIH0KQEAgLTQ0NCw3ICs0NTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybUdMTwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxv
Y2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5h
bWUudXRmOCgpLmRhdGEoKSk7CkBAIC00NTMsMTMgKzQ2MSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBHTHVpbnQg
ZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTQ3NSwxMDIg
KzQ4NywxMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwogfQogCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuc2V0
Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7
CiAgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYg
Z3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0g
bW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBo
YSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xl
bnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0gICAgICAgCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwg
R0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwg
ZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdD
R0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0
IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBzaXplLCBkYXRhKTsKIH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFtcGYg
ciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyKG1hc2spOwogICAgIGNoZWNrR1BVU3RhdHVz
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQ0dM
aW50IHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyU3RlbmNpbChzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29sZWFu
IHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFuIGFs
cGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFR1cm4gb24gbmFtZSBtYXBwaW5nLiBEdWUg
dG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCiAgICAgLy8gcG9pbnQgYSBn
bG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4dC4KQEAgLTYzMiw3
ICs2NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBIYXNoTWFwPFBsYXRmb3JtR0xPYmpl
Y3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwogCkBAIC02NjYsNyArNzEwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CiAKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOwpAQCAtNjgxLDcgKzcyNyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CiAKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0
ZS5ib3VuZERyYXdGQk8pOwpAQCAtNjk2LDE5ICs3NDQsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBt
b2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKIH0KIApA
QCAtNzE2LDgzICs3NzAsMTA5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFj
aFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICA6
OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xEaXNhYmxlKGNhcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2Rl
LCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKICAgICBjaGVja0dQVVN0
YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMo
R0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRy
IG9mZnNldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRHJhd0VsZW1lbnRzKG1v
ZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGlu
dHB0cl90PihvZmZzZXQpKSk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsRW5hYmxlKGNhcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbEZpbmlzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmbHVzaCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZsdXNo
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xGcm9udEZhY2UobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
bmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0KIApAQCAtODAyLDcgKzg4Miw5IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmli
dXRlU2l6ZSk7CiAgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8g
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24u
CkBAIC04NDgsNyArOTMwLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0cKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50
IG1heFVuaWZvcm1TaXplID0gMDsKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CiAKQEAgLTg5NCw3ICs5
NzgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMcwogICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3Vu
dCwgc2hhZGVycyk7CiB9CiAKQEAgLTEwMzcsNyArMTEyMyw5IEBAIGludCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBTCiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gLTE7CisKIAogICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFt
ZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKICAgICBMT0co
V2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTEwNDksMTQgKzEx
MzcsMTggQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRp
cmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogCiAgICAgcmV0dXJuIDo6
Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBi
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGJvb2wgbW92ZWRBbkVycm9y
ID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRv
IGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpAQCAtMTA4MywxOSArMTE3NSwyNSBAQCBHQ0dMZW51
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gbV9z
eW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOwogfQogCiBT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIHJldHVybiBTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
bW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUp
OwogfQogCkBAIC0xMTA0LDEzICsxMjAyLDE3IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKICAgICBpZiAoIWJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwogfQogCiBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXAp
OwogfQogCkBAIC0xMTE5LDcgKzEyMjEsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogICAg
IGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFt
ZWJ1ZmZlcik7CiB9CiAKQEAgLTExMjgsNyArMTIzMiw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAg
IGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAK
QEAgLTExMzcsNyArMTI0Myw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlCiAgICAgaWYgKCFy
ZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVm
ZmVyKTsKIH0KIApAQCAtMTE0Niw3ICsxMjU0LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogICAgIGlmICgh
c2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7CiB9CiAKQEAgLTExNTUs
MjAgKzEyNjUsMjYgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4
dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICBy
ZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIEdDR0xzaXplaSBjb3Vu
dCA9IDA7CiAgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwpAQCAtMTE4Miwy
NSArMTI5OCwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xmbG9hdCBmYWN0b3Is
IEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsUG9seWdv
bk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xlYW4gaW52ZXJ0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3NvcihHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwog
fQogCkBAIC0xMjA4LDcgKzEzMzIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
aGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogewogICAg
IEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBTaGFkZXJTb3Vy
Y2VFbnRyeSBlbnRyeTsKIApAQCAtMTIxOSwxNzggKzEzNDUsMjM0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29u
c3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdD
R0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZh
Y2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJl
ZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
KEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxN
YXNrKG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFz
a1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dM
ZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
YWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9y
bTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9h
dCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0xZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2
MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBs
b2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2
MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2
MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCog
YXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMaW50KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5p
Zm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGlu
dCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9u
LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkK
IHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2Miwg
djMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJy
YXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDku
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBH
Q0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2LgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEzOTgsNzMgKzE1ODAsOTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0
IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRl
eCwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIx
ZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRl
eCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0
dHJpYjJmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQg
djEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4
QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCog
YXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xm
bG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0
dHJpYjRmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xl
bnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xp
bnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBhcnJheSA9IDA7CiAjaWYgKCFV
U0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExB
VEZPUk0oQ09DT0EpCiAgICAgOjpnbEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOwpAQCAtMTQ3
Nyw3ICsxNjgzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAm
JiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCiAg
ICAgOjpnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOwogI2VuZGlmCkBAIC0xNDg4LDcg
KzE2OTYsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICNpZiAo
IVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQ
TEFURk9STShDT0NPQSkKICAgICByZXR1cm4gOjpnbElzVmVydGV4QXJyYXkoYXJyYXkpOwogI2Vu
ZGlmCkBAIC0xNDk3LDcgKzE3MDcsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJh
eSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6Omds
QmluZFZlcnRleEFycmF5KGFycmF5KTsKICNlbHNlCkBAIC0xNTA3LDE5ICsxNzE5LDI1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2Jq
ZWN0IGFycmF5KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihH
Q0dMZW51bSBwbmFtZSwgR0NHTGJvb2xlYW4qIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEZsb2F0
dihwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNTI3LDcgKzE3NDUsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBp
bmRleCwgR0NHTAogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGluZGV4KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAgIC8vIEZJ
WE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3Zl
ciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBj
b250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAgLy8gOjpnbEdldEludGVnZXJpX3YocG5h
bWUsIGluZGV4LCB2YWx1ZSk7CkBAIC0xNTM2LDcgKzE3NTYsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRl
eCwgR0NHTAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0dihHQ0dM
ZW51bSBwbmFtZSwgR0NHTGludDY0KiB2YWx1ZSkKIHsKICAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQx
MTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVz
aW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQg
dXNpbmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFs
dWUpOwpAQCAtMTU0Niw3ICsxNzY4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0MKIHsKICAg
ICBVTlVTRURfUEFSQU0ocG5hbWUpOwogICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9y
ZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmgg
YW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVu
R0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1
ZSk7CkBAIC0xNTU0LDcgKzE3NzgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjRpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQwogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoYXR0YWNo
bWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCiAgICAgICAgIGF0dGFjaG1lbnQgPSBE
RVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4K
ICAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBh
dHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwpAQCAtMTU2Miw3ICsxNzg4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
R0NHTGVudW0gdGFyZ2UKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3Jh
bWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTU3Miw3ICsxODAwLDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3Jt
R0xPYmplY3QgcHIKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwogICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKICAgICAgICAgKnZhbHVlID0gcmVzdWx0LT52YWx1
ZS5jb3VudEZvclR5cGUocG5hbWUpOwpAQCAtMTY1MCw3ICsxODgwLDkgQEAgU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0x
NjY5LDcgKzE5MDEsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKIH0KIApAQCAtMTY3Nyw3ICsxOTExLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW0KIHsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgY29uc3Qg
YXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIApAQCAt
MTcxMiw3ICsxOTQ4LDggQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFk
ZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIp
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgYXV0byYgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzM5LDcgKzE5NzYsOCBAQCBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQpAQCAtMTc1MCwy
NSArMTk4OCwzMyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNv
dXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
R2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOwogfQogCkBAIC0xNzgzLDcgKzIwMjksOCBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
bwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKIAogICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lN
Qk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7CiAgICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9j
YXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFt
ZS51dGY4KCkuZGF0YSgpKTsKQEAgLTE3OTIsMTkgKzIwMzksMjQgQEAgR0NHTGludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgY28KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmli
ZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5h
bWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliaXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgs
IHBuYW1lLCB2YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CiAgICAg
OjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwpAQCAt
MTgxMyw3ICsyMDY1LDggQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogI2lmICFVU0UoT1BFTkdMX0VTKQogICAg
IGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKQpAQCAtMTg0NCwyMSArMjA5NywyNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xp
bnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRh
dGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
eG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29tcHJlc3NlZFRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CiAgICAgcmV0
dXJuIG87CkBAIC0xODY2LDcgKzIxMjUsOSBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8p
OwogICAgIHJldHVybiBvOwpAQCAtMTg3NCwxMyArMjEzNSwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAKIFBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwogfQogCiBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZm
ZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAgcmV0dXJuIG87CkBAIC0xODg4LDEzICsy
MTUzLDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKIH0KIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5UZXh0dXJlcygxLCAm
byk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKQEAgLTE5MDMsMTMgKzIx
NzIsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
VGV4dHVyZSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbERl
bGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Z29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwpAQCAtMTkyMSwyNiArMjE5NCwzNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGZyYW1lYnVmZmVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CiAgICAg
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZy
ZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1
cmVdIChhdXRvJiBrZXlWYWx1ZSkgewogICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmly
c3QgPT0gdGV4dHVyZTsKICAgICB9KTsKQEAgLTE5OTYsNyArMjI3Nyw5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0K
QEAgLTIwMjEsNyArMjMwNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzCiAjaWYgSEFWRShP
UEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRleCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKIH0KICNlbmRpZgpA
QCAtMjA0Nyw3ICsyMzMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
U3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgZHN0Qnl0ZU8KICNpZiBIQVZFKE9Q
RU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVudW0gd3JpdGVU
YXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9mZnNldCwgR0NH
THNpemVpcHRyIHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENvcHlCdWZm
ZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNl
dCwgc2l6ZSk7CiB9CiAjZWxzZQpAQCAtMjA2OCwxMyArMjM1NSwxNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBzcmNCeQogI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhBVkUoT1BFTkdMX0VTXzMpCiB2b2lk
KiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIGxlbmd0aCwgR0NHTGJpdGZpZWxkIGFj
Y2VzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiA6OmdsTWFw
QnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKIH0KIAogR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVtIHRhcmdl
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbFVubWFw
QnVmZmVyKHRhcmdldCk7CiB9CiAjZWxzZQpAQCAtMjEzOSw3ICsyNDMwLDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTGludCogcGFyYW1zKQogewogI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1h
dCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwpAQCAtMjE1MiwyMCArMjQ0NSwyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxlcywgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwg
c2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhTdG9yYWdl
MkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBt
X3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CkBAIC0yNjMw
LDcgKzI5MjksOCBAQCBWZWN0b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHBybwogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
b25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0NHTGVudW0gcG5hbWUsIFZl
Y3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CiAKICAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3Jt
SW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRh
KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCmluZGV4IDkz
ODk1ZTU2YjBjNWE1YmQ4NGNiMGFhNDk4NjgyMGFhNjcxMTQ4MTUuLjYwZmRmYzY1Zjg3Mzk1ODk1
Nzk1YTg0ZWYxZTA5YWJmNmQ3YWE4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHAKQEAgLTQyLDcgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NH
TGVudW0gdHlwZSwgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGF1
dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKQEAgLTE4OCwxMyArMTkwLDE3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkoY29uc3QgSW50UmVjdCYpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTIw
Myw3ICsyMDksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTAogICAgIEFTU0VSVChyYW5nZSk7
CiAgICAgQVNTRVJUKHByZWNpc2lvbik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdl
LCBwcmVjaXNpb24pOwogfQogCkBAIC0yMzIsMTMgKzI0MCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFt
cGYgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyRGVwdGhmKGRl
cHRoKTsKIH0KIApAQCAtMjc4LDcgKzI5MCw5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAg
ICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU+
KHRoaXMsIGRlc3RpbmF0aW9uKSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZENvbnRleHQs
ICFzaGFyZWRDb250ZXh0KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAKICAgICB2YWxpZGF0
ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8g
VGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgpAQCAtMzQzLDcgKzM1Nyw5
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKIAogICAgIGF1dG8gYXR0cmlidXRlcyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIuY3BwCmluZGV4IGMwYTJlY2I4NzQ3YzExOGYwNzA1ZGY5MTg5OGQ0NDk4MmU5
MGYyYTcuLjg5ZDE0ZDI5NTZiNzJmYTQyZWU5ODM2MmFiODBkMmJiMzBhYjNlZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0xMzksNyAr
MTM5LDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICNlbHNlCiAgICAgbV90ZXhtYXBMYXll
ciA9IFdURjo6bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlz
LCBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAgICAgYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJp
bmcgdmFsaWRhdGlvbi4KQEAgLTIxMyw3ICsyMTQsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dAogICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbmRpZgogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAogICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBo
YXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0zMzMsNyArMzM1LDggQEAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHQKICNpZiBVU0UoQU5HTEUpCiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgIGlmIChtX3RleHR1cmUpCiAgICAgICAgIGds
OjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCkBAIC0zNzcsNyArMzgwLDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCgpCiAjZWxzZQogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5H
cmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNF
RChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICBpZiAobV90ZXh0dXJlKQogICAgICAgICA6OmdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQo=
</data>
<flag name="commit-queue"
          id="427796"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411557</attachid>
            <date>2020-10-16 04:37:17 -0700</date>
            <delta_ts>2020-10-27 02:12:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217213-20201016143714.patch</filename>
            <type>text/plain</type>
            <size>200891</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FlNTZlMmE2YjI1ZGMx
N2UxNzYyODEzNjE0YzQxYTU0Y2VhYTIxNS4uMmQ4NTdjNjUyNzBmOThhOWNkOTVmNmYzNzI2NGRk
ZWZlMmZjOGE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0xNiAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFdl
YkdMIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmx5IEdyYXBoaWNzQ29udGV4dEdMIHBhcnQgMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3MjEzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82OTg3NjEwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBE
ZWFuIEphY2tzb24uCisKKyAgICAgICAgUGFydCAyIG9mIHdvcmsgdG93YXJkcyBXZWJHTCBpbXBs
ZW1lbnRhdGlvbiB3aGljaCB1c2VzCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0
IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBj
b25jcmV0ZSBjbGFzcy4KKworICAgICAgICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ29udGV4dEN1cnJlbnQoKSB0bworICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5j
dGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFs
bCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0
byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNlcyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBD
aGVjayBhbGwgcmV0dXJuIHZhbHVlcyBvZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAg
ICAgc2hvdWxkIG5vdCBjYWxsIGludG8gT3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJy
ZW50LAorICAgICAgICBhcyB0aGF0IGNhbiBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3Ig
aW5jb3JyZWN0IHJlc3VsdHMuCisgICAgICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlm
IHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQg
Zmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBv
bmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVu
Y3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhlIG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1
bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGludG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3Qg
ZWZmb3J0IG1hbm5lci4KKworICAgICAgICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRp
cmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAg
ICAgdGhyb3VnaCBnZXRFeHRlbnNpb25zKCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRp
b25hbCBjb2RlCisgICAgICAgIGluc2lkZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4
YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8KKyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4g
VGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24gYmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dMLCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJh
Y3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQg
dG8KKyAgICAgICAgdHdvLiBUaGlzIGlzIHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCwKKyAgICAgICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBp
biB0aGlzIHJlZ2FyZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVy
dGV4QXR0cmliMCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9u
c0dMQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBv
cnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJs
aXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Rmxv
YXR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQ
YXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1
ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEludGVnZXJpX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJuYWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmli
SXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBh
cmFtZXRlcmZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEZyYW1lYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlz
YW1wbGVmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdM
RVJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFk
blBpeGVsc1JvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVz
dEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVy
UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5
T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVu
ZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
QnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0
ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1
cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0
ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVy
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
RnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0
cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VmVydGV4QXR0cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5j
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVt
ZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmpl
Y3R1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZl
ZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJ4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3gyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2FtcGxlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmZW5jZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2xpZW50V2FpdFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OndhaXRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTeW5jaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VY
VCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0
YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZF
WFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3Jt
aXZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJh
eXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVx
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVk
U2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3Yp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlC
dWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYXBCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5tYXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTAt
MTYgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIEF1ZGlvIHdvcmtsZXQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMzRj
YTg1NWQ3NWI1OGQyZDQ5NWY2Nzk5MWE5N2U0ZDZhOWVkYzUzLi5iMzZkZTE0NjJlNWNkMTFmNWVh
YTdmNDgxYzU4YWYyZmMyZTE5MjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsK
LSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7Cisg
ICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAg
ICAgICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAg
ICAgICAgICBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAi
Q291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEw
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNl
QWRkcmVzcygpOwogCiAjaWYgVVNFKEFOR0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBj
b2x1bW5zLCByb3dzOwotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xF
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwg
Jmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxl
bmd0aCA9IDA7CisgICAgR0NHTHNpemVpIGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dz
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFO
R0xFKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgo
KSwgJmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlm
IChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkucmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMuYnl0ZUxlbmd0aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRl
eCA5NjliYWZjYzg3OWEwOTBiMDNjYmY0NWQxODRjZjEyMWZmNDFhZmJhLi4zNDZkMzZkZTk1ODVl
NjgzZGIzMmFjMjYyMzBkM2YyYThhMzI5MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBA
IC03NCw5ICs3NCwxMSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkg
PSBkZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykK
KyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0K
ICAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDgg
QEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFs
cmVhZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAm
JiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0
RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4
dGVuc2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBz
aGFkZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
aXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291
cmNlTGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwg
R0NHTHNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZl
cihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRz
dFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1h
c2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRp
bmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJB
TkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0
WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFO
R0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
R0x1aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
CiAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAg
aWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5
KTsKIH0KIApAQCAtMTkzLDEzICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5H
TEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFy
cmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5
T0VTKGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQog
CkBAIC0yMjgsMjUgKzI0NSwzMyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJz
RVhUKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NH
THNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBA
IC0yNzEsOTcgKzI5NiwxMjkgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdl
YkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xF
X3JvYnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFu
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFt
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZS
b2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2Vy
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9n
cmFtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFt
aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUo
R0NHTHVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRl
ciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xm
bG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dFRleFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0
QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4
QXR0cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1z
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZS
b2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4
LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
R0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhl
bHNSb2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUs
IGxlbmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2
OCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lz
Rm9yV2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFy
YW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dM
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNp
emUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1h
dCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRl
eFN1YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUs
IEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRS
b2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
Um9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBp
bWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRl
eEltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdM
RShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBp
bnQgem9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkg
ZGVwdGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xF
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFn
ZTNEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVt
IHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1
ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RB
TkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRCdWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFO
R0xFKHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZv
cm1hdGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4
QXR0cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRl
eEF0dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2
Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBs
b2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dy
YW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3JtQmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRJbnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFO
R0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRh
dGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RB
TkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xp
bnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFy
YW1ldGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRC
dWZmZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2Ft
cGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpw
YXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXpl
LCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJm
dlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFO
R0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBs
ZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIs
IHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwg
cG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9n
cmFtLCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50
ZXJmYWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRC
b29sZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJv
b2xlYW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xF
KHBuYW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5n
dGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZS
b2J1c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9i
dXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcg
KzcwNCw5IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xz
aXplaSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBm
aXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4
NiArNzQxLDExNCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFO
R0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAq
cGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXpl
LCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlm
b3JtaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1p
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUo
R0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IGNvbnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0
LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJh
bXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFt
ZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdM
RShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFt
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwg
cGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVy
SWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBh
cmFtZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJ
dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1
c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5H
TEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RB
TkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2
NCo+KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4
IDQ2NWVmMjQzZjM4NmViMmY4MmM5MjY0ZTEwYjhlMzgwNTgxYzkxYjIuLjViNWRlODMwMzNiMmUy
ODAwYWFmYWEwZjc4M2IwNWRiOGZmYjNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5H
TEUuY3BwCkBAIC0xODEsMTEgKzE4MSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVD
b3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
QU5HTEUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRy
cy5kZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4
dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVS
LCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdM
X1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRo
YXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBo
YXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UIHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjAs
MTMgKzMyMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1B
WF9URVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpF
LCB2YWx1ZSk7CkBAIC0zNTksMTMgKzM2MywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdD
R0x1aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNo
YWRlclR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50
KiBwcmVjaXNpb24pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9u
KTsKIH0KIApAQCAtMzgyLDEzICszOTAsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFy
LCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRo
UmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFy
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNs
YW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQwMyw3ICs0MTUsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwg
cHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBp
eGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0
dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdl
dCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUxOCw3ICs1MzIsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5
ZXJDb21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBwcmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTY4LDcgKzU4NCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1f
Y3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogCiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVI7CiAKQEAgLTYyNCw5ICs2NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM0LDEyICs2NDksMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAg
bV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CiAKQEAgLTY2MiwxMSArNjc5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGdsOjpDb2xvck1hc2soR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7
CiAgICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRo
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAg
ICAgIGdsOjpDbGVhckRlcHRoZigxLjBmKTsKICAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdMX0RF
UFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soR0xfVFJV
RSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwogICAgIH0KKwog
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKICAgICAgICAgZ2w6OkNsZWFyU3RlbmNp
bCgwKTsKQEAgLTY4Miw3ICs3MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNv
bG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKICAg
ICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0s
IGNvbG9yTWFza1szXSk7CiAgICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6Q2xl
YXJEZXB0aGYoY2xlYXJEZXB0aCk7CiAgICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsK
ICAgICB9CiAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKQEAgLTcwOSw3ICs3MjcsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0
ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVy
ZVVuaXQgPSB0ZXh0dXJlOwogICAgIGdsOjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAt
NzE4LDI2ICs3MzgsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hh
ZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRCdWZmZXIodGFy
Z2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJh
bWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBHTHVpbnQgZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAg
ICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTc1NiwxMDcgKzc4NCwxNDEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4
dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CiAgICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3Io
R0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYgZ3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNs
YW1wZiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6QmxlbmRFcXVhdGlvbihtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVt
IG1vZGVBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xlbnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3Ip
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJh
dGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNyY0FscGhhLCBH
Q0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxlbmRG
dW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
c2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1
c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwogfQogCiB2b2lkKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRy
IG9mZnNldCwgR0NHTHNpemVpcHRyIGxlbmd0aCwgR0NHTGJpdGZpZWxkIGFjY2VzcykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2Uo
dGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdl
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJl
YWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0
LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTGludCogcGFyYW1zKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZT
aXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdG9yYWdl
M0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CkBAIC04NjQsNDYgKzkyNiw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBH
Qwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNl
cywgR0NHTGVudW0gcG5hbWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGdsOjpHZXRBY3RpdmVVbmlm
b3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0
YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gZ2w6OkNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1w
ZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFy
Q29sb3IociwgZywgYiwgYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNs
ZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpD
bGVhcihtYXNrKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBH
Q0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICAvLyBXZSBuZWVkIHRoZSBBTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSBleHRlbnNpb24gdG8gc3Vw
cG9ydCBJT1N1cmZhY2UKICAgICAvLyBiYWNrYnVmZmVycywgYnV0IHdlIGRvbid0IHdhbnQgaXQg
ZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNoYWRlcnMuCiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJs
ZSBpdCBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uLgpAQCAtOTE1LDEzICs5OTEsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dM
aW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVI7CiAKQEAgLTkzNiw3ICsxMDE2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBH
Q0cKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9m
ZnNldCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJH
TDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAtOTUxLDE5ICsxMDMzLDI1IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVu
dW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q3VsbEZhY2UobW9kZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBm
dW5jKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aEZ1bmMoZnVuYyk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBm
bGFnKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aE1hc2soZmxhZyk7CiB9
CiAKQEAgLTk3MSw4MiArMTA1OSwxMDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAg
ICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RGlzYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NH
TGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAg
Y2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwg
R0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdF
bGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRl
eCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdD
R0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6RnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTEwNTYsNyArMTE3MCw5
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIGdsOjpH
ZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4
QXR0cmlidXRlU2l6ZSk7CiAgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXpl
KTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCkBAIC0xMDg1LDcgKzEyMDEsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAt
MTExNCw3ICsxMjMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCkBAIC0xMTIzLDcgKzEyNDMsOSBAQCBpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgUwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0xMTM1LDcgKzEyNTcsOSBA
QCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgYwogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4g
YXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpA
QCAtMTE2MiwxOSArMTI4NiwyNSBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RXJyb3IoKQogICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7
CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAg
cmV0dXJuIGdsOjpHZXRFcnJvcigpOwogfQogCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFN0cmluZyhHQ0dMZW51bSBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKwogICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6
OkdldFN0cmluZyhuYW1lKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpo
aW50KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOwogfQogCkBAIC0xMTgzLDEzICsxMzEzLDE3
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGJ1ZmZlcikKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0J1
ZmZlcihidWZmZXIpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNFbmFibGVkKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXApOwogfQogCkBAIC0xMTk4LDcgKzEzMzIsOSBA
QCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0
Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJl
dHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiB9CiAKQEAgLTEyMDcsNyArMTM0
Myw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtKQogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEyMTYsNyArMTM1NCw5IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHJlbmRlcmJ1ZmZlCiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6
SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIApAQCAtMTIyNSw3ICsxMzY1LDkgQEAg
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyKQogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzU2hhZGVy
KHNoYWRlcik7CiB9CiAKQEAgLTEyMzQsNDQgKzEzNzYsNTggQEAgR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAg
ICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6TGluZVdpZHRoKHdpZHRoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6TGlua1Byb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDR0xm
bG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwgR0NHTGJvb2xl
YW4gaW52ZXJ0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVDb3ZlcmFn
ZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2Np
c3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogfQogCkBAIC0xMjc5LDcgKzE0MzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0
cmluZwogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Y29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAg
Y29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7
CkBAIC0xMjg5LDE3OCArMTQ0NiwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0gZnVuYywgR0NH
TGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZnVu
YywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVpbnQgbWFzaykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0NHTGVu
dW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpmYWlsLCBHQ0dM
ZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWYobG9jYXRpb24sIHYw
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0
IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6
ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGludCBsb2NhdGlv
biwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFy
cmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlv
biwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
aW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXpl
aSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NH
TGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
THNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdD
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VXNlUHJvZ3JhbShw
cm9ncmFtKTsKIH0KIApAQCAtMTQ2OCw3OSArMTY4MSwxMDUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIxZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0
dHJpYjJmKGluZGV4LCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIz
ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2
MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIzZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWlu
dCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZs
b2F0IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0Zihp
bmRleCwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xi
b29sZWFuIG5vcm1hbGl6ZWQsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSVBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBvZmZz
ZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYklQb2ludGVy
KGluZGV4LCBzaXplLCB0eXBlLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmlld3BvcnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Vmlld3Bv
cnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIEdMdWludCBhcnJheSA9IDA7CiAgICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAm
YXJyYXkpOwogICAgIHJldHVybiBhcnJheTsKQEAgLTE1NTAsNyArMTc4OSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3Qg
YXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKIH0KIApAQCAt
MTU1OCw1MSArMTc5OSw2NyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0g
cG5hbWUsIEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHYocG5hbWUs
IHZhbHVlKTsKIH0KICAgICAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2NCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFs
dWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3Yo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NGlf
dihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsK
QEAgLTE2MTAsNyArMTg2Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAg
LTE2MzgsNyArMTg5Nyw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9
IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
ZW5ndGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTY1Nyw3ICsxOTE4LDkgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2NjUsNyArMTkyOCw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUp
OwogfQogCkBAIC0xNjczLDcgKzE5MzgsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBs
ZW5ndGggPSAwOwogICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdU
SCwgJmxlbmd0aCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0xNjk0LDMxICsxOTYxLDQxIEBAIFN0
cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFy
YW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0VW5pZm9ybXVpdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwog
fQogCkBAIC0xNzI2LDI1ICsyMDAzLDMyIEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgcmV0dXJu
IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKIAogICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CiAgICAgZ2w6OkdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwpAQCAtMTc1Myw3ICsy
MDM3LDggQEAgR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdD
R0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KICAgICBnbDo6VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CkBAIC0xNzYyLDIxICsyMDQ3LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dM
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlv
ZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9
IDA7CiAgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTc4NCw3
ICsyMDc1LDkgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50
IG8gPSAwOwogICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpA
QCAtMTc5MiwxMyArMjA4NSwxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTgwNiwxMyArMjEwMywxNyBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIo
R0NHTGVudW0gdHlwZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6
Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFE
RVIgOiBHTF9WRVJURVhfU0hBREVSKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZvKTsKICAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTgyMSwxMyArMjEyMiwxNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVCdWZmZXJz
KDEsICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVG
cmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRv
IGJlIHVzZWQgZm9yIGRyYXdpbmcKICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVs
ZXRlZC4KICAgICBpZiAobV9pc0ZvcldlYkdMMikgewpAQCAtMTg0MiwyNSArMjE0NywzMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdM
T2JqZWN0IGZyYW1lYnVmZmVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVy
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZyZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1v
dmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1
ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwogICAgIH0pOwpAQCAtMTkxNiw3ICsyMjI5LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJl
Y3QoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFtX2lzRm9yV2ViR0wyICYmIG1fZXh0ZW5zaW9ucykK
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBtX2V4dGVuc2lvbnMtPmFkanVzdFdlYkdMMVRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKICAgICBnbDo6
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CkBAIC0xOTI1LDM0ICsyMjQwLDQ1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRy
YXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAg
ICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7
CiAgICAgZWxzZQotICAgICAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZCht
b2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgICAgIGdsOjpEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGNoZWNrR1BV
U3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lzRm9yV2Vi
R0wyKQogICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBl
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIGVsc2UK
LSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3Vu
dCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgICAgICBnbDo6RHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9m
ZnNldCksIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwg
R0NHTHVpbnQgZGl2aXNvcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OlZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0
ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICBn
bDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIAogR0NHTHVp
bnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1CbG9ja0luZGV4KFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiB1bmlmb3JtQmxvY2tOYW1lKQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKwog
ICAgIHJldHVybiBnbDo6R2V0VW5pZm9ybUJsb2NrSW5kZXgocHJvZ3JhbSwgdW5pZm9ybUJsb2Nr
TmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtMTk2OSw3ICsyMjk1LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKwogICAgIEdMaW50IG1heExlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1p
dihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEgsICZtYXhM
ZW5ndGgpOwogICAgIGlmIChtYXhMZW5ndGggPD0gMCkgewpAQCAtMTk4Nyw3ICsyMzE1LDkgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3IKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1CbG9ja0Jp
bmRpbmcocHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOwog
fQogCkBAIC0xOTk1LDcgKzIzMjUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblF1
ZXJpZXMoMSwgJm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpAQCAtMjAwMywxOSArMjMzNSwyNSBA
QCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVRdWVyeSgp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJlZ2luUXVlcnkoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpCZWdpblF1ZXJ5KHRhcmdldCwgcXVlcnkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjplbmRRdWVyeShHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkVuZFF1ZXJ5KHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFF1ZXJ5T2JqZWN0dWl2KEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQqIHBhcmFtcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UXVl
cnlPYmplY3R1aXYoaWQsIHBuYW1lLCBwYXJhbXMpOwogfQogCkBAIC0yMDIzLDcgKzIzNjEsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWlu
dCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDRwogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKICAgICBHTHVpbnQgbmFtZSA9IDA7CiAgICAgZ2w6OkdlblRyYW5zZm9ybUZlZWRi
YWNrcygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yMDMxLDQ5ICsyMzcxLDY0IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVHJhbnNm
b3JtRmVlZGJhY2soUGxhdGZvcm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZ0cmFu
c2Zvcm1GZWVkYmFjayk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1RyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2sp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1RyYW5z
Zm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6QmluZFRyYW5zZm9ybUZlZWRiYWNrKHRhcmdldCwgdHJhbnNmb3JtRmVlZGJhY2spOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNr
KEdDR0xlbnVtIHByaW1pdGl2ZU1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJlZ2luVHJhbnNmb3JtRmVlZGJhY2socHJpbWl0aXZlTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6RW5kVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YXJ5aW5ncywgR0NHTGVudW0g
YnVmZmVyTW9kZSkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBWZWN0b3I8Q1N0cmluZz4gY29udmVydGVkVmFyeWluZ3MgPSB2YXJ5aW5n
cy5tYXAoW10oY29uc3QgU3RyaW5nJiB2YXJ5aW5nKSB7CiAgICAgICAgIHJldHVybiB2YXJ5aW5n
LnV0ZjgoKTsKICAgICB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IHBvaW50ZXJzVG9WYXJ5
aW5ncyA9IGNvbnZlcnRlZFZhcnlpbmdzLm1hcChbXShjb25zdCBDU3RyaW5nJiB2YXJ5aW5nKSB7
CiAgICAgICAgIHJldHVybiB2YXJ5aW5nLmRhdGEoKTsKICAgICB9KTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKwogICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKHByb2dyYW0s
IHBvaW50ZXJzVG9WYXJ5aW5ncy5zaXplKCksIHBvaW50ZXJzVG9WYXJ5aW5ncy5kYXRhKCksIGJ1
ZmZlck1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBHQ0dMc2l6
ZWkgYnVmU2l6ZSA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSCwgJmJ1
ZlNpemUpOwogICAgIGlmICghYnVmU2l6ZSkKQEAgLTIwOTMsNyArMjQ0OCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZm
ZXJCYXNlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyQmFzZSh0
YXJnZXQsIGluZGV4LCBidWZmZXIpOwogfQogCkBAIC0yMTI3LDMyICsyNDg0LDQ5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50cHRyIHNyY0J5CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsaXRG
cmFtZWJ1ZmZlcihHQ0dMaW50IHNyY1gwLCBHQ0dMaW50IHNyY1kwLCBHQ0dMaW50IHNyY1gxLCBH
Q0dMaW50IHNyY1kxLCBHQ0dMaW50IGRzdFgwLCBHQ0dMaW50IGRzdFkwLCBHQ0dMaW50IGRzdFgx
LCBHQ0dMaW50IGRzdFkxLCBHQ0dMYml0ZmllbGQgbWFzaywgR0NHTGVudW0gZmlsdGVyKQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpCbGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZ
MCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCwg
R0NHTGludCBsYXllcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppbnZhbGlkYXRlRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDR0xlbnVtKiBhdHRhY2htZW50cykKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SW52
YWxpZGF0ZUZyYW1lYnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZVN1YkZyYW1lYnVm
ZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQ0dM
ZW51bSogYXR0YWNobWVudHMsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcih0YXJnZXQs
IG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQog
eworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpSZWFkQnVmZmVyKHNyYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgR0NHTGludCB4LCBH
Q0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBH
Q0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsK
IApAQCAtMjE2NywxNjMgKzI1NDEsMjI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogR0NH
TGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gLTE7CisKICAgICByZXR1cm4gZ2w6OkdldEZyYWdEYXRhTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTF1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTF1aShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0x1aW50
IHYwLCBHQ0dMdWludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bTJ1aShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTN1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3Vp
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTR1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEs
IEdDR0x1aW50IHYyLCBHQ0dMdWludCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTR1aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBH
Q0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xdWl2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMnVpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3Vp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0zdWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdihHQ0dMaW50IGxvY2F0
aW9uLCBjb25zdCBHQ0dMdWludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWl2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MngzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09m
ZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRh
ICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bU1hdHJpeDN4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4MmZ2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFu
c3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4NHgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0
cml4NHgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDN4NGZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0
KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEg
KyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJJNGkoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMaW50IHos
IEdDR0xpbnQgdykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmli
STRpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSTRpdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGludCogdmFsdWVz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNGl2KGluZGV4
LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRy
aWJJNHVpKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCB4LCBHQ0dMdWludCB5LCBHQ0dMdWludCB6
LCBHQ0dMdWludCB3KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWJJNHVpKGluZGV4LCB4LCB5LCB6LCB3KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliSTR1aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0x1aW50KiB2
YWx1ZXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWl2
KGluZGV4LCB2YWx1ZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3
UmFuZ2VFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMdWludCBzdGFydCwgR0NHTHVpbnQgZW5k
LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpEcmF3UmFuZ2VFbGVtZW50cyhtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdCdWZmZXJzKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RHJhd0J1ZmZlcnMobiwgYnVmcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQnVmZmVyaXYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIGNv
bnN0IEdDR0xpbnQqIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZl
cml2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJ1aXYoR0NHTGVudW0gYnVmZmVyLCBH
Q0dMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdDR0x1aW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09m
ZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q2xlYXJCdWZmZXJ1aXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMgKyBz
cmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cmZ2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMZmxvYXQq
IHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmaShHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgR0NHTGZsb2F0IGRlcHRoLCBHQ0dMaW50IHN0ZW5jaWwpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVy
ZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVF1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVF1ZXJpZXMoMSwgJnF1ZXJ5KTsK
IH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUXVlcnkoUGxhdGZv
cm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICBy
ZXR1cm4gZ2w6OklzUXVlcnkocXVlcnkpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0xpbnQgdmFsdWU7CiAgICAgZ2w6Okdl
dFF1ZXJ5aXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGxhdGZvcm1HTE9iamVjdD4odmFsdWUpOwpAQCAtMjMzMSw3ICsyNzY3LDkgQEAgUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmEKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlU2FtcGxlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQg
bmFtZSA9IDA7CiAgICAgZ2w6OkdlblNhbXBsZXJzKDEsICZuYW1lKTsKICAgICByZXR1cm4gbmFt
ZTsKQEAgLTIzMzksMTA0ICsyNzc3LDEzOCBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2FtcGxlcihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVNhbXBsZXJzKDEsICZzYW1wbGVyKTsKIH0KIAog
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2FtcGxlcihQbGF0Zm9ybUdM
T2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc1NhbXBsZXIoc2FtcGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRTYW1wbGVyKEdDR0x1aW50IHVuaXQsIFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZFNhbXBsZXIodW5pdCwgc2Ft
cGxlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZXJQYXJhbWV0
ZXJpKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFy
YW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJpKHNh
bXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnNhbXBsZXJQYXJhbWV0ZXJmKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUsIEdDR0xmbG9hdCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2Ft
cGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2KFBsYXRmb3JtR0xPYmplY3Qg
c2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJmdihzYW1wbGVyLCBwbmFtZSwg
dmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVyUGFy
YW1ldGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJh
bWV0ZXJpdihzYW1wbGVyLCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc3luYyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZmVuY2VTeW5jKEdDR0xlbnVtIGNvbmRpdGlvbiwgR0NHTGJpdGZpZWxk
IGZsYWdzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpGZW5jZVN5
bmMoY29uZGl0aW9uLCBmbGFncyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1N5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gZ2w6OklzU3luYyhzeW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyhHQ0dMc3luYyBzeW5jKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEZWxldGVTeW5jKHN5bmMpOwogfQogCiBHQ0dMZW51bSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZp
ZWxkIGZsYWdzLCBHQ0dMdWludDY0IHRpbWVvdXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX1dB
SVRfRkFJTEVEOworCiAgICAgcmV0dXJuIGdsOjpDbGllbnRXYWl0U3luYyhzeW5jLCBmbGFncywg
dGltZW91dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTGludDY0IHRpbWVvdXQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OldhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3luY2l2KEdDR0xzeW5j
IHN5bmMsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCAqdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFN5bmNpdihzeW5jLCBwbmFtZSwg
YnVmU2l6ZSwgbnVsbHB0ciwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6UGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1
aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlciwgR0NHTGludHB0ciBvZmZzZXQsIEdD
R0xzaXplaXB0ciBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVm
ZmVyUmFuZ2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOwogfQogCiBWZWN0
b3I8R0NHTHVpbnQ+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1bmlmb3JtTmFt
ZXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiB7IH07CisKICAg
ICBWZWN0b3I8Q1N0cmluZz4gdXRmOCA9IHVuaWZvcm1OYW1lcy5tYXAoW10oYXV0byYgeCkgeyBy
ZXR1cm4geC51dGY4KCk7IH0pOwogICAgIFZlY3Rvcjxjb25zdCBjaGFyKj4gY3N0ciA9IHV0Zjgu
bWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHguZGF0YSgpOyB9KTsKICAgICBWZWN0b3I8R0NHTHVp
bnQ+IHJlc3VsdChjc3RyLnNpemUoKSwgMCk7CkBAIC0yNDk4LDY3ICsyOTcwLDg5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBz
cmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VW5pZm9ybTFmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdD
R0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNyY0xl
bmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3Jj
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihH
Q0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQs
IEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5p
Zm9ybTFpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBj
b25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwg
c3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRh
LCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsg
c3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRp
dihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMaW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZz
ZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTRpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxv
Y2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NH
THVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNw
b3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBz
cmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJh
bnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29jb2EubW0KaW5kZXggMzJhZTU1Yzk5OWUwMTg3NTkzN2NmOTQ5NGJiNDJiZDUy
NDVhMmM3OS4uMTllNWQ4Njc3NmVjZTY1ZTZlMWRiYjFjNWRiODBhM2ZmN2QwNmNjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0zODgsMTAgKzM4OCw4
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1f
Y29udGV4dE9iaikgeworICAgIGlmIChtYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
ICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgLy8gVE9ETzogY2hlY2sgcmVzdWx0LgogICAg
ICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICAgICAgaWYgKGF0
dHJzLmFudGlhbGlhcykgewpAQCAtNDA4LDE4ICs0MDYsMTggQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAgICAgICAgICAgICBnbDo6RGVsZXRl
VGV4dHVyZXMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyVGV4dHVyZSk7CiAgICAgICAgIGlm
IChtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTykKICAgICAgICAgICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJPKTsKLQotICAgICAgICBpZiAo
bV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcikgewotICAgICAgICAgICAgRUdMX1JlbGVhc2VUZXhJbWFn
ZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUik7
Ci0gICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlC
dWZmZXJQYnVmZmVyKTsKLSAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9kaXNwbGF5QnVmZmVy
UGJ1ZmZlcikKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNw
bGF5QnVmZmVyUGJ1ZmZlcik7CisgICAgaWYgKG1fd2ViR0xMYXllcikgewogICAgICAgICBhdXRv
IHJlY3ljbGVkQnVmZmVyID0gW21fd2ViR0xMYXllciByZWN5Y2xlQnVmZmVyXTsKICAgICAgICAg
aWYgKHJlY3ljbGVkQnVmZmVyLmhhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFj
ZShtX2Rpc3BsYXlPYmosIHJlY3ljbGVkQnVmZmVyLmhhbmRsZSk7CiAgICAgICAgIGF1dG8gY29u
dGVudHNIYW5kbGUgPSBbbV93ZWJHTExheWVyIGRldGFjaENsaWVudF07CiAgICAgICAgIGlmIChj
b250ZW50c0hhbmRsZSkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlP
YmosIGNvbnRlbnRzSGFuZGxlKTsKLQorICAgIH0KKyAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAg
ICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQo
bV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwogICAgIH0KQEAgLTU1MywxMiArNTUxLDEwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wg
aXNWaXNpYmxlKQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVwZGF0ZUNHTENvbnRleHQoKQogewotICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIExPRyhXZWJH
TCwgIkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2Fs
bCBDR0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKICAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKICAgICBFR0xfUXVlcnlE
aXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0
X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwogICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4
dCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCmluZGV4IGJiZDlkNDQ2Zjkx
ZWQ1ZTFiYmJhNGQzNzAyZDQzMmY3MWVmZmE0ZTAuLjE3Nzg2YTY0YmE0ZTFkYTAwOTY0ZWFlOTk3
ZDI5Mjc2NGRhZDE4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC01MCwxNyAr
NTAsMjUgQEAgRXh0ZW5zaW9uc0dMT3BlbkdMOjp+RXh0ZW5zaW9uc0dMT3BlbkdMKCkgPSBkZWZh
dWx0OwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gw
LCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywg
ZmlsdGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0
ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQpAQCAtNzYsNyAr
ODQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0
ZWQoKSkKICAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTkwLDcg
KzEwMCw5IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNW
ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFy
cmF5KGFycmF5KTsKQEAgLTEwMiw3ICsxMTQsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xP
cGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFy
cmF5KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVj
dFN1cHBvcnRlZCgpKQogICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xOTYs
NiArMjEwLDkgQEAgYm9vbCBFeHRlbnNpb25zR0xPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdCdWZmZXJz
RVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vICBG
SVhNRTogaW1wbGVtZW50IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3Jtcy4KICNpZiBQTEFURk9S
TShHVEspCiAgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOwpAQCAtMjA3LDcgKzIyNCw5IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29u
c3QgR0NHTGVudW0qIGJ1ZnMpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2Vk
KG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICNlbHNlCkBAIC0yMjAsNyArMjM5LDkg
QEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0g
bW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHMKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRy
YXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNv
dW50KTsKICNlbHNlCkBAIC0yMzQsNyArMjU1LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6
OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEcK
IAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsVmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5j
cHAKaW5kZXggZjY0YmRlZTMxMjkzM2JmM2VkZDVmYmRmNTMxOTJkYjQ1NGE3ZWRjNi4uYWI4Y2I1
NGY1ZTg3OWVmNGI4YTkwZDE5YTdlYzkyYzg5Y2UyMDU3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMRVMuY3BwCkBAIC04NSw2ICs4NSw4IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVu
c2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQogeworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKICAgICAgICAg
bV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKICAgICBlbHNlCkBAIC05Myw2
ICs5NSw4IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBp
ZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgbV9nbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlCkBAIC0xMDYsNiArMTEwLDggQEAgdm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8s
IGxvbmcgLyogc3JjWTAgKi8sIGwKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQogICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgZWxzZQpAQCAtMTI5LDggKzEzNSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCiAKIFBsYXRmb3JtR0xPYmplY3QgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7Cisg
ICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICBHTHVpbnQgYXJyYXkgPSAwOwogICAgICAgICBtX2dsR2VuVmVy
dGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTE0NCwz
MyArMTUxLDM1IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAo
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwg
JmFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCiBHQ0dM
Ym9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdM
T2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJ
c1ZlcnRleEFycmF5T0VTKQorICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykgeworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CiAgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7
Ci0KKyAgICB9CiAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFy
cmF5T0VTKQorICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0gICAgZWxzZQorICAgIH0gZWxz
ZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKIH0KIApAQCAtMTg4LDggKzE5Nyw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVz
ICE9IEdMX05PX0VSUk9SKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CiAg
ICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1f
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNl
dCA9IFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkI7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmVhc29uRm9yUmVzZXQgPSBtX2dsR2V0
R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgpOwogICAgICAgICBpZiAocmVhc29uRm9yUmVzZXQgIT0g
R0xfTk9fRVJST1IpCiAgICAgICAgICAgICBtX2NvbnRleHRSZXNldFN0YXR1cyA9IHJlYXNvbkZv
clJlc2V0OwogICAgICAgICByZXR1cm4gcmVhc29uRm9yUmVzZXQ7CkBAIC0yMDIsNyArMjEyLDkg
QEAgaW50IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkK
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKQogewogICAgIGlmIChtX2ds
UmVhZG5QaXhlbHNFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgogICAgICAgICA6OmdsRmx1c2goKTsKQEAgLTIxOSw3ICsyMzEsOSBAQCB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpegogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1m
dkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBm
bG9hdCAqcGFyYW1zKQogewogICAgIGlmIChtX2dsR2V0blVuaWZvcm1mdkVYVCkgewotICAgICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAg
bV9nbEdldG5Vbmlmb3JtZnZFWFQocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzAsNyArMjQ0LDkgQEAgdm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDR0wKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQo
R0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgaW50ICpw
YXJhbXMpCiB7CiAgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWl2RVhUKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2dsR2V0
blVuaWZvcm1pdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NSw3ICsyNjEsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3Qs
IEdDRwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogfQogCkBAIC0yNTYsNyArMjc0LDkgQEAgdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwogfQogCkBAIC0yNjcsNyAr
Mjg3LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcihH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2dsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA2OTg4YmQ2OWNhMGYwMTBmYTFiNjhmNjY1MzA3ODNl
YmZjNjNmNDEyLi5jZGY2NDA5OTM0MzQ4MmE0YzE2ZDNjYmUzNDc5YzhjMGFiYTQ4MTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaApAQCAtMTEyLDcgKzExMiw2IEBAIHB1Ymxp
YzoKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CiAjZW5k
aWYKIAotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBlbnVtIGNsYXNzIFJlbGVhc2VCZWhhdmlvciB7CiAgICAgICAgIFByZXNlcnZl
VGhyZWFkUmVzb3VyY2VzLApAQCAtNTE3LDYgKzUxNiw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwogCisgICAgLy8gQ2Fs
bGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRoYXQgZXZlbnR1YWxseSBj
YWxsIE9wZW5HTC4KKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBw
b2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KKyAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAgIC8vIFRh
a2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0
cmlidXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5k
IGRldGVybWluZSB3aGljaCBjb3VsZCBvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xCYXNlLmNwcAppbmRleCAyMGJmMmY0Zjk4NGNjN2YyYmI3M2M2ZGE1NTlmMDgwMGEzM2Ex
NDljLi43NTBlZDMyNmVjZTY1ZTg4ZjZiNDEzNjAxNWM0ZjkzMzc0NDg5Y2E1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMjM3LDcgKzIzNyw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgcmVjCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogI2lmIFVTRShPUEVOR0wpCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewog
ICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKQEAgLTI2NCw3ICsyNjYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFs
dWUpCiAgICAgLy8gYmVjYXVzZSBkZXNrdG9wIEdMJ3MgY29ycmVzcG9uZGluZyBxdWVyaWVzIHJl
dHVybiB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMKICAgICAvLyB3aGVyZWFzIEdMRVMyIHJldHVy
biB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgKGVhY2ggdmVjdG9yIGhhcyA0IGNvbXBvbmVudHMpLgog
ICAgIC8vIFRoZXJlZm9yZSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlc2t0b3AgR0wgbmVlZHMg
dG8gYmUgZGl2aWRlZCBieSA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5h
bWUpIHsKICNpZiBVU0UoT1BFTkdMKQogICAgIGNhc2UgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzoKQEAgLTMxMCw3ICszMTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NHTAogICAgIEFT
U0VSVChyYW5nZSk7CiAgICAgQVNTRVJUKHByZWNpc2lvbik7CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKIAogICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxPV19JTlQ6CkBAIC00MDMsMTMgKzQwOSwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NH
TGVudQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFt
cGYgek5lYXIsIEdDR0xjbGFtcGYgekZhcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKQEAgLTQyOCw3ICs0MzgsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsCiAKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGbHVzaCgpOwogICAgIEFTU0VS
VChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApp
bmRleCBiMTRiNjJkNWU0ZmJlYThlYTJjODc4NTZlN2JmZWQ2YjhkMzg2N2IyLi45ODRmNjJkMGI1
NGRkOGE4YWVhMzk3YjA4MTc3ZWI4YjQ2YzlmZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTIwMCw3ICsyMDAsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogI2lmICFV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29w
ZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwpAQCAtMjM5LDcgKzI0MSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2ln
bmVkIGNoYXIgKnBpeGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRX
aWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIGlmIChj
b250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgewpAQCAtMjczLDkgKzI3Nyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNo
YXIgKnBpeGVscywgaW50IHBpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50
V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yODMsMTIgKzI4NCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogCiAgICAgbV9jdXJyZW50
V2lkdGggPSB3aWR0aDsKICAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIFRlbXBv
cmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNF
KTsKQEAgLTQyNyw3ICs0MzAsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVj
aXNpb25zTWF0Y2goUGxhdGZvcm1HTE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRl
eHR1cmU7CiAgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CkBAIC00MzYsNyArNDQx
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQcm9n
cmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xBdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKIH0KQEAgLTQ0NCw3ICs0NTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybUdMTwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxv
Y2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5h
bWUudXRmOCgpLmRhdGEoKSk7CkBAIC00NTMsMTMgKzQ2MSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBHQ0dMdQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBHTHVpbnQg
ZmJvOwogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKQEAgLTQ3NSwxMDIg
KzQ4NywxMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwogfQogCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuc2V0
Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7
CiAgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0NHTGNsYW1wZiByZWQsIEdDR0xjbGFtcGYg
Z3JlZW4sIEdDR0xjbGFtcGYgYmx1ZSwgR0NHTGNsYW1wZiBhbHBoYSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0NHTGVudW0g
bW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDR0xlbnVtIG1vZGVSR0IsIEdDR0xlbnVtIG1vZGVBbHBoYSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBo
YSk7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDR0xl
bnVtIHNmYWN0b3IsIEdDR0xlbnVtIGRmYWN0b3IpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKIH0gICAgICAgCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwg
R0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwg
ZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdD
R0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0
IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBzaXplLCBkYXRhKTsKIH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9JTlZBTElEX09QRVJBVElPTjsKKwogICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVCh0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckNvbG9yKEdDR0xjbGFtcGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdDR0xj
bGFtcGYgYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJDb2xvcihyLCBn
LCBiLCBhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJp
dGZpZWxkIG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyKG1hc2sp
OwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyU3RlbmNpbChHQ0dMaW50IHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbENsZWFyU3RlbmNpbChzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29sb3JNYXNrKEdDR0xib29sZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFu
IGJsdWUsIEdDR0xib29sZWFuIGFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFR1cm4g
b24gbmFtZSBtYXBwaW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3Ms
IHdlCiAgICAgLy8gcG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRo
aXMgY29udGV4dC4KQEAgLTYzMiw3ICs2NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBI
YXNoTWFwPFBsYXRmb3JtR0xPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogCkBAIC02NjYsNyArNzEwLDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29w
eVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNp
emVpIGhlaWdodCwgR0NHTGludCBib3JkZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
YXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKICAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwpAQCAtNjgxLDcgKzcyNyw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
YXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAKICAgICBBU1NFUlQobV9zdGF0ZS5i
b3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwpAQCAtNjk2LDE5ICs3NDQsMjUg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xDdWxsRmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhN
YXNrKEdDR0xib29sZWFuIGZsYWcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERl
cHRoTWFzayhmbGFnKTsKIH0KIApAQCAtNzE2LDgzICs3NzAsMTA5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJl
bW92ZShwcm9ncmFtKTsKICAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0NHTGVudW0gY2FwKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEaXNhYmxlKGNhcCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWlu
dCBpbmRleCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiAgICAgY2hlY2tHUFVTdGF0
dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlKEdDR0xlbnVt
IGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRW5hYmxlKGNhcCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
R0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmZpbmlzaCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZpbmlzaCgpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0
YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1
ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gdGV4dGFyZ2V0
LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2RlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0KIApA
QCAtODAyLDcgKzg4Miw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2
ZUF0dHJpYkltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUg
PSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9N
QVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CiAgICAgVmVjdG9yPEdMY2hhcj4gbmFtZSht
YXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1
ZGVzIG51bGwgdGVybWluYXRpb24uCkBAIC04NDgsNyArOTMwLDkgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtLCBHQ0cKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKICAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3Jt
U2l6ZSk7CiAKQEAgLTg5NCw3ICs5NzgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMcwogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHBy
b2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CiB9CiAKQEAgLTEwMzcsNyArMTEyMyw5
IEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTCiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICBy
ZXR1cm4gLTE7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKIAogICAgIFN0cmluZyBtYXBwZWRO
YW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklC
VVRFLCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFw
cGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0
YSgpKTsKQEAgLTEwNDksMTQgKzExMzcsMTggQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKICAg
ICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAt
MTsKKwogCiAgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7CiAKICAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5
IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgpAQCAtMTA4Mywx
OSArMTE3NSwyNSBAQCBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3Io
KQogICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CiAgICAgfQog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAgcmV0dXJuIDo6
Z2xHZXRFcnJvcigpOwogfQogCiBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQ0dMZW51bSBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhuYW1lKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsSGludCh0YXJnZXQsIG1vZGUpOwogfQogCkBAIC0xMTA0LDEzICsxMjAyLDE3IEBAIEdDR0xi
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZm
ZXIpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVk
KEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1
cm4gOjpnbElzRW5hYmxlZChjYXApOwogfQogCkBAIC0xMTE5LDcgKzEyMjEsOSBAQCBHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2Jq
ZWN0IGZyYW1lYnVmZmVyKQogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6Omds
SXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7CiB9CiAKQEAgLTExMjgsNyArMTIzMiw5IEBA
IEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtKQogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1By
b2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTExMzcsNyArMTI0Myw5IEBAIEdDR0xib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJl
bmRlcmJ1ZmZlCiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNSZW5k
ZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKIH0KIApAQCAtMTE0Niw3ICsxMjU0LDkgQEAgR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQogICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNo
YWRlcik7CiB9CiAKQEAgLTExNTUsMjAgKzEyNjUsMjYgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDR0xmbG9hdCB3aWR0aCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
IAogICAgIEdDR0xzaXplaSBjb3VudCA9IDA7CiAgICAgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXJz
WzJdID0geyB9OwpAQCAtMTE4MiwyNSArMTI5OCwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBpeGVsU3RvcmVpKEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50
IHBhcmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFt
ZSwgcGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zm
c2V0KEdDR0xmbG9hdCBmYWN0b3IsIEdDR0xmbG9hdCB1bml0cykKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0NHTGNsYW1wZiB2YWx1ZSwg
R0NHTGJvb2xlYW4gaW52ZXJ0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTYW1w
bGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2Npc3NvcihHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTY2lzc29yKHgs
IHksIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0xMjA4LDcgKzEzMzIsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIs
IGNvbnN0IFN0cmluZwogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAKICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKIApAQCAtMTIxOSwxNzggKzEzNDUs
MjM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBt
YXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dM
dWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1h
c2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxP
cChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3Mp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVp
IHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9h
dCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlm
b3JtMmYobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBH
Q0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xm
bG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dM
ZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNp
emUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVu
aWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlv
biwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwg
R0NHTGludCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNpKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGlu
dCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIs
IEdDR0xpbnQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00aShs
b2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBH
Q0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9h
dCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDE2LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTEz
OTgsNzMgKzE1ODAsOTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQ0dM
dWludCBpbmRleCwgR0NHTGZsb2F0IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCog
YXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjFmdihp
bmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWIyZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0NH
THVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQ0dMdWludCBpbmRleCwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0NHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQ0dMdWludCBpbmRleCwgR0NHTGZsb2F0IHYw
LCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0NH
THVpbnQgaW5kZXgsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDR0x1aW50IGluZGV4
LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdD
R0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmlld3Bv
cnQoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVZlcnRleEFycmF5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWlu
dCBhcnJheSA9IDA7CiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCiAgICAgOjpnbEdlblZlcnRleEFycmF5
cygxLCAmYXJyYXkpOwpAQCAtMTQ3Nyw3ICsxNjgzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBp
ZiAoIWFycmF5KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAj
aWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkg
fHwgUExBVEZPUk0oQ09DT0EpCiAgICAgOjpnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkp
OwogI2VuZGlmCkBAIC0xNDg4LDcgKzE2OTYsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlm
ICghYXJyYXkpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gOjpnbElzVmVy
dGV4QXJyYXkoYXJyYXkpOwogI2VuZGlmCkBAIC0xNDk3LDcgKzE3MDcsOSBAQCBHQ0dMYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0
IGFycmF5KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAoIVVT
RShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFU
Rk9STShDT0NPQSkKICAgICA6OmdsQmluZFZlcnRleEFycmF5KGFycmF5KTsKICNlbHNlCkBAIC0x
NTA3LDE5ICsxNzE5LDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTGJvb2xlYW4qIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9h
dHYoR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNTI3LDcgKzE3
NDUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTAogewogICAgIFVOVVNFRF9QQVJBTShwbmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAq
dmFsdWUgPSAwOwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2Ug
bXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGlu
aXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAgLy8g
OjpnbEdldEludGVnZXJpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CkBAIC0xNTM2LDcgKzE3NTYs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcjY0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGludDY0KiB2YWx1ZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9
IDA7CiAgICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZp
cnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGlu
ZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0
SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwpAQCAtMTU0Niw3ICsxNzY4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dM
dWludCBpbmRleCwgR0MKIHsKICAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwogICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAv
LyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNo
IG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJH
TDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjRp
X3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CkBAIC0xNTU0LDcgKzE3NzgsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjRpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1
aW50IGluZGV4LCBHQwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFj
aG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCiAg
ICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFD
SE1FTlQsIGVpdGhlciB3b3Jrcy4KICAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwpAQCAtMTU2Miw3
ICsxNzg4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2UKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTU3Miw3ICsx
ODAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2
ZVN5bWJvbENvdW50KFBsYXRmb3JtR0xPYmplY3QgcHIKICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBjb25zdCBhdXRvJiByZXN1bHQg
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwogICAgIGlmIChy
ZXN1bHQgIT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKICAgICAgICAg
KnZhbHVlID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUocG5hbWUpOwpAQCAtMTY1MCw3ICsx
ODgwLDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xv
ZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICA6
OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAg
ICAgaWYgKCFsZW5ndGgpCkBAIC0xNjY5LDcgKzE5MDEsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhU
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTY3Nyw3ICsxOTExLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIsIEdDR0xlbnVtIHBuYW0KIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogCiAgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwogICAgIApAQCAtMTcxMiw3ICsxOTQ4LDggQEAgU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAg
ICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwog
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzM5LDcgKzE5
NzYsOCBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQpAQCAtMTc1MCwyNSArMTk4OCwzMyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwg
bG9jYXRpb24sIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NH
TGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCkBAIC0xNzgzLDcgKzIwMjksOCBAQCBH
Q0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjbwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAtMTsKIAogICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFt
ZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7CiAgICAgTE9HKFdl
YkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTE3OTIsMTkgKzIwMzks
MjQgQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY28KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRWZXJ0
ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIEdDR0xzaXplaXB0ciBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAogICAgIEdMdm9p
ZCogcG9pbnRlciA9IDA7CiAgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
bmFtZSwgJnBvaW50ZXIpOwpAQCAtMTgxMyw3ICsyMDY1LDggQEAgR0NHTHNpemVpcHRyIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgs
IEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZiwgR0NHTGludCB5b2ZmLCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogI2lm
ICFVU0UoT1BFTkdMX0VTKQogICAgIGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKQpAQCAtMTg0
NCwyMSArMjA5NywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb21wcmVzc2Vk
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5h
ZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiBQ
bGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuQnVm
ZmVycygxLCAmbyk7CiAgICAgcmV0dXJuIG87CkBAIC0xODY2LDcgKzIxMjUsOSBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5G
cmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTg3NCwxMyArMjEzNSwx
NyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVByb2dyYW0oKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsQ3Jl
YXRlUHJvZ3JhbSgpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAg
R0x1aW50IG8gPSAwOwogICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAgcmV0
dXJuIG87CkBAIC0xODg4LDEzICsyMTUzLDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09
IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVS
KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
VGV4dHVyZSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAg
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChvKTsKQEAgLTE5MDMsMTMgKzIxNzIsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmpl
Y3QgZnJhbWVidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKG1fc3Rh
dGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKICAgICBpZiAoZnJhbWVi
dWZmZXIgPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwpAQCAtMTky
MSwyNiArMjE5NCwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5y
ZW1vdmUocHJvZ3JhbSk7CiAgICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2xEZWxldGVS
ZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0
IHRleHR1cmUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5ib3VuZFRleHR1
cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewogICAgICAgICByZXR1
cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKICAgICB9KTsKQEAgLTE5OTYsNyAr
MjI3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBi
b3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTIwMjEsNyArMjMwNCw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IGRpdmlzCiAjaWYgSEFWRShPUEVOR0xfNCkgJiYgRU5BQkxFKFdFQkdMMikKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQ0dMdWludCBpbmRl
eCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4
KGluZGV4KTsKIH0KICNlbmRpZgpAQCAtMjA0Nyw3ICsyMzMyLDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
ZHN0Qnl0ZU8KICNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRh
cmdldCwgR0NHTGVudW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGlu
dHB0ciB3cml0ZU9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCBy
ZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CiB9CiAjZWxzZQpAQCAtMjA2OCwxMyArMjM1
NSwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBzcmNCeQogI2lmIEhBVkUoT1BFTkdMXzQpIHx8IEhB
VkUoT1BFTkdMX0VTXzMpCiB2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIGxl
bmd0aCwgR0NHTGJpdGZpZWxkIGFjY2VzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KwogICAgIHJldHVybiA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwg
YWNjZXNzKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFw
QnVmZmVyKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gOjpnbFVubWFwQnVmZmVyKHRhcmdldCk7CiB9CiAjZWxzZQpAQCAtMjEzOSw3
ICsyNDMwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZEJ1ZmZlcihHQ0dM
ZW51bSBzcmMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTGludCogcGFyYW1zKQogewogI2lmIFVTRShPUEVO
R0xfRVMpCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwpAQCAtMjE1MiwyMCArMjQ0NSwyNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gaW50ZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgc2FtcGxl
cywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0NH
TGVudW0gdGFyZ2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
THNpemVpIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xUZXhTdG9yYWdl
M0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CkBAIC0yNjMwLDcgKzI5MjksOCBAQCBWZWN0b3I8R0NHTHVpbnQ+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtSW5kaWNlcyhQbGF0Zm9ybUdMT2JqZWN0IHBy
bwogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0NHTHVpbnQ+JiB1bmlmb3JtSW5kaWNl
cywgR0NHTGVudW0gcG5hbWUsIFZlY3RvcjxHQ0dMaW50PiYgcGFyYW1zKQogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICA6OmdsR2V0QWN0aXZlVW5pZm9y
bXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEo
KSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMRVMuY3BwCmluZGV4IDkzODk1ZTU2YjBjNWE1YmQ4NGNiMGFhNDk4NjgyMGFhNjcxMTQ4
MTUuLjYwZmRmYzY1Zjg3Mzk1ODk1Nzk1YTg0ZWYxZTA5YWJmNmQ3YWE4NDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKQEAgLTQyLDcgKzQyLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxz
KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKIAogICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CiAKQEAgLTE4OCwxMyArMTkwLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCog
dmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEludGVnZXJ2KHBuYW1l
LCB2YWx1ZSk7CiB9CiAKQEAgLTIwMyw3ICsyMDksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0NHTGVudW0gc2hhZGVyVHlwZSwgR0NH
TAogICAgIEFTU0VSVChyYW5nZSk7CiAgICAgQVNTRVJUKHByZWNpc2lvbik7CiAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUs
IHByZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwogfQogCkBAIC0yMzIsMTMgKzI0MCwx
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDR0xjbGFtcGYgek5l
YXIsIEdDR0xjbGFtcGYgekZhcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVw
dGhSYW5nZWYoek5lYXIsIHpGYXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKIH0KIApAQCAtMjc4LDcgKzI5MCw5IEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTFByaXZhdGU+KHRoaXMsIGRlc3RpbmF0aW9uKSkKIHsKICAgICBBU1NFUlRf
VU5VU0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0
aW9uLgpAQCAtMzQzLDcgKzM1Nyw5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAKIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKIAog
ICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGMwYTJlY2I4NzQ3YzEx
OGYwNzA1ZGY5MTg5OGQ0NDk4MmU5MGYyYTcuLjg5ZDE0ZDI5NTZiNzJmYTQyZWU5ODM2MmFiODBk
MmJiMzBhYjNlZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXIuY3BwCkBAIC0xMzksNyArMTM5LDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICNl
bHNlCiAgICAgbV90ZXhtYXBMYXllciA9IFdURjo6bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkg
bWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTIxMyw3ICsyMTQsOCBAQCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRl
eHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbmRp
ZgogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAog
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0z
MzMsNyArMzM1LDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICNpZiBVU0UoQU5HTEUpCiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogICAgIGlmICht
X3RleHR1cmUpCiAgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC0zNzcsNyArMzgwLDggQEAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAjZWxzZQogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICBpZiAobV90ZXh0
dXJlKQogICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQo=
</data>
<flag name="commit-queue"
          id="427825"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>