<?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>40455</bug_id>
          
          <creation_ts>2010-06-10 17:44:21 -0700</creation_ts>
          <short_desc>Refactoring the Clipboard class to abstract out platform-specific logic</short_desc>
          <delta_ts>2011-04-27 19:11:05 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40515</dependson>
    
    <dependson>40540</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dimich</cc>
    
    <cc>jianli</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>236601</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-06-10 17:44:21 -0700</bug_when>
    <thetext>The clipboard class today is a mish-mash of logic that&apos;s used for both copy and paste and dragging, with a lot of platform-specific logic embedded in DOM code. The proposed patch moves the platform-specific logic into the ClipboardData abstraction. Platforms can define different implementations of ClipboardData in order to read from the system clipboard or from platform drag-and-drop data. Eventually, if everyone moves to using ClipboardData, the various DragData*.cpp implementations can probably be consolidated as well.

This is just a patch to get some feedback on the general approach. I&apos;d break this patch up into several smaller ones when it comes time to land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236613</commentid>
    <comment_count>1</comment_count>
      <attachid>58428</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-06-10 18:00:04 -0700</bug_when>
    <thetext>Created attachment 58428
Giant mega-patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58428</attachid>
            <date>2010-06-10 18:00:04 -0700</date>
            <delta_ts>2010-06-11 15:53:00 -0700</delta_ts>
            <desc>Giant mega-patch</desc>
            <filename>clipboard-data.patch</filename>
            <type>text/plain</type>
            <size>122484</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDU1M2RlYS4uMDAwNTRiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNDMgQEAKKzIwMTAtMDYtMTAgIERhbmllbCBDaGVu
ZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIENsaXBib2FyZCBjbGFzcyB0byBhYnN0cmFj
dCBvdXQgcGxhdGZvcm0tc3BlY2lmaWMgbG9naWMuCisKKyAgICAgICAgQ2xpcGJvYXJkIGlzIG5v
dyBzaW1wbHkgYW4gYWJzdHJhY3QgbGF5ZXIgdGhhdCBpbnRlcmFjdHMgd2l0aCBDbGlwYm9hcmRE
YXRhLgorICAgICAgICBDbGlwYm9hcmREYXRhIGlzIGFuIGFic3RyYWN0IGludGVyZmFjZSB0aGF0
IHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3Igd3JpdGluZyBk
YXRhIChwbGF0Zm9ybS1zcGVjaWZpYyBoYW5kbGVycyBoYXZlIHRvIGZsdXNoIG91dCB0aGlzIGRh
dGEgbGF0ZXIpLAorICAgICAgICB3aGlsZSBlYWNoIHBsYXRmb3JtIGFsc28gcHJvdmlkZXMgaW1w
bGVtZW50YXRpb25zIG9mIENsaXBib2FyZERhdGEgdGhhdCBhbGxvdworICAgICAgICByZWFkIGFj
Y2VzcyB0byBjbGlwYm9hcmQvZHJhZy1hbmQtZHJvcCBkYXRhLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDQ1NQorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6Y2xlYXJBbGxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6dHlwZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVDbGlwYm9hcmREYXRhOjpmaWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpXcml0YWJsZUNsaXBib2FyZERhdGE6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGFibGVDbGlwYm9hcmREYXRhOjpnZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFi
bGVDbGlwYm9hcmREYXRhOjpnZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xp
cGJvYXJkRGF0YTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJvYXJk
RGF0YTo6c2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZUNsaXBib2FyZERhdGE6
OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJvYXJkRGF0
YTo6c2V0RmlsZUNvbnRlbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJv
YXJkRGF0YTo6Y2xlYXJEYXRhSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZUNsaXBi
b2FyZERhdGE6OmdldERhdGFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlQ2xpcGJv
YXJkRGF0YTo6c2V0RGF0YUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplZFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkRGF0YTo6Y2xlYXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZERhdGE6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkRGF0YTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OkNsaXBi
b2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmNsZWFyRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmQ6OmNsZWFyQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmQ6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVRvTWFya3VwKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NT
dHlsZU5ld2xpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VOQlNQV2l0aFNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OnVybFRvTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZDo6d3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjp3cml0ZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6d3JpdGVQbGFpblRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpoYXNEYXRhKToKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJk
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmREYXRhOjp+Q2xpcGJvYXJkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZUNsaXBib2FyZERhdGE6OmlzRGlydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVDbGlwYm9hcmREYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OldyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGFibGVDbGlwYm9hcmREYXRhOjpodG1sQmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpX
cml0YWJsZUNsaXBib2FyZERhdGE6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldy
aXRhYmxlQ2xpcGJvYXJkRGF0YTo6ZmlsZUNvbnRlbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OldyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6V3JpdGFibGVDbGlwYm9hcmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZDo6fkNsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmQ6OmlzRm9yRHJhZ2dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpkcm9w
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6ZHJvcEVmZmVjdElzVW5pbml0
aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmVmZmVjdEFsbG93ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpkcmFnTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkOjpkcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
OjpkcmFnSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6c2V0RHJh
Z0hhc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpkYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6cG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZDo6ZHJhZ1N0YXJ0ZWQpOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRVdGlsaXRpZXMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5
bGVOZXdsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlTkJTUFdpdGhTcGFjZSk6Cisg
ICAgICAgICogZG9tL0NsaXBib2FyZFV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oLgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dHJ5REhUTUxD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dHJ5REhUTUxDdXQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKToKKyAgICAgICAg
KiBwYWdlL2Nocm9taXVtL0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24pOgorICAgICAgICAqIHBhZ2UvY2hy
b21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vUGFz
dGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0Ojppc0RpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
Y2xlYXJEYXRhSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omdl
dERhdGFJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0
YUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXRVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXRIVE1MKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtRGF0YU9iamVjdDo6c2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRt
bEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50
TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRD
aHJvbWl1bTo6fkNsaXBib2FyZENocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjcmVhdGVD
bGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxl
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdE
YXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJl
Zi5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkUHJpdmF0ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlclByaXZh
dGU6Oik6CisKIDIwMTAtMDYtMDkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzUxMzQ5Mi4uMmI2
ZjEyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTEwOTUsNiArMTA5NSw4IEBACiAgICAgICAgICAgICAnZG9tL0NsaXBib2Fy
ZEFjY2Vzc1BvbGljeS5oJywKICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkRXZlbnQuY3BwJywK
ICAgICAgICAgICAgICdkb20vQ2xpcGJvYXJkRXZlbnQuaCcsCisgICAgICAgICAgICAnZG9tL0Ns
aXBib2FyZFV0aWxpdGllcy5jcHAnLAorICAgICAgICAgICAgJ2RvbS9DbGlwYm9hcmRVdGlsaXRp
ZXMuaCcsCiAgICAgICAgICAgICAnZG9tL0NvbW1lbnQuY3BwJywKICAgICAgICAgICAgICdkb20v
Q29tbWVudC5oJywKICAgICAgICAgICAgICdkb20vQ29tcG9zaXRpb25FdmVudC5jcHAnLApAQCAt
MjAxMyw5ICsyMDE1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1NYWMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bVdpbi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vQ29udGV4dE1lbnVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL0NvbnRleHRNZW51SXRlbUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vQ3Vyc29yQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZG9tL0NsaXBib2FyZC5jcHAgYi9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IGQ2
NDRiY2MuLmZjZTdkOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysr
IGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcApAQCAtMjcsMjIgKzI3LDE2MSBAQAogI2luY2x1
ZGUgIkNsaXBib2FyZC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJF
bGVtZW50LmgiCisjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSGFzaE1hcC5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5hbWVkTm9k
ZU1hcC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5j
bHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxDbGlw
Ym9hcmREYXRhPiBXcml0YWJsZUNsaXBib2FyZERhdGE6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXcml0YWJsZUNsaXBib2FyZERhdGEpOworfQorCit2b2lkIFdyaXRhYmxl
Q2xpcGJvYXJkRGF0YTo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBtX2lzRGlydHkgPSB0cnVlOwor
ICAgIG1fZGF0YS5jbGVhcigpOworfQorCitIYXNoU2V0PFN0cmluZz4gV3JpdGFibGVDbGlwYm9h
cmREYXRhOjp0eXBlcygpIGNvbnN0Cit7CisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOworICAg
IGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0g
bV9kYXRhLmJlZ2luKCkua2V5cygpOworICAgICAgICAgaXQgIT0gbV9kYXRhLmVuZCgpLmtleXMo
KTsKKyAgICAgICAgICsraXQpIHsKKyAgICAgICAgdHlwZXMuYWRkKCppdCk7CisgICAgfQorICAg
IHJldHVybiB0eXBlczsKK30KKworVmVjdG9yPFN0cmluZz4gV3JpdGFibGVDbGlwYm9hcmREYXRh
OjpmaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK2Jv
b2wgV3JpdGFibGVDbGlwYm9hcmREYXRhOjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kYXRhLnNpemUoKSA+IDA7Cit9CisKK1N0cmluZyBXcml0YWJsZUNsaXBib2FyZERhdGE6Omdl
dFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAgIGJvb2wgc3VjY2VlZGVkOworICAgIHJl
dHVybiBnZXREYXRhKCJ0ZXh0L3VyaS1saXN0Iiwgc3VjY2VlZGVkKTsKK30KKworU3RyaW5nIFdy
aXRhYmxlQ2xpcGJvYXJkRGF0YTo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0Cit7Cisg
ICAgYm9vbCBzdWNjZWVkZWQ7CisgICAgcmV0dXJuIGdldERhdGEoInRleHQvaHRtbCIsIHN1Y2Nl
ZWRlZCk7Cit9CisKK3ZvaWQgV3JpdGFibGVDbGlwYm9hcmREYXRhOjpzZXRVUkwoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgc2V0RGF0YSgidGV4dC91cmkt
bGlzdCIsIHVybCk7CisgICAgbV91cmxUaXRsZSA9IHRpdGxlOworfQorCit2b2lkIFdyaXRhYmxl
Q2xpcGJvYXJkRGF0YTo6c2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L2h0bWwiLCBodG1sKTsKKyAgICBtX2h0bWxC
YXNlVVJMID0gYmFzZVVSTDsKK30KKwordm9pZCBXcml0YWJsZUNsaXBib2FyZERhdGE6OnNldEZp
bGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkKK3sKKyAgICBt
X2lzRGlydHkgPSB0cnVlOworICAgIG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsKK30KKwor
dm9pZCBXcml0YWJsZUNsaXBib2FyZERhdGE6OnNldEZpbGVDb250ZW50TmFtZShjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgbV9pc0RpcnR5ID0gdHJ1ZTsKKyAgICBtX2ZpbGVDb250ZW50TmFt
ZSA9IG5hbWU7Cit9CisKK3ZvaWQgV3JpdGFibGVDbGlwYm9hcmREYXRhOjpjbGVhckRhdGFJbXBs
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBtX2lzRGlydHkgPSB0cnVlOworICAgIG1fZGF0
YS5yZW1vdmUodHlwZSk7Cit9CisKK1N0cmluZyBXcml0YWJsZUNsaXBib2FyZERhdGE6OmdldERh
dGFJbXBsKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKK3sKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGEuZmluZCh0
eXBlKTsKKyAgICBzdWNjZXNzID0gKGl0ICE9IG1fZGF0YS5lbmQoKSk7CisgICAgaWYgKHN1Y2Nl
c3MpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworYm9vbCBXcml0YWJsZUNsaXBib2FyZERhdGE6OnNldERhdGFJbXBsKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIG1faXNEaXJ0eSA9IHRydWU7CisgICAg
bV9kYXRhLnNldCh0eXBlLCBkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFN0
cmluZyBub3JtYWxpemVkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgU3RyaW5nIGNs
ZWFuVHlwZSh0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCkpOworCisgICAgaWYgKGNsZWFu
VHlwZSA9PSAidGV4dCIgfHwgY2xlYW5UeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisg
ICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7IAorICAgIGlmIChjbGVhblR5cGUgPT0gInVybCIp
CisgICAgICAgIHJldHVybiAidGV4dC91cmktbGlzdCI7CisKKyAgICByZXR1cm4gY2xlYW5UeXBl
OworfQorCit2b2lkIENsaXBib2FyZERhdGE6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
Cit7CisgICAgY2xlYXJEYXRhSW1wbChub3JtYWxpemVkVHlwZSh0eXBlKSk7Cit9CisKK1N0cmlu
ZyBDbGlwYm9hcmREYXRhOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vz
cykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RGF0YUltcGwobm9ybWFsaXplZFR5cGUodHlwZSks
IHN1Y2Nlc3MpOworfQorCitib29sIENsaXBib2FyZERhdGE6OnNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgcmV0dXJuIHNldERhdGFJbXBsKG5v
cm1hbGl6ZWRUeXBlKHR5cGUpLCBkYXRhKTsKK30KKwogQ2xpcGJvYXJkOjpDbGlwYm9hcmQoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBpc0ZvckRyYWdnaW5nKSAKICAgICA6IG1f
cG9saWN5KHBvbGljeSkKICAgICAsIG1fZHJvcEVmZmVjdCgidW5pbml0aWFsaXplZCIpCiAgICAg
LCBtX2VmZmVjdEFsbG93ZWQoInVuaW5pdGlhbGl6ZWQiKQogICAgICwgbV9kcmFnU3RhcnRlZChm
YWxzZSkKKyAgICAsIG1fZGF0YShXcml0YWJsZUNsaXBib2FyZERhdGE6OmNyZWF0ZSgpKQogICAg
ICwgbV9mb3JEcmFnZ2luZyhpc0ZvckRyYWdnaW5nKQogICAgICwgbV9kcmFnSW1hZ2UoMCkKIHsK
IH0KICAgICAKK0NsaXBib2FyZDo6Q2xpcGJvYXJkKFBhc3NSZWZQdHI8Q2xpcGJvYXJkRGF0YT4g
ZGF0YSwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBpc0ZvckRyYWdnaW5nKSAK
KyAgICA6IG1fcG9saWN5KHBvbGljeSkKKyAgICAsIG1fZHJvcEVmZmVjdCgidW5pbml0aWFsaXpl
ZCIpCisgICAgLCBtX2VmZmVjdEFsbG93ZWQoInVuaW5pdGlhbGl6ZWQiKQorICAgICwgbV9kcmFn
U3RhcnRlZChmYWxzZSkKKyAgICAsIG1fZGF0YShkYXRhKQorICAgICwgbV9mb3JEcmFnZ2luZyhp
c0ZvckRyYWdnaW5nKQorICAgICwgbV9kcmFnSW1hZ2UoMCkKK3sKK30KKwogdm9pZCBDbGlwYm9h
cmQ6OnNldEFjY2Vzc1BvbGljeShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KQogewogICAg
IC8vIG9uY2UgeW91IGdvIG51bWIsIGNhbiBuZXZlciBnbyBiYWNrCkBAIC0xNTgsNCArMjk3LDIx
OCBAQCB2b2lkIENsaXBib2FyZDo6c2V0RWZmZWN0QWxsb3dlZChjb25zdCBTdHJpbmcgJmVmZmVj
dCkKICAgICAgICAgbV9lZmZlY3RBbGxvd2VkID0gZWZmZWN0OwogfQogCit2b2lkIENsaXBib2Fy
ZDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+Y2xlYXJE
YXRhKHR5cGUpOworfQorCit2b2lkIENsaXBib2FyZDo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBp
ZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZGF0YS0+Y2xlYXJBbGxEYXRhKCk7Cit9CisKK1N0cmluZyBDbGlwYm9hcmQ6OmdldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAoreworICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkgeworICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9kYXRhLT5nZXRE
YXRhKHR5cGUsIHN1Y2Nlc3MpOworfQorCitib29sIENsaXBib2FyZDo6c2V0RGF0YShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBt
X2RhdGEtPnNldERhdGEodHlwZSwgZGF0YSk7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9h
cmQ6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFi
bGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKKyAgICAgICAgcmV0dXJu
IEhhc2hTZXQ8U3RyaW5nPigpOworCisgICAgcmV0dXJuIG1fZGF0YS0+dHlwZXMoKTsKK30KKwor
UGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkOjpmaWxlcygpIGNvbnN0Cit7CisgICAgUmVm
UHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKKworICAgIC8vIFRP
RE86IHNvbWUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zIGNoZWNrIGZvciBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlIHRvby4gQnVnPworICAgIGlmIChwb2xpY3koKSA9PSBDbGlwYm9hcmRSZWFkYWJs
ZSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMgPSBtX2RhdGEtPmZpbGVzKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzW2ldKSk7
CisgICAgfQorICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBTdHJp
bmcgaW1hZ2VUb01hcmt1cChjb25zdCBTdHJpbmcmIHVybCwgRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKKyAgICBtYXJrdXAuYXBwZW5kKCI8aW1nIHNyYz1c
IiIpOworICAgIG1hcmt1cC5hcHBlbmQodXJsKTsKKyAgICBtYXJrdXAuYXBwZW5kKCJcIiIpOwor
ICAgIC8vIENvcHkgb3ZlciBhdHRyaWJ1dGVzLiAgSWYgd2UgYXJlIGRyYWdnaW5nIGFuIGltYWdl
LCB3ZSBleHBlY3QgdGhpbmdzIGxpa2UKKyAgICAvLyB0aGUgaWQgdG8gYmUgY29waWVkIGFzIHdl
bGwuCisgICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJz
LT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkgPT0gInNy
YyIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWFya3VwLmFwcGVuZCgiICIpOwor
ICAgICAgICBtYXJrdXAuYXBwZW5kKGF0dHItPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgbWFya3Vw
LmFwcGVuZCgiPVwiIik7CisgICAgICAgIFN0cmluZyBlc2NhcGVkQXR0ciA9IGF0dHItPnZhbHVl
KCk7CisgICAgICAgIGVzY2FwZWRBdHRyLnJlcGxhY2UoIlwiIiwgIiZxdW90OyIpOworICAgICAg
ICBtYXJrdXAuYXBwZW5kKGVzY2FwZWRBdHRyKTsKKyAgICAgICAgbWFya3VwLmFwcGVuZCgiXCIi
KTsKKyAgICB9CisKKyAgICBtYXJrdXAuYXBwZW5kKCIvPiIpOworICAgIHJldHVybiBtYXJrdXAu
dG9TdHJpbmcoKTsKK30KKworc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVt
ZW50KiBlbGVtZW50KQoreworICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9t
IGVsZW1lbnQKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2Ug
PSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKKyAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkg
JiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgIHJldHVy
biBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCB3cml0ZUltYWdlKENsaXBib2FyZERhdGEqIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCkKK3sKKyAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGludG8gYSBEYXRhT2JqZWN0
IGZvciB1c2UgYXMgYSBmaWxlCisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0Q2Fj
aGVkSW1hZ2UoZWxlbWVudCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2Ut
PmltYWdlKCkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdlKCktPmRh
dGEoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkYXRhLT5zZXRGaWxlQ29udGVudChpbWFnZUJ1ZmZlcik7CisK
KyAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBjb250ZW50cyBvZiB0
aGUgaW1hZ2UuICBXZSB0cnkgdG8KKyAgICAvLyB1c2UgdGhlIGFsdCB0YWcgaWYgb25lIGV4aXN0
cywgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUgc3VnZ2VzdGVkCisgICAgLy8gZmlsZW5h
bWUgaW4gdGhlIGh0dHAgaGVhZGVyLCBhbmQgZmluYWxseSB3ZSByZXNvcnQgdG8gdXNpbmcgdGhl
IGZpbGVuYW1lCisgICAgLy8gaW4gdGhlIFVSTC4KKyAgICBTdHJpbmcgZXh0ZW5zaW9uID0gTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoCisgICAgICAg
IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgIC8vIGRhdGFPYmplY3Qt
PmZpbGVFeHRlbnNpb24gPSBleHRlbnNpb24uaXNFbXB0eSgpID8gIiIgOiAiLiIgKyBleHRlbnNp
b247CisgICAgU3RyaW5nIHRpdGxlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
YWx0QXR0cik7CisgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgdGl0bGUgPSBjYWNo
ZWRJbWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOworCisgICAgLy8gdGl0bGUg
PSBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZSh0aXRsZSwgZGF0YU9iamVjdCk7
CisgICAgZGF0YS0+c2V0RmlsZUNvbnRlbnROYW1lKHRpdGxlICsgZXh0ZW5zaW9uKTsKK30KKwor
dm9pZCBDbGlwYm9hcmQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBtX2RhdGEtPnNl
dFVSTCh1cmwsIHRpdGxlKTsKKworICAgIC8vIFdyaXRlIHRoZSBieXRlcyBpbiB0aGUgaW1hZ2Ug
dG8gdGhlIGZpbGUgZm9ybWF0LgorICAgIHdyaXRlSW1hZ2UobV9kYXRhLmdldCgpLCBlbGVtZW50
LCB1cmwpOworCisgICAgQXRvbWljU3RyaW5nIGltYWdlVVJMID0gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGZ1bGxVUkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGltYWdlVVJMKSk7CisgICAgaWYgKGZ1bGxV
UkwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQdXQgaW1nIHRhZyBvbiB0
aGUgY2xpcGJvYXJkIHJlZmVyZW5jaW5nIHRoZSBpbWFnZQorICAgIG1fZGF0YS0+c2V0RGF0YSgi
dGV4dC9odG1sIiwgaW1hZ2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KSk7Cit9CisKKyNpZiBP
UyhXSU5ET1dTKQorc3RhdGljIHZvaWQgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5l
d2xpbmVzKFN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBOZXdsaW5lID0g
J1xuJzsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgV2luZG93c05ld2xpbmUoIlxyXG4i
KTsKKyAgICBzdHIucmVwbGFjZShOZXdsaW5lLCBXaW5kb3dzTmV3bGluZSk7Cit9CisjZW5kaWYK
Kworc3RhdGljIHZvaWQgcmVwbGFjZU5CU1BXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCit7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAg
IHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9ICcgJzsKKyAgICBzdHIucmVwbGFj
ZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7Cit9CisKK3N0YXRp
YyBTdHJpbmcgdXJsVG9NYXJrdXAoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQoreworICAgIFN0cmluZyBtYXJrdXAoIjxhIGhyZWY9XCIiKTsKKyAgICBtYXJrdXAuYXBwZW5k
KHVybC5zdHJpbmcoKSk7CisgICAgbWFya3VwLmFwcGVuZCgiXCI+Iik7CisgICAgLy8gRklYTUU6
IEhUTUwgZXNjYXBlIHRoaXMsIHBvc3NpYmx5IGJ5IG1vdmluZyBpbnRvIHRoZSBnbHVlIGxheWVy
IHNvIHdlCisgICAgLy8gY2FuIHVzZSBuZXQvYmFzZS9lc2NhcGUuaC4KKyAgICBtYXJrdXAuYXBw
ZW5kKHRpdGxlKTsKKyAgICBtYXJrdXAuYXBwZW5kKCI8L2E+Iik7CisgICAgcmV0dXJuIG1hcmt1
cDsKK30KKwordm9pZCBDbGlwYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgRnJhbWUqKQoreworICAgIG1fZGF0YS0+c2V0VVJMKHVybCwgdGl0bGUp
OworCisgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIHBsYWluIHRleHQuCisgICAg
bV9kYXRhLT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgdXJsLnN0cmluZygpKTsKKworICAgIC8vIFRo
ZSBVUkwgY2FuIGFsc28gYmUgdXNlZCBhcyBhbiBIVE1MIGZyYWdtZW50LgorICAgIG1fZGF0YS0+
c2V0SFRNTCh1cmxUb01hcmt1cCh1cmwsIHRpdGxlKSwgdXJsKTsKK30KKwordm9pZCBDbGlwYm9h
cmQ6OndyaXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CisKKyAgICBtX2RhdGEtPnNldEhUTUwoY3JlYXRlTWFy
a3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpLAorICAgICAgICAg
ICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworCisgICAgU3RyaW5nIHN0ciA9
IGZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyNpZiBPUyhXSU5ET1dTKQorICAgIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOworI2VuZGlmCisgICAgcmVwbGFjZU5C
U1BXaXRoU3BhY2Uoc3RyKTsKKyAgICBtX2RhdGEtPnNldERhdGEoInRleHQvcGxhaW4iLCBzdHIp
OworfQorCit2b2lkIENsaXBib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQoreworICAgIFN0cmluZyBzdHIgPSB0ZXh0OworI2lmIE9TKFdJTkRPV1MpCisgICAgcmVwbGFj
ZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CisjZW5kaWYKKyAgICByZXBs
YWNlTkJTUFdpdGhTcGFjZShzdHIpOworICAgIG1fZGF0YS0+c2V0RGF0YSgidGV4dC9wbGFpbiIs
IHN0cik7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkOjpoYXNEYXRhKCkKK3sKKyAgICByZXR1cm4gbV9k
YXRhLT5oYXNEYXRhKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXgg
NDAxOGU0Zi4uNGVhNzI2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysr
IGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKQEAgLTMwLDc3ICszMCwxNjcgQEAKICNpbmNsdWRl
ICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIk5vZGUuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgRmlsZUxpc3Q7CitjbGFzcyBGaWxlTGlzdDsKIAotICAgIC8vIFN0YXRlIGF2YWlsYWJs
ZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLSAg
ICBjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxDbGlwYm9hcmQ+IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBib2FyZCgpIHsgfQorY2xhc3MgQ2xpcGJvYXJk
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENsaXBib2FyZERhdGE+IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5DbGlwYm9hcmREYXRhKCkgeyB9CiAKLSAgICAgICAgLy8gSXMgdGhpcyBvcGVyYXRp
b24gYSBkcmFnLWRyb3Agb3IgYSBjb3B5LXBhc3RlPwotICAgICAgICBib29sIGlzRm9yRHJhZ2dp
bmcoKSBjb25zdCB7IHJldHVybiBtX2ZvckRyYWdnaW5nOyB9CisgICAgdm9pZCBjbGVhckRhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxEYXRhKCkgPSAw
OworICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vzcykg
Y29uc3Q7CisgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKIAotICAgICAgICBTdHJpbmcgZHJvcEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIGRy
b3BFZmZlY3RJc1VuaW5pdGlhbGl6ZWQoKSA/ICJub25lIiA6IG1fZHJvcEVmZmVjdDsgfQotICAg
ICAgICB2b2lkIHNldERyb3BFZmZlY3QoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIGJvb2wgZHJv
cEVmZmVjdElzVW5pbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcEVmZmVjdCA9PSAi
dW5pbml0aWFsaXplZCI7IH0KLSAgICAgICAgU3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCB7
IHJldHVybiBtX2VmZmVjdEFsbG93ZWQ7IH0KLSAgICAgICAgdm9pZCBzZXRFZmZlY3RBbGxvd2Vk
KGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxEYXRh
KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgYm9vbCYgc3VjY2VzcykgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0
YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgPSAwOworICAgIHZpcnR1
YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gZmlsZXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgp
IGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3QgPSAwOworCisg
ICAgLy8gVVJMcyBhbmQgSFRNTCBkYXRhIGNhbiBoYXZlIGFkZGl0aW9uYWwgbWV0YWRhdGEgYXNz
b2NpYXRlZCB3aXRoIHRoZW0sIHNvCisgICAgLy8gdGhleSBoYXZlIHRoZWlyIG93biBnZXR0ZXJz
L3NldHRlcnMuCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Qg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRIVE1MKGNvbnN0IFN0cmlu
ZyYgaHRtbCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMKSA9IDA7CisKKyAgICAvLyBVc2VkIGZvciBk
cmFnZ2luZyBvdXQgaW1hZ2VzLgorICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0RmlsZUNvbnRlbnROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOworCisgICAgLy8gVXRp
bGl0eSBhY2Nlc3NvcnMgZm9yIHBsYXRmb3JtIGNvZGUuCisgICAgdmlydHVhbCBjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgZGF0YSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB1cmxUaXRsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBodG1sQmFzZVVSTCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBm
aWxlQ29udGVudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudE5h
bWUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRh
SW1wbChjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRh
SW1wbChjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2V0RGF0YUltcGwoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpID0gMDsKK307CisKK2NsYXNzIFdyaXRhYmxlQ2xpcGJvYXJkRGF0YSA6IHB1YmxpYyBD
bGlwYm9hcmREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRE
YXRhPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbERhdGEoKTsKKworICAg
IHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiBmaWxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0Rp
cnR5OyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0
aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25z
dCBTdHJpbmcmIGJhc2VVUkwpOworCisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dEZpbGVDb250ZW50TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVhbCBjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRs
ZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGh0bWxCYXNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9o
dG1sQmFzZVVSTDsgfQorICAgIHZpcnR1YWwgY29uc3QgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQorICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVDb250ZW50TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRO
YW1lOyB9CisKK3ByaXZhdGU6CisgICAgV3JpdGFibGVDbGlwYm9hcmREYXRhKCkgOiBtX2lzRGly
dHkoZmFsc2UpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YUltcGwoY29uc3QgU3Ry
aW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhSW1wbChjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhSW1w
bChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBtX2RhdGE7CisgICAgU3RyaW5nIG1fdXJsVGl0bGU7CisgICAgU3Ry
aW5nIG1faHRtbEJhc2VVUkw7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVu
dDsKKyAgICBTdHJpbmcgbV9maWxlQ29udGVudE5hbWU7CisgICAgYm9vbCBtX2lzRGlydHk7Cit9
OworCisvLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBk
cm9wIGFuZCBjb3B5L3Bhc3RlCitjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxD
bGlwYm9hcmQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DbGlwYm9hcmQoKSB7IH0KKworICAg
IC8vIElzIHRoaXMgb3BlcmF0aW9uIGEgZHJhZy1kcm9wIG9yIGEgY29weS1wYXN0ZT8KKyAgICBi
b29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2ZvckRyYWdnaW5nOyB9CisKKyAg
ICBTdHJpbmcgZHJvcEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIGRyb3BFZmZlY3RJc1VuaW5pdGlh
bGl6ZWQoKSA/ICJub25lIiA6IG1fZHJvcEVmZmVjdDsgfQorICAgIHZvaWQgc2V0RHJvcEVmZmVj
dChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGRyb3BFZmZlY3RJc1VuaW5pdGlhbGl6ZWQoKSBj
b25zdCB7IHJldHVybiBtX2Ryb3BFZmZlY3QgPT0gInVuaW5pdGlhbGl6ZWQiOyB9CisgICAgU3Ry
aW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEFsbG93ZWQ7IH0KKyAg
ICB2b2lkIHNldEVmZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsRGF0YSgpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBib29sJiBzdWNjZXNzKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICAvLyBleHRlbnNpb25zIGJl
eW9uZCBJRSdzIEFQSQorICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OworCisgICAg
SW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnTG9jOyB9CisgICAg
Q2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0ltYWdlLmdldCgp
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IElu
dFBvaW50JikgPSAwOworICAgIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2RyYWdJbWFnZUVsZW1lbnQuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0lt
YWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKSA9IDA7CiAgICAgCi0gICAgICAgIC8v
IGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVzKCkgY29uc3QgPSAwOwotCi0gICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQotICAgICAgICBDYWNoZWRJbWFnZSogZHJhZ0lt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnSW1hZ2UuZ2V0KCk7IH0KLSAgICAgICAgdmlydHVh
bCB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50JikgPSAwOwot
ICAgICAgICBOb2RlKiBkcmFnSW1hZ2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kcmFnSW1h
Z2VFbGVtZW50LmdldCgpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2VFbGVt
ZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpID0gMDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1
YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvY2F0aW9uKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBv
aW50JiBkcmFnTG9jYXRpb24pIGNvbnN0ID0gMDsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKik7CiAjZW5kaWYKLSAgICAgICAgdmlydHVhbCB2b2lk
IHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpID0gMDsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0
QWNjZXNzUG9saWN5KENsaXBib2FyZEFjY2Vzc1BvbGljeSk7Ci0KLSAgICAgICAgRHJhZ09wZXJh
dGlvbiBzb3VyY2VPcGVyYXRpb24oKSBjb25zdDsKLSAgICAgICAgRHJhZ09wZXJhdGlvbiBkZXN0
aW5hdGlvbk9wZXJhdGlvbigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNvdXJjZU9wZXJhdGlv
bihEcmFnT3BlcmF0aW9uKTsKLSAgICAgICAgdm9pZCBzZXREZXN0aW5hdGlvbk9wZXJhdGlvbihE
cmFnT3BlcmF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0RHJhZ0hhc1N0YXJ0ZWQo
KSB7IG1fZHJhZ1N0YXJ0ZWQgPSB0cnVlOyB9Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSwgYm9vbCBpc0ZvckRyYWdnaW5n
KTsKLQotICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KCkgY29uc3QgeyByZXR1
cm4gbV9wb2xpY3k7IH0KLSAgICAgICAgYm9vbCBkcmFnU3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhZ1N0YXJ0ZWQ7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IG1fcG9saWN5OwotICAgICAgICBTdHJpbmcgbV9kcm9wRWZmZWN0Owot
ICAgICAgICBTdHJpbmcgbV9lZmZlY3RBbGxvd2VkOwotICAgICAgICBib29sIG1fZHJhZ1N0YXJ0
ZWQ7Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgYm9vbCBtX2ZvckRyYWdnaW5n
OwotICAgICAgICBJbnRQb2ludCBtX2RyYWdMb2M7Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZEltYWdlPiBtX2RyYWdJbWFnZTsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG1fZHJh
Z0ltYWdlRWxlbWVudDsKLSAgICB9OworICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gVE9ETzogdGhpcyBtZXRob2QgY2FuIHByb2JhYmx5
IGJlIG1hZGUgY29uc3Q/CisgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKKyAgICAKKyAgICB2
b2lkIHNldEFjY2Vzc1BvbGljeShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpOworCisgICAgRHJhZ09w
ZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24oKSBjb25zdDsKKyAgICBEcmFnT3BlcmF0aW9uIGRlc3Rp
bmF0aW9uT3BlcmF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTb3VyY2VPcGVyYXRpb24oRHJh
Z09wZXJhdGlvbik7CisgICAgdm9pZCBzZXREZXN0aW5hdGlvbk9wZXJhdGlvbihEcmFnT3BlcmF0
aW9uKTsKKyAgICAKKyAgICB2b2lkIHNldERyYWdIYXNTdGFydGVkKCkgeyBtX2RyYWdTdGFydGVk
ID0gdHJ1ZTsgfQorCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmREYXRhPiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQ2xpcGJvYXJkKENsaXBi
b2FyZEFjY2Vzc1BvbGljeSwgYm9vbCBpc0ZvckRyYWdnaW5nKTsKKyAgICBDbGlwYm9hcmQoUGFz
c1JlZlB0cjxDbGlwYm9hcmREYXRhPiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBib29sIGlzRm9y
RHJhZ2dpbmcpOworCisgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9saWN5OyB9CisgICAgYm9vbCBkcmFnU3RhcnRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhZ1N0YXJ0ZWQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IG1fcG9saWN5OworICAgIFN0cmluZyBtX2Ryb3BFZmZlY3Q7CisgICAgU3RyaW5nIG1fZWZm
ZWN0QWxsb3dlZDsKKyAgICBib29sIG1fZHJhZ1N0YXJ0ZWQ7CisgICAgUmVmUHRyPENsaXBib2Fy
ZERhdGE+IG1fZGF0YTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBib29sIG1fZm9yRHJhZ2dpbmc7
CisgICAgSW50UG9pbnQgbV9kcmFnTG9jOworICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZEltYWdlPiBtX2RyYWdJbWFnZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9kcmFnSW1hZ2VFbGVtZW50
OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9DbGlwYm9hcmRVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkVXRpbGl0aWVz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQxNzdhCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkVXRpbGl0aWVzLmNwcApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRV
dGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBPUyhXSU5ET1dTKQordm9pZCByZXBs
YWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoU3RyaW5nJiBzdHIpCit7CisgICAg
c3RhdGljIGNvbnN0IFVDaGFyIE5ld2xpbmUgPSAnXG4nOworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBXaW5kb3dzTmV3bGluZSgiXHJcbiIpOworICAgIHN0ci5yZXBsYWNlKE5ld2xpbmUs
IFdpbmRvd3NOZXdsaW5lKTsKK30KKyNlbmRpZgorCit2b2lkIHJlcGxhY2VOQlNQV2l0aFNwYWNl
KFN0cmluZyYgc3RyKQoreworICAgIHN0YXRpYyBjb25zdCBVQ2hhciBOb25CcmVha2luZ1NwYWNl
Q2hhcmFjdGVyID0gMHhBMDsKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgU3BhY2VDaGFyYWN0ZXIg
PSAnICc7CisgICAgc3RyLnJlcGxhY2UoTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VD
aGFyYWN0ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2RvbS9DbGlwYm9hcmRVdGlsaXRpZXMuaCBiL1dlYkNvcmUvZG9tL0NsaXBib2FyZFV0aWxp
dGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTQyODAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2RvbS9DbGlwYm9hcmRVdGlsaXRpZXMuaApAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNz
IFN0cmluZzsKKworI2lmIE9TKFdJTkRPV1MpCit2b2lkIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5k
b3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmKTsKKyNlbmRpZgordm9pZCByZXBsYWNlTkJTUFdpdGhT
cGFjZShTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRl
eCA4YWUxMzEzLi4yMDZmMzA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzU3LDcgKzM1NywxMSBAQCBi
b29sIEVkaXRvcjo6dHJ5REhUTUxDb3B5KCkKICAgICAgICAgLy8gYWxzbyBkb25lIGZvciBzZWN1
cml0eSwgYXMgaXQgZXJhc2VzIGRhdGEgZnJvbSB0aGUgbGFzdCBjb3B5L3Bhc3RlLgogICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5jbGVhcigpOwogCi0gICAgcmV0dXJu
ICFkaXNwYXRjaENQUEV2ZW50KGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIENsaXBib2FyZFdyaXRh
YmxlKTsKKyAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBuZXdHZW5lcmFsQ2xpcGJv
YXJkKENsaXBib2FyZFdyaXRhYmxlKTsKKyAgICBib29sIGhhbmRsZWQgPSAhZGlzcGF0Y2hDUFBF
dmVudChldmVudE5hbWVzKCkuY29weUV2ZW50LCBjbGlwYm9hcmQuZ2V0KCkpOworICAgIGlmICho
YW5kbGVkICYmIGNsaXBib2FyZC0+ZGF0YSgpLT5pc0RpcnR5KCkpCisgICAgICAgIFBhc3RlYm9h
cmQ6OndyaXRlRGF0YShjbGlwYm9hcmQtPmRhdGEoKSk7CisgICAgcmV0dXJuIGhhbmRsZWQ7CiB9
CiAKIGJvb2wgRWRpdG9yOjp0cnlESFRNTEN1dCgpCkBAIC0zNzAsNyArMzc0LDExIEBAIGJvb2wg
RWRpdG9yOjp0cnlESFRNTEN1dCgpCiAgICAgICAgIC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHks
IGFzIGl0IGVyYXNlcyBkYXRhIGZyb20gdGhlIGxhc3QgY29weS9wYXN0ZS4KICAgICAgICAgUGFz
dGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+Y2xlYXIoKTsKIAotICAgIHJldHVybiAhZGlz
cGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCkuY3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsK
KyAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBuZXdHZW5lcmFsQ2xpcGJvYXJkKENs
aXBib2FyZFdyaXRhYmxlKTsKKyAgICBib29sIGhhbmRsZWQgPSAhZGlzcGF0Y2hDUFBFdmVudChl
dmVudE5hbWVzKCkuY3V0RXZlbnQsIGNsaXBib2FyZC5nZXQoKSk7CisgICAgaWYgKGhhbmRsZWQg
JiYgY2xpcGJvYXJkLT5kYXRhKCktPmlzRGlydHkoKSkKKyAgICAgICAgUGFzdGVib2FyZDo6d3Jp
dGVEYXRhKGNsaXBib2FyZC0+ZGF0YSgpKTsKKyAgICByZXR1cm4gaGFuZGxlZDsKIH0KIAogYm9v
bCBFZGl0b3I6OnRyeURIVE1MUGFzdGUoKQpAQCAtNzA1LDE0ICs3MTMsMTggQEAgdm9pZCBFZGl0
b3I6OmNsZWFyTGFzdEVkaXRDb21tYW5kKCkKIC8vIHRoZSBldmVudCBoYW5kbGVyIE5PVCBzZXR0
aW5nIHRoZSByZXR1cm4gdmFsdWUgdG8gZmFsc2UKIGJvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kg
cG9saWN5KQogeworICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IG5ld0dlbmVyYWxD
bGlwYm9hcmQocG9saWN5KTsKKyAgICByZXR1cm4gZGlzcGF0Y2hDUFBFdmVudChldmVudFR5cGUs
IGNsaXBib2FyZC5nZXQoKSk7Cit9CisKK2Jvb2wgRWRpdG9yOjpkaXNwYXRjaENQUEV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3sKICAg
ICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50KCk7
CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHRhcmdldCA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PmJvZHkoKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgdGFy
Z2V0ID0gdGFyZ2V0LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICAKLSAgICBSZWZQdHI8Q2xp
cGJvYXJkPiBjbGlwYm9hcmQgPSBuZXdHZW5lcmFsQ2xpcGJvYXJkKHBvbGljeSk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IENsaXBib2FyZEV2
ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVlLCB0cnVlLCBjbGlwYm9hcmQpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmlu
ZGV4IDNlMjIzZGMuLjllYzRmMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTEzNyw2ICsxMzcsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBkZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVE
aXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgYm9vbCBraWxsUmluZywgYm9vbCBpc1R5cGluZ0Fj
dGlvbik7CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoYm9vbCBzbWFy
dERlbGV0ZSk7CiAgICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYs
IENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CisgICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYsIENsaXBib2FyZCopOwogICAgIAogICAgIE5vZGUqIHJlbW92ZWRBbmNo
b3IoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZWRBbmNob3IuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFJlbW92ZWRBbmNob3IoUGFzc1JlZlB0cjxOb2RlPiBuKSB7IG1fcmVtb3ZlZEFuY2hvciA9IG47
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCmluZGV4IDFl
YTA4NWIuLjRiMWRkMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0
b3JDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9t
aXVtLmNwcApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShm
YWxzZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKSwgcG9saWN5KTsKKyAgICByZXR1cm4g
Q2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShmYWxzZSwgcG9saWN5KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdDb250
cm9sbGVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdDb250cm9sbGVy
Q2hyb21pdW0uY3BwCmluZGV4IGRlNTNkMTkuLmVlOTVhMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDcgKzUxLDcgQEAg
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJh
Z0RhdGEpCiAgICAgLy8gYXR0YWNoZWQgc2hlZXQgSWYgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBm
cm9tIHdpdGhpbiBXZWJDb3JlCiAgICAgLy8gb3BlcmF0aW9uRm9yRHJhZyBjYW4gYmUgcHVsbGVk
IGludG8gV2ViQ29yZSBpdHNlbGYKICAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIHJldHVybiBk
cmFnRGF0YS0+Y29udGFpbnNVUkwoKSAmJiAhbV9kaWRJbml0aWF0ZURyYWcgPyBEcmFnT3BlcmF0
aW9uQ29weSA6IERyYWdPcGVyYXRpb25Ob25lOworICAgIHJldHVybiAoZHJhZ0RhdGEtPmNvbnRh
aW5zVVJMKCkgfHwgZHJhZ0RhdGEtPmNvbnRhaW5zRmlsZXMoKSkgJiYgIW1fZGlkSW5pdGlhdGVE
cmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAogYm9vbCBE
cmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
Y2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAppbmRleCBmZjE2MWFmLi4yZjMwMTMxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKQEAgLTEyOCw4
ICsxMjgsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBF
dmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKLSAgICBSZWZQ
dHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gQ2hyb21pdW1EYXRhT2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVlLCBkYXRh
T2JqZWN0LmdldCgpLCBDbGlwYm9hcmRXcml0YWJsZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENo
cm9taXVtOjpjcmVhdGUodHJ1ZSwgQ2xpcGJvYXJkV3JpdGFibGUpOwogfQogCiB2b2lkIEV2ZW50
SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmggYi9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBjMzQ3
NmE5Li5hOTAyMjFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtNzIsNiArNzIsNyBAQCBleHRl
cm4gTlNTdHJpbmcgKldlYlVSTFBib2FyZFR5cGU7CiBleHRlcm4gTlNTdHJpbmcgKldlYlVSTHNX
aXRoVGl0bGVzUGJvYXJkVHlwZTsKICNlbmRpZgogCitjbGFzcyBDbGlwYm9hcmREYXRhOwogY2xh
c3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsK
QEAgLTg5LDcgKzkwLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB3cml0ZVBsYWluVGV4
dChOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAjZW5kaWYK
ICAgICAKKyAgICBzdGF0aWMgdm9pZCB3cml0ZURhdGEoY29uc3QgUGFzc1JlZlB0cjxDbGlwYm9h
cmREYXRhPiYpOworCiAgICAgc3RhdGljIFBhc3RlYm9hcmQqIGdlbmVyYWxQYXN0ZWJvYXJkKCk7
CisKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlKiwgYm9vbCBjYW5TbWFydENvcHlPckRl
bGV0ZSwgRnJhbWUqKTsKICAgICB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKiA9IDAp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IGYxZGM5
NWIuLjNjYzVjZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1CcmlkZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdl
LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ2hyb21pdW1CcmlkZ2VfaAogCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhhc2hTZXQuaCIKICNpbmNsdWRlICJJbWFnZVNv
dXJjZS5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgpA
QCAtNTAsMTk3ICs1MSwyMDUgQEAgdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEN1cnNvcjsK
LSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBHZW9sb2Nh
dGlvblNlcnZpY2VCcmlkZ2U7Ci0gICAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07
Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNz
IEluZGV4ZWREYXRhYmFzZTsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEtVUkw7Ci0g
ICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIFdpZGdldDsKLQotICAgIHN0cnVjdCBDb29raWU7
Ci0gICAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsKLQotICAgIC8vIEFuIGludGVyZmFjZSB0byB0
aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gYW5zd2VyCi0gICAg
Ly8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCi0KLSAgICBjbGFzcyBD
aHJvbWl1bUJyaWRnZSB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBDYWNoZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJl
c3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci0KLSAgICAgICAgLy8gQ2xpcGJvYXJk
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlcik7Ci0KLSAgICAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgICAgICBzdGF0aWMgdm9p
ZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBT
dHJpbmcqLCBLVVJMKik7Ci0KLSAgICAgICAgLy8gT25seSB0aGUgY2xpcGJvYXJkUmVhZCBmdW5j
dGlvbnMgdGFrZSBhIGJ1ZmZlciBhcmd1bWVudCBiZWNhdXNlIAotICAgICAgICAvLyBDaHJvbWl1
bSBjdXJyZW50bHkgdXNlcyBhIGRpZmZlcmVudCB0ZWNobmlxdWUgdG8gd3JpdGUgdG8gYWx0ZXJu
YXRlCi0gICAgICAgIC8vIGNsaXBib2FyZCBidWZmZXJzLgotICAgICAgICBzdGF0aWMgdm9pZCBj
bGlwYm9hcmRXcml0ZVNlbGVjdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlUGxhaW5U
ZXh0KGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZVVS
TChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBi
b2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLQotICAgICAgICAvLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
Jik7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgICAgIHN0YXRpYyBib29sIHJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+Jik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQotICAgICAgICAvLyBETlMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lKTsKLQotICAgICAgICAvLyBGaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBmaWxl
RXhpc3RzKGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVGaWxlKGNv
bnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShj
b25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3Ry
aW5nJiwgbG9uZyBsb25nJiByZXN1bHQpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3QmIHJlc3VsdCk7Ci0gICAgICAgIHN0
YXRpYyBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgICAgICBz
dGF0aWMgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsKLSAgICAgICAgc3RhdGljIGJvb2wgbWFrZUFsbERp
cmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0
QWJzb2x1dGVQYXRoKGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc0RpcmVj
dG9yeShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIEtVUkwgZmlsZVBhdGhUb1VSTChj
b25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKLSAgICAgICAgc3RhdGljIGxvbmcgbG9u
ZyBzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVr
T3JpZ2luKTsKLSAgICAgICAgc3RhdGljIGJvb2wgdHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgbG9uZyBsb25nIG9mZnNldCk7Ci0gICAgICAgIHN0YXRpYyBpbnQgcmVhZEZyb21GaWxl
KFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHN0
YXRpYyBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKLQotICAgICAgICAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgQ2xpcGJvYXJk
RGF0YTsKK2NsYXNzIENvbG9yOworY2xhc3MgQ3Vyc29yOworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBGcmFtZTsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKK2NsYXNzIEdlb2xvY2F0
aW9uU2VydmljZUNocm9taXVtOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2U7
CitjbGFzcyBJbmRleGVkRGF0YWJhc2U7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgS1VSTDsKK2Ns
YXNzIFN0cmluZzsKK2NsYXNzIFdpZGdldDsKKworc3RydWN0IENvb2tpZTsKK3N0cnVjdCBGb250
UmVuZGVyU3R5bGU7CisKKy8vIEFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3
aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gYW5zd2VyCisvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5
c3RlbSBhbmQgc28gb24uLi4KKworY2xhc3MgQ2hyb21pdW1CcmlkZ2UgeworcHVibGljOgorICAg
IC8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgY2FjaGVNZXRhZGF0YShjb25zdCBLVVJM
JiB1cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYpOworCisgICAg
Ly8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJs
ZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6
Q2xpcGJvYXJkQnVmZmVyKTsKKworICAgIHN0YXRpYyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWlu
VGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKKyAgICBzdGF0aWMgdm9p
ZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBT
dHJpbmcqLCBLVVJMKik7CisKKyAgICAvLyBPbmx5IHRoZSBjbGlwYm9hcmRSZWFkIGZ1bmN0aW9u
cyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1c2UgCisgICAgLy8gQ2hyb21pdW0gY3VycmVu
dGx5IHVzZXMgYSBkaWZmZXJlbnQgdGVjaG5pcXVlIHRvIHdyaXRlIHRvIGFsdGVybmF0ZQorICAg
IC8vIGNsaXBib2FyZCBidWZmZXJzLgorICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlU2Vs
ZWN0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
KyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsK
KyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0
ciwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2Fy
ZFdyaXRlRGF0YShjb25zdCBQYXNzUmVmUHRyPENsaXBib2FyZERhdGE+Jik7CisKKyAgICAvLyBE
YXRhIHRyYW5zZmVyIGludGVyZmFjZXMgZm9yIGNsaXBib2FyZCBhbmQgZHJhZ2dpbmcuCisgICAg
c3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBkYXRhVHJhbnNmZXJHZXRUeXBlcyhEYXRhVHJhbnNmZXJQ
cml2YXRlOjpTb3VyY2Ugc291cmNlKTsKKyAgICBzdGF0aWMgYm9vbCBkYXRhVHJhbnNmZXJHZXRE
YXRhKERhdGFUcmFuc2ZlclByaXZhdGU6OlNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0
cmluZz4gZGF0YVRyYW5zZmVyR2V0RmlsZW5hbWVzKERhdGFUcmFuc2ZlclByaXZhdGU6OlNvdXJj
ZSBzb3VyY2UpOworICAgIC8vIFRPRE8oZGNoZW5nKTogRG8gd2UgbmVlZCBhIG1ldGhvZCBmb3Ig
ZmlsZSBjb250ZW50cyBhcyB3ZWxsPworCisgICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMg
dm9pZCBzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworICAgIHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOworICAgIHN0YXRpYyBib29sIHJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+Jik7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOworICAgIHN0YXRpYyBib29sIGNvb2tp
ZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CisKKyAgICAvLyBETlMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0
YXRpYyB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworCisgICAgLy8g
RmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJv
b2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wg
Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiByZXN1bHQpOworICAgIHN0YXRp
YyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVz
dWx0KTsKKyAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
KTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsKKyAgICBzdGF0aWMgYm9vbCBtYWtl
QWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdl
dEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0RpcmVjdG9y
eShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJMKGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGNsb3NlRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUmKTsKKyAgICBzdGF0aWMgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOworICAgIHN0YXRp
YyBib29sIHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQp
OworICAgIHN0YXRpYyBpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworCisgICAgLy8gRm9udCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICNpZiBPUyhXSU5ET1dTKQotICAgICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9h
ZGVkKEhGT05UIGZvbnQpOworICAgIHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQg
Zm9udCk7CiAjZW5kaWYKICNpZiBPUyhMSU5VWCkKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVu
ZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBG
b250UmVuZGVyU3R5bGUqIHJlc3VsdCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZh
bWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZmFtaWx5
LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCk7CisgICAgc3RhdGlj
IFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVfdCBu
dW1DaGFyYWN0ZXJzKTsKICNlbmRpZgogCi0gICAgICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoY29uc3QgRG9jdW1lbnQqKTsKKyAg
ICAvLyBGb3JtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyB2b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQo
Y29uc3QgRG9jdW1lbnQqKTsKIAotICAgICAgICAvLyBHZW9sb2NhdGlvbiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0
aWMgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlKiBjcmVhdGVHZW9sb2NhdGlvblNlcnZpY2VCcmlk
Z2UoR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW0qKTsKKyAgICAvLyBHZW9sb2NhdGlvbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IHN0YXRpYyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UqIGNyZWF0ZUdlb2xvY2F0aW9uU2Vydmlj
ZUJyaWRnZShHZW9sb2NhdGlvblNlcnZpY2VDaHJvbWl1bSopOwogCi0gICAgICAgIC8vIEhUTUw1
IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gSFRNTDUgREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAg
IC8vIFJldHVybnMgYSBoYW5kbGUgdG8gdGhlIERCIGZpbGUgYW5kIG9vcHRpb25hbGx5IGEgaGFu
ZGxlIHRvIGl0cyBjb250YWluaW5nIGRpcmVjdG9yeQotICAgICAgICBzdGF0aWMgUGxhdGZvcm1G
aWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBpbnQg
ZGVzaXJlZEZsYWdzKTsKLSAgICAgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJVEVf
T0sgPSAwLCBvbiBzdWNjZXNzKQotICAgICAgICBzdGF0aWMgaW50IGRhdGFiYXNlRGVsZXRlRmls
ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBib29sIHN5bmNEaXIgPSBmYWxzZSk7Ci0gICAg
ICAgIC8vIFJldHVybnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKLSAgICAgICAgc3Rh
dGljIGxvbmcgZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVO
YW1lKTsKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgREIgZmlsZQotICAgICAg
ICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNG
aWxlTmFtZSk7CisgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgREIgZmlsZSBhbmQgb29w
dGlvbmFsbHkgYSBoYW5kbGUgdG8gaXRzIGNvbnRhaW5pbmcgZGlyZWN0b3J5CisgICAgc3RhdGlj
IFBsYXRmb3JtRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmxl
TmFtZSwgaW50IGRlc2lyZWRGbGFncyk7CisgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChT
UUxJVEVfT0sgPSAwLCBvbiBzdWNjZXNzKQorICAgIHN0YXRpYyBpbnQgZGF0YWJhc2VEZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpciA9IGZhbHNlKTsKKyAg
ICAvLyBSZXR1cm5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBEQiBmaWxlCisgICAgc3RhdGljIGxv
bmcgZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsK
KyAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBEQiBmaWxlCisgICAgc3RhdGljIGxvbmcg
bG9uZyBkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOwogI2Vu
ZGlmCiAKLSAgICAgICAgLy8gSW5kZXhlZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5kZXhlZERhdGFiYXNlPiBpbmRleGVkRGF0YWJhc2UoKTsKKyAgICAvLyBJbmRleGVkREIgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4gaW5kZXhlZERhdGFiYXNlKCk7
CiAKLSAgICAgICAgLy8gSmF2YVNjcmlwdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5SlNP
dXRPZk1lbW9yeShGcmFtZSopOwotICAgICAgICBzdGF0aWMgYm9vbCBhbGxvd1NjcmlwdERlc3Bp
dGVTZXR0aW5ncyhjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CisgICAgLy8gSmF2YVNjcmlwdCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICBzdGF0aWMgdm9pZCBub3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKik7CisgICAgc3RhdGlj
IGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwp
OwogCi0gICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBTdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3Qg
U3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCk7CisgICAgLy8gS2V5Z2VuIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICBzdGF0aWMgU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNp
Z25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1
cmwpOwogCi0gICAgICAgIC8vIExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29t
cHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKKyAgICAvLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBT
dHJpbmcgY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKIAotICAgICAgICAvLyBMYXlvdXRUZXN0
TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgICAgICBzdGF0aWMgYm9vbCBsYXlvdXRUZXN0TW9kZSgpOworICAgIC8vIExheW91dFRl
c3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgc3RhdGljIGJvb2wgbGF5b3V0VGVzdE1vZGUoKTsKIAotICAgICAgICAvLyBNZW1v
cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFsbG9jYXRlZCBm
b3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4KLSAgICAgICAgLy8gVGhhdCBpcyBjb21taXR0ZWQgc2l6
ZSBmb3IgV2luZG93cyBhbmQgdmlydHVhbCBtZW1vcnkgc2l6ZSBmb3IgUE9TSVgKLSAgICAgICAg
c3RhdGljIGludCBtZW1vcnlVc2FnZU1CKCk7CisgICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBS
ZXR1cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2VmaWxlLCBpbiBN
Qi4KKyAgICAvLyBUaGF0IGlzIGNvbW1pdHRlZCBzaXplIGZvciBXaW5kb3dzIGFuZCB2aXJ0dWFs
IG1lbW9yeSBzaXplIGZvciBQT1NJWAorICAgIHN0YXRpYyBpbnQgbWVtb3J5VXNhZ2VNQigpOwog
Ci0gICAgICAgIC8vIE1pbWVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
Ci0gICAgICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBtaW1lVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pOwotICAgICAgICBzdGF0aWMgU3RyaW5n
IG1pbWVUeXBlRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CisgICAgLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGljIGJvb2wgaXNT
dXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOworICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBmaWxlRXh0ZW5zaW9uKTsKKyAgICBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRnJvbUZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CisgICAgc3RhdGljIFN0cmluZyBwcmVmZXJyZWRFeHRl
bnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIAotICAgICAgICAvLyBQ
bHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVj
dG9yPFBsdWdpbkluZm8+Kik7Ci0gICAgICAgIHN0YXRpYyBOUE9iamVjdCogcGx1Z2luU2NyaXB0
YWJsZU9iamVjdChXaWRnZXQqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcG9wdXBzQWxsb3dlZChO
UFApOworICAgIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIGJvb2wgcGx1Z2lucyhib29sIHJl
ZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZvPiopOworICAgIHN0YXRpYyBOUE9iamVjdCogcGx1Z2lu
U2NyaXB0YWJsZU9iamVjdChXaWRnZXQqKTsKKyAgICBzdGF0aWMgYm9vbCBwb3B1cHNBbGxvd2Vk
KE5QUCk7CiAKLSAgICAgICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSk7Cisg
ICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRm
b3JtSW1hZ2VSZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKTsKIAotICAgICAgICAvLyBTYW5kYm94
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBzYW5kYm94RW5hYmxlZCgpOworICAgIC8vIFNhbmRi
b3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgc3RhdGljIGJvb2wgc2FuZGJveEVuYWJsZWQoKTsKIAotICAgICAgICAvLyBT
Y3JlZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwotICAg
ICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopOwotICAgICAg
ICBzdGF0aWMgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kik7Ci0gICAgICAgIHN0YXRp
YyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAgICAgIHN0YXRpYyBJbnRSZWN0IHNj
cmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CisgICAgLy8gU2NyZWVuIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0
aWMgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOworICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGhQ
ZXJDb21wb25lbnQoV2lkZ2V0Kik7CisgICAgc3RhdGljIGJvb2wgc2NyZWVuSXNNb25vY2hyb21l
KFdpZGdldCopOworICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7CisgICAg
c3RhdGljIEludFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKIAotICAgICAgICAv
LyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24odm9pZCAoKmZ1bmMpKCkpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1l
ckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHN0b3BTaGFy
ZWRUaW1lcigpOworICAgIC8vIFNoYXJlZFRpbWVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSk7CisgICAgc3RhdGljIHZvaWQgc3Rv
cFNoYXJlZFRpbWVyKCk7CiAKLSAgICAgICAgLy8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGlj
IHZvaWQgZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgICAgICBz
dGF0aWMgdm9pZCBpbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAg
Ly8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29u
c3QgY2hhciogbmFtZSk7CisgICAgc3RhdGljIHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVyKGNv
bnN0IGNoYXIqIG5hbWUpOwogCi0gICAgICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbgotICAgICAg
ICBzdGF0aWMgdm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKKyAg
ICAvLyBTdWRkZW4gVGVybWluYXRpb24KKyAgICBzdGF0aWMgdm9pZCBzdWRkZW5UZXJtaW5hdGlv
bkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKIAotICAgICAgICAvLyBTeXN0ZW1UaW1lIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAg
ICBzdGF0aWMgZG91YmxlIGN1cnJlbnRUaW1lKCk7CisgICAgLy8gU3lzdGVtVGltZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBz
dGF0aWMgZG91YmxlIGN1cnJlbnRUaW1lKCk7CiAKLSAgICAgICAgLy8gVGhlbWluZyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBUaGVtaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHN0YXRpYyB2b2lkIHBh
aW50QnV0dG9uKAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMg
dm9pZCBwYWludE1lbnVMaXN0KAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhckFycm93KAotICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyVHJhY2soCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYgYWxpZ25SZWN0KTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCi0gICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBib29sIGZpbGxDb250ZW50QXJlYSwgYm9vbCBkcmF3RWRnZXMp
OwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFRyYWNrYmFyKAotICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFByb2dyZXNzQmFyKAotICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50
UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRz
KTsKKyAgICBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbigKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYp
OworICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3QoCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhckFycm93KAorICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsK
KyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRodW1iKAorICAgICAgICBHcmFwaGljc0Nv
bnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUcmFjaygKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCk7CisgICAgc3RhdGljIHZvaWQg
cGFpbnRUZXh0RmllbGQoCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQg
c3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGJv
b2wgZmlsbENvbnRlbnRBcmVhLCBib29sIGRyYXdFZGdlcyk7CisgICAgc3RhdGljIHZvaWQgcGFp
bnRUcmFja2JhcigKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBh
aW50UHJvZ3Jlc3NCYXIoCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91
YmxlIGFuaW1hdGVkU2Vjb25kcyk7CiAjZW5kaWYKIAotICAgICAgICAvLyBUcmFjZSBFdmVudCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9p
ZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVu
dEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOworICAg
IC8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEJlZ2luKGNvbnN0IGNo
YXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSk7CisgICAgc3RhdGljIHZvaWQg
dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0
cmEpOwogCi0gICAgICAgIC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAg
ICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGlu
a1Zpc2l0ZWQoTGlua0hhc2gpOworICAgIC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpOworICAgIHN0YXRpYyBib29sIGlzTGlua1Zp
c2l0ZWQoTGlua0hhc2gpOwogCi0gICAgICAgIC8vIFdpZGdldCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRp
YyB2b2lkIHdpZGdldFNldEN1cnNvcihXaWRnZXQqLCBjb25zdCBDdXJzb3ImKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgd2lkZ2V0U2V0Rm9jdXMoV2lkZ2V0Kik7Ci0gICAgfTsKKyAgICAvLyBXaWRn
ZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIHN0YXRpYyB2b2lkIHdpZGdldFNldEN1cnNvcihXaWRnZXQqLCBjb25zdCBD
dXJzb3ImKTsKKyAgICBzdGF0aWMgdm9pZCB3aWRnZXRTZXRGb2N1cyhXaWRnZXQqKTsKK307CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IDVjNjdjNjUuLjQ4Njc5NTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTMx
LDU1ICszMSwxMzYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiRmls
ZUxpc3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhcigpCisvLyBCeSBkZXNpZ24sIENo
cm9taXVtRGF0YU9iamVjdCBpcyByZWFkLW9ubHkuIEFsbCBtZXRob2RzIHdoaWNoIGNhbiBjaGFu
Z2UgdGhlIGRyYWcgZGF0YSBhcmUKKy8vIGludGVudGlvbmFsbHkgbGVmdCB1bmltcGxlbWVudGVk
LgorQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdn
aW5nKQorICAgIDogbV9kYXRhU291cmNlKGlzRm9yRHJhZ2dpbmcgPyBEYXRhVHJhbnNmZXJQcml2
YXRlOjpEcmFnIDogRGF0YVRyYW5zZmVyUHJpdmF0ZTo6Q2xpcGJvYXJkKQoreworfQorCit2b2lk
IENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNv
bnN0CiB7Ci0gICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgIGZpbGVuYW1lcy5jbGVhcigp
OworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YVRyYW5zZmVyR2V0VHlwZXMobV9kYXRh
U291cmNlKTsKIH0KIAotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0Rmls
ZXMoKQorVmVjdG9yPFN0cmluZz4gQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlcygpIGNvbnN0CiB7
Ci0gICAgdXJsID0gS1VSTCgpOwotICAgIHVybFRpdGxlID0gIiI7Ci0gICAgdXJpTGlzdC5jbGVh
cigpOwotICAgIGRvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICBmaWxlRXh0ZW5zaW9uID0gIiI7
Ci0gICAgcGxhaW5UZXh0ID0gIiI7Ci0gICAgdGV4dEh0bWwgPSAiIjsKLSAgICBodG1sQmFzZVVy
bCA9IEtVUkwoKTsKLSAgICBmaWxlQ29udGVudEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKGZpbGVD
b250ZW50KQotICAgICAgICBmaWxlQ29udGVudC0+Y2xlYXIoKTsKKyAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmRhdGFUcmFuc2ZlckdldEZpbGVuYW1lcyhtX2RhdGFTb3VyY2UpOwogfQogCiBi
b29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICF1
cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1wdHkoKQotICAgICAgICB8fCAh
ZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWZpbGVFeHRlbnNpb24uaXNF
bXB0eSgpCi0gICAgICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFwbGFp
blRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5pc0VtcHR5KCkKLSAgICAgICAg
fHwgZmlsZUNvbnRlbnQ7Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2Jq
ZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiB1cmxUaXRsZShvdGhl
ci51cmxUaXRsZSkKLSAgICAsIGRvd25sb2FkTWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0
YSkKLSAgICAsIGZpbGVFeHRlbnNpb24ob3RoZXIuZmlsZUV4dGVuc2lvbikKLSAgICAsIGZpbGVu
YW1lcyhvdGhlci5maWxlbmFtZXMpCi0gICAgLCBwbGFpblRleHQob3RoZXIucGxhaW5UZXh0KQot
ICAgICwgdGV4dEh0bWwob3RoZXIudGV4dEh0bWwpCi0gICAgLCBodG1sQmFzZVVybChvdGhlci5o
dG1sQmFzZVVybCkKLSAgICAsIGZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIuZmlsZUNvbnRlbnRG
aWxlbmFtZSkKLSAgICAsIHVybChvdGhlci51cmwpCi0gICAgLCB1cmlMaXN0KG90aGVyLnVyaUxp
c3QpCi17Ci0gICAgaWYgKG90aGVyLmZpbGVDb250ZW50LmdldCgpKQotICAgICAgICBmaWxlQ29u
dGVudCA9IG90aGVyLmZpbGVDb250ZW50LT5jb3B5KCk7CisgICAgcmV0dXJuICF0eXBlcygpLmlz
RW1wdHkoKTsKK30KKworYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmlzRGlydHkoKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENo
cm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhSW1wbChjb25zdCBTdHJpbmcmIHR5cGUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0
RGF0YUltcGwoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAoreworICAg
IFN0cmluZyBkYXRhOworICAgIFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7CisgICAgc3VjY2VzcyA9
IENocm9taXVtQnJpZGdlOjpkYXRhVHJhbnNmZXJHZXREYXRhKG1fZGF0YVNvdXJjZSwgdHlwZSwg
ZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworYm9vbCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldERhdGFJbXBsKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29u
c3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcgaWdub3JlZE1ldGFkYXRhOworICAg
IGlmICghdGl0bGUpCisgICAgICAgIHRpdGxlID0gJmlnbm9yZWRNZXRhZGF0YTsKKyAgICBDaHJv
bWl1bUJyaWRnZTo6ZGF0YVRyYW5zZmVyR2V0RGF0YShtX2RhdGFTb3VyY2UsICJ0ZXh0L3VyaS1s
aXN0IiwgZGF0YSwgKnRpdGxlKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworU3RyaW5nIENocm9t
aXVtRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0Cit7CisgICAgU3Ry
aW5nIGRhdGE7CisgICAgU3RyaW5nIGlnbm9yZWRNZXRhZGF0YTsKKyAgICBpZiAoIWJhc2VVUkwp
CisgICAgICAgIGJhc2VVUkwgPSAmaWdub3JlZE1ldGFkYXRhOworICAgIENocm9taXVtQnJpZGdl
OjpkYXRhVHJhbnNmZXJHZXREYXRhKG1fZGF0YVNvdXJjZSwgInRleHQvaHRtbCIsIGRhdGEsICpi
YXNlVVJMKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6
OnNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0SFRNTChj
b25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8vIFRo
ZXNlIGFyZSB1c2VkIHdoZW4gcGVyc2lzdGluZyBkYXRhIGZyb20gRGF0YVRyYW5zZmVyIHRvIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBiYWNraW5nIHN0b3JlLgorLy8gU2luY2UgQ2hyb21pdW1EYXRh
T2JqZWN0IGlzIHJlYWQtb25seSwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGltcGxlbWVudCB0
aGVzZSBtZXRob2RzLgorY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIENocm9taXVtRGF0
YU9iamVjdDo6ZGF0YSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBidXN0ZWQuCisgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
KCk7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OnVybFRpdGxlKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5n
IENocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitjb25zdCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCitTdHJpbmcgQ2hyb21p
dW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudE5hbWUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRl
eCBhZjBhM2ZhLi5mZTk5MDc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgKQEAgLTMxLDg0ICszMSw1NCBAQAogI2lmbmRlZiBDaHJvbWl1bURh
dGFPYmplY3RfaAogI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RfaAogCi0jaW5jbHVkZSAiS1VS
TC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBBIGRhdGEgb2JqZWN0IGZvciBob2xkaW5nIGRh
dGEgdGhhdCB3b3VsZCBiZSBpbiBhIGNsaXBib2FyZCBvciBtb3ZlZAotICAgIC8vIGR1cmluZyBh
IGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3JlIGlz
IGF3YXJlCi0gICAgLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgotICAg
IGNsYXNzIENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0
YU9iamVjdD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0PiBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXNz
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY29weSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlzKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJBbGxF
eGNlcHRGaWxlcygpOwotICAgICAgICBib29sIGhhc0RhdGEoKSBjb25zdDsKLQotICAgICAgICB2
b2lkIGNsZWFyVVJMKCkKLSAgICAgICAgewotICAgICAgICAgICAgdXJsID0gS1VSTCgpOwotICAg
ICAgICAgICAgdXJpTGlzdC5jbGVhcigpOwotICAgICAgICAgICAgdXJsVGl0bGUgPSAiIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzVmFsaWRVUkwoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gdXJsLmlzVmFsaWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtV
UkwgZ2V0VVJMKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVybDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5jbGVh
cigpOwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFN0cmluZyB1cmxUaXRsZTsKLQotICAgICAgICBTdHJpbmcgZG93
bmxvYWRNZXRhZGF0YTsKLQotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOwotCi0gICAgICAgIFN0cmluZyBwbGFpblRleHQ7Ci0K
LSAgICAgICAgU3RyaW5nIHRleHRIdG1sOwotICAgICAgICBLVVJMIGh0bWxCYXNlVXJsOwotCi0g
ICAgICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lOwotICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBmaWxlQ29udGVudDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFVSTCBhbmQg
dXJpLWxpc3QgYXJlIGxpbmtlZCwgc28gdGhleSBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGluZGl2
aWR1YWxseS4KLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxp
c3Q7Ci0KLSAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KCkge30KLSAgICAgICAgQ2hyb21pdW1E
YXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYpOwotCi0gICAgICAgIGZyaWVuZCBj
bGFzcyBDbGlwYm9hcmRDaHJvbWl1bTsKLSAgICB9OworLy8gQSBkYXRhIG9iamVjdCBmb3IgaG9s
ZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3IgbW92ZWQKKy8vIGR1cmlu
ZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gVGhpcyBpcyB0aGUgZGF0YSB0aGF0IFdlYkNvcmUg
aXMgYXdhcmUKKy8vIG9mIGFuZCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBwbGF0Zm9ybS4KK2NsYXNz
IENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBDbGlwYm9hcmREYXRhIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmREYXRhPiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdn
aW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmpl
Y3QoaXNGb3JEcmFnZ2luZykpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbERh
dGEoKTsKKworICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCBib29s
IGhhc0RhdGEoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBTdHJpbmcm
IGJhc2VVUkwpOworCisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250
ZW50TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVhbCBjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYgZGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVybFRp
dGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgaHRtbEJhc2VVUkwoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50TmFtZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIENocm9taXVtRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAg
dmlydHVhbCB2b2lkIGNsZWFyRGF0YUltcGwoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXREYXRhSW1wbChjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3Mp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhSW1wbChjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICBEYXRhVHJhbnNmZXJQcml2YXRlOjpTb3VyY2Ug
bV9kYXRhU291cmNlOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDc1MGZmMzAu
LjlkZjdhM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCkBAIC0yOCwzMzggKzI4LDI2IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21p
dW0uaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKLSNpbmNsdWRlICJDbGlwYm9h
cmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RWxlbWVudC5oIgotI2luY2x1ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKLSNpbmNsdWRlICJQYXN0
ZWJvYXJkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgot
I2luY2x1ZGUgIm1hcmt1cC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLS8vIFdlIHByb3ZpZGUgdGhlIElFIGNsaXBib2FyZCB0eXBlcyAo
VVJMIGFuZCBUZXh0KSwgYW5kIHRoZSBjbGlwYm9hcmQgdHlwZXMgc3BlY2lmaWVkIGluIHRoZSBX
SEFUV0cgV2ViIEFwcGxpY2F0aW9ucyAxLjAgZHJhZnQKLS8vIHNlZSBodHRwOi8vd3d3LndoYXR3
Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyBTZWN0aW9uIDYuMy41LjMKLQotZW51
bSBDbGlwYm9hcmREYXRhVHlwZSB7Ci0gICAgQ2xpcGJvYXJkRGF0YVR5cGVOb25lLAotCi0gICAg
Q2xpcGJvYXJkRGF0YVR5cGVVUkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0LAotICAg
IENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVQbGFp
blRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MLAotCi0gICAgQ2xpcGJvYXJkRGF0YVR5
cGVPdGhlciwKLX07Ci0KLS8vIFBlciBSRkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAi
dGV4dC8uLi4iIE1JTUUgdHlwZXMgaXMgQ1ItTEYuCi1zdGF0aWMgY2hhciBjb25zdCogY29uc3Qg
dGV4dE1JTUVUeXBlTGluZVNlcGFyYXRvciA9ICJcclxuIjsKLQotc3RhdGljIENsaXBib2FyZERh
dGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewot
ICAgIFN0cmluZyBjbGVhblR5cGUgPSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0g
ICAgaWYgKGNsZWFuVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZU5vbmU7Ci0KLSAgICAvLyBJbmNsdWRlcyB0d28gc3BlY2lhbCBjYXNlcyBmb3IgSUUgY29t
cGF0aWJpbGl0eS4KLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBjbGVhblR5cGUgPT0g
InRleHQvcGxhaW4iIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpKQotICAg
ICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ7Ci0gICAgaWYgKGNsZWFuVHlw
ZSA9PSAidXJsIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwotICAgIGlm
IChjbGVhblR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVVUklMaXN0OwotICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJsIikKLSAg
ICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0gICAgaWYgKGNsZWFu
VHlwZSA9PSAidGV4dC9odG1sIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlSFRN
TDsKLQotICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU90aGVyOwotfQotCi1DbGlwYm9hcmRD
aHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBkYXRhT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBi
b2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCitDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hy
b21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KQog
ICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgaXNGb3JEcmFnZ2luZykKLSAgICAsIG1fZGF0YU9iamVj
dChkYXRhT2JqZWN0KQogewogfQogCi1QYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywKLSAgICBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSkKK0NsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bShQYXNzUmVmUHRyPENs
aXBib2FyZERhdGE+IGRhdGEsIGJvb2wgaXNGb3JEcmFnZ2luZywgQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSkKKyAgICA6IENsaXBib2FyZChkYXRhLCBwb2xpY3ksIGlzRm9yRHJhZ2dpbmcp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdn
aW5nLCBkYXRhT2JqZWN0LCBwb2xpY3kpKTsKIH0KIAotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUgfHwgIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5
cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
Tm9uZToKLSAgICAgICAgLy8gSWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLCBldmVyeXRoaW5n
IGV4Y2VwdCB0aGUgZmlsZSBsaXN0IG11c3QgYmUgY2xlYXJlZC4KLSAgICAgICAgLy8gKFNlZSBI
VE1MNSBzcGVjLCAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKQot
ICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhclVSTCgpOwotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0g
ICAgICAgIG1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAg
ICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybjsKLQotICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRI
dG1sID0gIiI7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKLSAgICAg
ICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxsRGF0
YSgpCi17Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyKCk7Ci19Ci0KLVN0cmluZyBDbGlwYm9h
cmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNv
bnN0Ci17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5
cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVOb25lOgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBIYWNrIGZvciBV
UkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZHJvcCdzIGRlZmF1bHQgYWN0
aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBwYWdl
LCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
VVJJTGlzdDoKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJpID0gbV9kYXRhT2JqZWN0LT51
cmlMaXN0W2ldOwotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbElzKHVyaSwgImZpbGUiKSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF1
cmkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsK
LSAgICAgICAgICAgICAgICAvLyBVUklzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbm9uaWNhbGl6ZWQs
IHNvIGNvcHkgZXZlcnl0aGluZyB2ZXJiYXRpbS4KLSAgICAgICAgICAgICAgICB0ZXh0LmFwcGVu
ZCh1cmkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1w
dHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0KLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlVVJMOgotICAgICAgICAvLyBJbiBjYXNlIG9mIGEgcHJldmlvdXMgc2V0
RGF0YSgndGV4dC91cmktbGlzdCcpLCBzZXREYXRhKCkgaGFzIGFscmVhZHkKLSAgICAgICAgLy8g
cHJlcGFyZWQgdGhlICd1cmwnIG1lbWJlciwgc28gd2UgY2FuIGp1c3QgcmV0cmlldmUgaXQgaGVy
ZS4KLSAgICAgICAgaWYgKCFtX2RhdGFPYmplY3QtPnVybC5pc0VtcHR5KCkgJiYgIW1fZGF0YU9i
amVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsLnN0cmluZygpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVE
b3dubG9hZFVSTDoKLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0
YWRhdGEuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1l
dGFkYXRhOwotICAgIAotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAg
ICAgIGlmICghaXNGb3JEcmFnZ2luZygpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0
IGZvciBhIGRyYWcsIGl0J3MgZm9yIGEgY3V0L3Bhc3RlIGV2ZW50IGhhbmRsZXIuCi0gICAgICAg
ICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNsaXBib2FyZC4KLSAg
ICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0g
ICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rp
b25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25C
dWZmZXIgOiAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZm
ZXI7Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkUGxhaW5UZXh0KGJ1ZmZlcik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0
eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT3Ro
ZXJ3aXNlIHJldHVybiB3aGF0ZXZlciBpcyBzdG9yZWQgaW4gcGxhaW5UZXh0LgotICAgICAgICBz
dWNjZXNzID0gIW1fZGF0YU9iamVjdC0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0
dXJuIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0OwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZUhUTUw6Ci0gICAgICAgIGlmICghaXNGb3JEcmFnZ2luZygpKSB7Ci0gICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzbid0IGZvciBhIGRyYWcsIGl0J3MgZm9yIGEgY3V0L3Bhc3RlIGV2ZW50IGhhbmRs
ZXIuCi0gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNs
aXBib2FyZC4KLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIg
YnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6
U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7Ci0gICAgICAgICAg
ICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsK
LSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3Jl
ZCBpbiB0ZXh0SHRtbC4KLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPnRleHRIdG1s
LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dGV4dEh0bWw7Ci0KLSAg
ICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAgICAgIC8vIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6
c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAgICBp
ZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1F
VHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmRE
YXRhVHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVVUkw6Ci0gICAgICAgIC8vIEZvciBzZXREYXRhKCksICJVUkwiIG11c3QgYmUgdHJl
YXRlZCBhcyAidGV4dC91cmktbGlzdCIuCi0gICAgICAgIC8vIChTZWUgSFRNTDUgc3BlYywgIlRo
ZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikKLSAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBLVVJMKCk7
Ci0gICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZl
ciwgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwotICAgICAgICAvLyB3ZSBhbHNvIGFsbG93IGp1
c3QgXG4gaGVyZS4gCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV9kYXRhT2JqZWN0LT51cmlM
aXN0KTsKLSAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNsdWRp
bmcgdHJhaWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KLSAgICAgICAgLy8gSWYgdGhpcyBsZWF2
ZXMgYSBsaW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gQWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1lbWJl
ciBhcyB3ZWxsLgotICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChp
LmUuLCByZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgotICAgICAgICAv
LyBJLmUuLCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3
aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRo
IHRoZSBIVE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRl
cmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51
cmlMaXN0LnNpemUoKTsgLyoqLykgewotICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9kYXRh
T2JqZWN0LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNw
YWNlKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICBtX2RhdGFPYmplY3QtPnVyaUxpc3QucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgLy8gT25s
eSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCi0gICAgICAgICAgICBpZiAobV9kYXRhT2JqZWN0
LT51cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ly8gU2tpcCByZW1hcmtzLgotICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVS
TFN0cmluZywgbGluZSk7Ci0gICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1f
ZGF0YU9iamVjdC0+dXJsLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5pc0Vt
cHR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+ZG93bmxvYWRN
ZXRhZGF0YSA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBk
YXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVI
VE1MOgotICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gZGF0YTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAgICAgIC8v
IE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5
cGVzKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKLSAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNS
ZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVj
dCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVjdC0+Zmls
ZW5hbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7Ci0KLSAgICAv
LyBIYWNrIGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZHJvcCdz
IGRlZmF1bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGV4cG9zZSB0aGVt
IHRvIHRoZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBpZiAobV9kYXRh
T2JqZWN0LT51cmwuaXNWYWxpZCgpICYmICFtX2RhdGFPYmplY3QtPnVybC5pc0xvY2FsRmlsZSgp
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSk7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVj
dC0+dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIFVSSSBs
aXN0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub24tZmlsZSBVUkwuCi0gICAgICAgIGZvciAoVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0LmJl
Z2luKCk7Ci0gICAgICAgICAgICAgaXQgIT0gbV9kYXRhT2JqZWN0LT51cmlMaXN0LmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgICAgICBpZiAoIXByb3RvY29sSXMoKml0LCAiZmlsZSIpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIFVSSSBsaXN0IGlzIG5vdCBlbXB0
eSwgaXQgbWF5IG5vdCBhY3R1YWxseQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW4gYSB2YWxp
ZCBVUkwsIHNvIHdlIGNhbid0IHJldHVybiAiVVJMIiBoZXJlLgotICAgICAgICAgICAgICAgIHJl
c3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVjdC0+cGxh
aW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRzLmFkZCgiVGV4dCIpOwotICAgICAg
ICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRz
OwotfQotCi1QYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBj
b25zdAorUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gQ2xpcGJvYXJkQ2hyb21pdW06OmNy
ZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcsCisgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSkKIHsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCi0gICAgICAgIHJl
dHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2Rh
dGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6
Y3JlYXRlKCk7Ci0KLSAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNy
ZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKG1f
ZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmF0KGkpKSk7Ci0KLSAgICByZXR1cm4gZmlsZUxpc3QucmVs
ZWFzZSgpOworICAgIGlmIChwb2xpY3kgPT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JEcmFnZ2luZywgcG9saWN5
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShDaHJvbWl1bURh
dGFPYmplY3Q6OmNyZWF0ZShpc0ZvckRyYWdnaW5nKSwgaXNGb3JEcmFnZ2luZywgcG9saWN5KSk7
CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSog
aW1hZ2UsIE5vZGUqIG5vZGUsIGNvbnN0IEludFBvaW50JiBsb2MpCkBAIC0zOTcsMTUyICs4NSw0
IEBAIERyYWdJbWFnZVJlZiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlRHJhZ0ltYWdlKEludFBv
aW50JiBsb2MpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFN0cmluZyBp
bWFnZVRvTWFya3VwKGNvbnN0IFN0cmluZyYgdXJsLCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IFN0cmluZ0J1aWxkZXIgbWFya3VwOwotICAgIG1hcmt1cC5hcHBlbmQoIjxpbWcgc3JjPVwiIik7
Ci0gICAgbWFya3VwLmFwcGVuZCh1cmwpOwotICAgIG1hcmt1cC5hcHBlbmQoIlwiIik7Ci0gICAg
Ly8gQ29weSBvdmVyIGF0dHJpYnV0ZXMuICBJZiB3ZSBhcmUgZHJhZ2dpbmcgYW4gaW1hZ2UsIHdl
IGV4cGVjdCB0aGluZ3MgbGlrZQotICAgIC8vIHRoZSBpZCB0byBiZSBjb3BpZWQgYXMgd2VsbC4K
LSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0
dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIGlmIChhdHRyLT5sb2NhbE5hbWUoKSA9PSAic3JjIikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtYXJrdXAuYXBwZW5kKCIgIik7Ci0gICAg
ICAgIG1hcmt1cC5hcHBlbmQoYXR0ci0+bG9jYWxOYW1lKCkpOwotICAgICAgICBtYXJrdXAuYXBw
ZW5kKCI9XCIiKTsKLSAgICAgICAgU3RyaW5nIGVzY2FwZWRBdHRyID0gYXR0ci0+dmFsdWUoKTsK
LSAgICAgICAgZXNjYXBlZEF0dHIucmVwbGFjZSgiXCIiLCAiJnF1b3Q7Iik7Ci0gICAgICAgIG1h
cmt1cC5hcHBlbmQoZXNjYXBlZEF0dHIpOwotICAgICAgICBtYXJrdXAuYXBwZW5kKCJcIiIpOwot
ICAgIH0KLQotICAgIG1hcmt1cC5hcHBlbmQoIi8+Iik7Ci0gICAgcmV0dXJuIG1hcmt1cC50b1N0
cmluZygpOwotfQotCi1zdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgLy8gQXR0ZW1wdCB0byBwdWxsIENhY2hlZEltYWdlIGZyb20gZWxl
bWVudAotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJ
bWFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRv
UmVuZGVySW1hZ2UocmVuZGVyZXIpOwotICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAh
aW1hZ2UtPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIGlt
YWdlLT5jYWNoZWRJbWFnZSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdy
aXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVt
ZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgLy8gU2hvdmUgaW1hZ2UgZGF0YSBpbnRvIGEgRGF0YU9iamVjdCBm
b3IgdXNlIGFzIGEgZmlsZQotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hl
ZEltYWdlKGVsZW1lbnQpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5p
bWFnZSgpIHx8ICFjYWNoZWRJbWFnZS0+aXNMb2FkZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU2hhcmVkQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhY2hlZEltYWdlLT5pbWFnZSgpLT5kYXRh
KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZGF0YU9iamVjdC0+ZmlsZUNvbnRlbnQgPSBpbWFnZUJ1ZmZlcjsK
LQotICAgIC8vIERldGVybWluZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGNvbnRlbnRzIG9m
IHRoZSBpbWFnZS4gIFdlIHRyeSB0bwotICAgIC8vIHVzZSB0aGUgYWx0IHRhZyBpZiBvbmUgZXhp
c3RzLCBvdGhlcndpc2Ugd2UgZmFsbCBiYWNrIG9uIHRoZSBzdWdnZXN0ZWQKLSAgICAvLyBmaWxl
bmFtZSBpbiB0aGUgaHR0cCBoZWFkZXIsIGFuZCBmaW5hbGx5IHdlIHJlc29ydCB0byB1c2luZyB0
aGUgZmlsZW5hbWUKLSAgICAvLyBpbiB0aGUgVVJMLgotICAgIFN0cmluZyBleHRlbnNpb24gPSBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSgKLSAgICAg
ICAgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7Ci0gICAgZGF0YU9iamVjdC0+
ZmlsZUV4dGVuc2lvbiA9IGV4dGVuc2lvbi5pc0VtcHR5KCkgPyAiIiA6ICIuIiArIGV4dGVuc2lv
bjsKLSAgICBTdHJpbmcgdGl0bGUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWx0QXR0cik7Ci0g
ICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgdGl0bGUgPSBjYWNoZWRJbWFnZS0+cmVz
cG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwotCi0gICAgdGl0bGUgPSBDbGlwYm9hcmRDaHJv
bWl1bTo6dmFsaWRhdGVGaWxlTmFtZSh0aXRsZSwgZGF0YU9iamVjdCk7Ci0gICAgZGF0YU9iamVj
dC0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IHRpdGxlICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lv
bjsKLX0KLQotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwg
RnJhbWUqIGZyYW1lKQotewotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICBtX2RhdGFPYmplY3QtPnVybFRp
dGxlID0gdGl0bGU7Ci0KLSAgICAvLyBXcml0ZSB0aGUgYnl0ZXMgaW4gdGhlIGltYWdlIHRvIHRo
ZSBmaWxlIGZvcm1hdC4KLSAgICB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KG1fZGF0YU9iamVjdC5n
ZXQoKSwgZWxlbWVudCwgdXJsKTsKLQotICAgIEF0b21pY1N0cmluZyBpbWFnZVVSTCA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKLSAgICBpZiAoaW1hZ2VVUkwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgZnVsbFVSTCA9IGZyYW1lLT5kb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChkZXByZWNhdGVkUGFyc2VVUkwoaW1hZ2VVUkwpKTsKLSAgICBpZiAoZnVs
bFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFB1dCBpbWcgdGFnIG9u
IHRoZSBjbGlwYm9hcmQgcmVmZXJlbmNpbmcgdGhlIGltYWdlCi0gICAgbV9kYXRhT2JqZWN0LT50
ZXh0SHRtbCA9IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCk7Ci19Ci0KLXZvaWQgQ2xp
cGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0
aXRsZSwgRnJhbWUqKQotewotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmxUaXRs
ZSA9IHRpdGxlOwotCi0gICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIHBsYWluIHRl
eHQuCi0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSB1cmwuc3RyaW5nKCk7Ci0KLSAgICAv
LyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAgICBtX2Rh
dGFPYmplY3QtPnRleHRIdG1sID0gdXJsVG9NYXJrdXAodXJsLCB0aXRsZSk7Ci0gICAgbV9kYXRh
T2JqZWN0LT5odG1sQmFzZVVybCA9IHVybDsKLX0KLQotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6
d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFT
U0VSVChzZWxlY3RlZFJhbmdlKTsKLSAgICBpZiAoIW1fZGF0YU9iamVjdCkKLSAgICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBjcmVhdGVNYXJrdXAoc2VsZWN0
ZWRSYW5nZSwgMCwKLSAgICAgICAgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7Ci0gICAgbV9kYXRh
T2JqZWN0LT5odG1sQmFzZVVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKLQotICAgIFN0
cmluZyBzdHIgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7Ci0jaWYgT1MoV0lORE9XUykKLSAgICBy
ZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKLSNlbmRpZgotICAg
IHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQg
PSBzdHI7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCkKLXsKLSAgICBpZiAoIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU3RyaW5nIHN0ciA9IHRleHQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXBsYWNl
TmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKLSNlbmRpZgotICAgIHJlcGxh
Y2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBzdHI7
Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQotewotICAgIGlmICghbV9k
YXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9kYXRhT2Jq
ZWN0LT5oYXNEYXRhKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAppbmRleCBmYmViZGUyLi4wYzUy
ZTQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
CkBAIC0zNiw1NSArMzYsMjYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
Q2FjaGVkSW1hZ2U7Ci0gICAgY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwotICAgIGNsYXNzIElu
dFBvaW50OworY2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBJbnRQb2ludDsKIAotICAgIGNsYXNz
IENsaXBib2FyZENocm9taXVtIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5DbGlwYm9hcmRDaHJvbWl1bSgpIHt9
CitjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgfkNsaXBib2FyZENocm9taXVtKCkge30K
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAot
ICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xp
cGJvYXJkQ2hyb21pdW0+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcsIENsaXBib2FyZEFjY2Vz
c1BvbGljeSk7CiAKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIChub3QgaW5jbHVk
aW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMgYW55Ci0gICAgICAgIC8vIGludmFsaWQg
ZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJlIHRoZQotICAgICAg
ICAvLyBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdnZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBm
aWxlIHN5c3RlbS4KLSAgICAgICAgLy8gVGhpcyBtYXkgY2hhbmdlIHRoZSBmaWxlIGV4dGVuc2lv
biBpbiBkYXRhT2JqZWN0LgotICAgICAgICBzdGF0aWMgU3RyaW5nIHZhbGlkYXRlRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiB0aXRsZSwgQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KTsKKyAg
ICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CisgICAg
dm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICAgICAg
dm9pZCBjbGVhckFsbERhdGEoKTsKLSAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsKLSAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKyAgICB2aXJ0dWFsIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0OwogCi0gICAgICAg
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgQ2xpcGJvYXJkQ2hyb21pdW0oYm9vbCwg
Q2xpcGJvYXJkQWNjZXNzUG9saWN5KTsKKyAgICBDbGlwYm9hcmRDaHJvbWl1bShQYXNzUmVmUHRy
PENsaXBib2FyZERhdGE+LCBib29sLCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpOwogCi0gICAgICAg
IHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICAg
ICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwotCi0g
ICAgICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xv
YykgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Uo
RWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZy
YW1lKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBD
bGlwYm9hcmRDaHJvbWl1bShib29sLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENs
aXBib2FyZEFjY2Vzc1BvbGljeSk7Ci0KLSAgICAgICAgdm9pZCByZXNldEZyb21DbGlwYm9hcmQo
KTsKLSAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3Qg
SW50UG9pbnQmKTsKLSAgICAgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gbV9kYXRhT2Jq
ZWN0OwotICAgIH07CisgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwg
Y29uc3QgSW50UG9pbnQmKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhMmMyMS4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5o
IgotCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCi0KLSNpbmNsdWRlIDxzaGx3YXBp
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVj
aWZpZWQgY2hhcmFjdGVyIGlzIG5vdCB2YWxpZCBpbiBhIGZpbGUgbmFtZS4gVGhpcwotLy8gaXMg
aW50ZW5kZWQgZm9yIHVzZSB3aXRoIHJlbW92ZUNoYXJhY3RlcnMuCi1zdGF0aWMgYm9vbCBpc0lu
dmFsaWRGaWxlQ2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIChQYXRoR2V0Q2hhclR5
cGUoYykgJiAoR0NUX0xGTkNIQVIgfCBHQ1RfU0hPUlRDSEFSKSkgPT0gMDsKLX0KLQotU3RyaW5n
IENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUs
IENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCkKLXsKLSAgICAvLyBSZW1vdmUgYW55IGlu
dmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycy4KLSAgICBTdHJpbmcgcmVzdWx0ID0gdGl0bGUu
cmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7Ci0gICAgaWYgKHJlc3Vs
dC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAxID49IE1B
WF9QQVRIKSB7Ci0gICAgICAgIGlmIChkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgp
ICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24g
PSAiIjsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRl
bnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAgICAgICAgICAgcmVzdWx0ID0gcmVz
dWx0LnN1YnN0cmluZygwLCBNQVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVu
Z3RoKCkgLSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkVXRpbGl0aWVzQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGIwNjgwYWMuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
IAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXND
aHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIE9TKFdJTkRPV1MpCi12b2lkIHJlcGxh
Y2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmIHN0cikKLXsKLSAgICBz
dGF0aWMgY29uc3QgVUNoYXIgTmV3bGluZSA9ICdcbic7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IFdpbmRvd3NOZXdsaW5lKCJcclxuIik7Ci0gICAgc3RyLnJlcGxhY2UoTmV3bGluZSwg
V2luZG93c05ld2xpbmUpOwotfQotI2VuZGlmCi0KLXZvaWQgcmVwbGFjZU5CU1BXaXRoU3BhY2Uo
U3RyaW5nJiBzdHIpCi17Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyIE5vbkJyZWFraW5nU3BhY2VD
aGFyYWN0ZXIgPSAweEEwOwotICAgIHN0YXRpYyBjb25zdCBVQ2hhciBTcGFjZUNoYXJhY3RlciA9
ICcgJzsKLSAgICBzdHIucmVwbGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNo
YXJhY3Rlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxNDI4MC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
S1VSTDsKLWNsYXNzIFN0cmluZzsKLQotI2lmIE9TKFdJTkRPV1MpCi12b2lkIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmKTsKLSNlbmRpZgotdm9pZCByZXBs
YWNlTkJTUFdpdGhTcGFjZShTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggMmMy
MTUxYS4uOTlhMjlmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFn
RGF0YUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRh
Q2hyb21pdW0uY3BwCkBAIC00Myw2MCArNDMsNTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgYm9vbCBjb250YWluc0hUTUwoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0KiBkcm9w
RGF0YSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDbGlwYm9hcmREYXRhKiBkcm9w
RGF0YSkKIHsKLSAgICByZXR1cm4gZHJvcERhdGEtPnRleHRIdG1sLmxlbmd0aCgpID4gMDsKKyAg
ICByZXR1cm4gZHJvcERhdGEtPnR5cGVzKCkuY29udGFpbnMoInRleHQvaHRtbCIpOwogfQogCiBQ
YXNzUmVmUHRyPENsaXBib2FyZD4gRHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZChDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5KSBjb25zdAogewotICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1
bT4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVlLAotICAgICAgICBt
X3BsYXRmb3JtRHJhZ0RhdGEsIHBvbGljeSk7Ci0KLSAgICByZXR1cm4gY2xpcGJvYXJkLnJlbGVh
c2UoKTsKKyAgICBBU1NFUlQocG9saWN5ICE9IENsaXBib2FyZFdyaXRhYmxlKTsKKyAgICByZXR1
cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVlLCBwb2xpY3kpOwogfQogCiBib29sIERy
YWdEYXRhOjpjb250YWluc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xp
Y3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgp
OworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoInRleHQv
dXJpLWxpc3QiKQorICAgICAgICB8fCAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1l
cyAmJiBjb250YWluc0ZpbGVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVu
YW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QK
IHsKLSAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlk
VVJMKCkpCi0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKCkuc3RyaW5n
KCk7Ci0gICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAh
bV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOworICAgIFN0cmlu
ZyB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldFVSTCh0aXRsZSk7CisgICAgaWYgKCFLVVJM
KEtVUkwoKSwgdXJsKS5pc1ZhbGlkKCkgJiYgZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVu
YW1lcworICAgICAgICAmJiBjb250YWluc0ZpbGVzKCkpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVO
YW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlcygpWzBdOwogICAgICAgICBmaWxlTmFtZSA9
IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5hbWUpOwogICAgICAgICB1cmwg
PSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxlTmFtZSkuc3RyaW5nKCk7CisgICAg
ICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgIHRpdGxlLT50cnVuY2F0ZSgwKTsKICAgICB9Ci0g
Ci0gICAgLy8gfHRpdGxlfCBjYW4gYmUgTlVMTAotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRp
dGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZTsKICAgICByZXR1cm4gdXJsOwogfQog
CiBib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1f
cGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fcGxh
dGZvcm1EcmFnRGF0YS0+ZmlsZXMoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFz
RmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lc1tpXSk7
CisgICAgcmVzdWx0ID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlcygpOwogfQogCiBib29sIERy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRm
b3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcgRHJh
Z0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLT5wbGFpblRleHQ7CisgICAgYm9vbCBzdWNjZWVkZWQ7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS0+Z2V0RGF0YSgidGV4dC9wbGFpbiIsIHN1Y2NlZWRlZCk7CiB9CiAKIGJvb2wg
RHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdApAQCAtMTExLDggKzEwNyw3IEBAIGJvb2wg
RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2Vk
IHdoZW5ldmVyIHRoZSBkcmFnIGRhdGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8g
Q2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dp
bmcgYSBsaW5rCiAgICAgLy8gc2hvdWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRl
ZC4KLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQot
ICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIHJldHVy
biBjb250YWluc1BsYWluVGV4dCgpICYmICFjb250YWluc1VSTCgpOwogfQogCiBib29sIERyYWdE
YXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKQEAgLTE0NCw5ICsxMzksMTEg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1
bWVudCogZG9jKSBjb25zdAogICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQog
Ci0gICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRIdG1sLmlzRW1wdHkoKSkgeworICAg
IGlmIChjb250YWluc0hUTUwobV9wbGF0Zm9ybURyYWdEYXRhKSkgeworICAgICAgICBTdHJpbmcg
aHRtbEJhc2VVcmw7CisgICAgICAgIFN0cmluZyBodG1sVGV4dCA9IG1fcGxhdGZvcm1EcmFnRGF0
YS0+Z2V0SFRNTCgmaHRtbEJhc2VVcmwpOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLAotICAgICAgICAgICAg
bV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQmFz
ZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIGh0bWxUZXh0
LCBodG1sQmFzZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RHJhZ0RhdGFSZWYuaAppbmRleCBkZTFmYTFjLi5lOGQ3MjI4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnRGF0YVJlZi5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNpZm5kZWYgRHJhZ0Rh
dGFSZWZfaAogI2RlZmluZSBEcmFnRGF0YVJlZl9oCiAKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFP
YmplY3QuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgdHlwZWRlZiBDaHJvbWl1bURhdGFPYmplY3QqIERyYWdEYXRhUmVmOwordHlwZWRlZiBD
bGlwYm9hcmREYXRhKiBEcmFnRGF0YVJlZjsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5k
ZXggNjkwNDA1MC4uNTI0ZjNmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGFzdGVib2FyZENocm9taXVtLmNwcApAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmQuaCIKIAogI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiQ2xpcGJv
YXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC01Miw2ICs1Mywx
MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVEYXRh
KGNvbnN0IFBhc3NSZWZQdHI8Q2xpcGJvYXJkRGF0YT4mIGRhdGEpCit7CisgICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YShkYXRhKTsKK30KKwogUGFzdGVib2FyZCogUGFzdGVi
b2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQogewogICAgIHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0
ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Bhc3RlYm9hcmRQcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bh
c3RlYm9hcmRQcml2YXRlLmgKaW5kZXggOTVjYzY5Ny4uYmJkZDQwMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkUHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZFByaXZhdGUuaApAQCAtMzMsMTkgKzMzLDI4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhc3RlYm9hcmRQcml2YXRlCi0g
ICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBDbGlwYm9hcmRGb3JtYXQgewotICAgICAg
ICAgICAgSFRNTEZvcm1hdCwKLSAgICAgICAgICAgIEJvb2ttYXJrRm9ybWF0LAotICAgICAgICAg
ICAgV2ViU21hcnRQYXN0ZUZvcm1hdCwKLSAgICAgICAgfTsKLSAgICAgICAgZW51bSBDbGlwYm9h
cmRCdWZmZXIgewotICAgICAgICAgICAgU3RhbmRhcmRCdWZmZXIsCi0gICAgICAgICAgICBTZWxl
Y3Rpb25CdWZmZXIsCi0gICAgICAgIH07CitjbGFzcyBQYXN0ZWJvYXJkUHJpdmF0ZSB7CitwdWJs
aWM6CisgICAgZW51bSBDbGlwYm9hcmRGb3JtYXQgeworICAgICAgICBIVE1MRm9ybWF0LAorICAg
ICAgICBCb29rbWFya0Zvcm1hdCwKKyAgICAgICAgV2ViU21hcnRQYXN0ZUZvcm1hdCwKICAgICB9
OworICAgIGVudW0gQ2xpcGJvYXJkQnVmZmVyIHsKKyAgICAgICAgU3RhbmRhcmRCdWZmZXIsCisg
ICAgICAgIFNlbGVjdGlvbkJ1ZmZlciwKKyAgICB9OworfTsKKworLy8gVE9ETzogZmluZCB0aGUg
cmlnaHQgcGxhY2UgdG8gcHV0IHRoZXNlIGRlY2xhcmF0aW9ucworY2xhc3MgRGF0YVRyYW5zZmVy
UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBTb3VyY2UgeworICAgICAgICBDbGlwYm9hcmQs
CisgICAgICAgIFNlbGVjdGlvbiwKKyAgICAgICAgRHJhZywKKyAgICB9OworfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxMzFkZDQ5Li40Njk0YjQwIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNi0xMCAgRGFuaWVsIENoZW5nICA8ZGNo
ZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvciB0aGUgQ2xpcGJvYXJkIGNsYXNzIHRvIGFic3RyYWN0IG91dCBw
bGF0Zm9ybS1zcGVjaWZpYyBsb2dpYy4KKworICAgICAgICBDbGlwYm9hcmQgaXMgbm93IHNpbXBs
eSBhbiBhYnN0cmFjdCBsYXllciB0aGF0IGludGVyYWN0cyB3aXRoIENsaXBib2FyZERhdGEuCisg
ICAgICAgIENsaXBib2FyZERhdGEgaXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlIHRoYXQgcHJvdmlk
ZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgIGZvciB3cml0aW5nIGRhdGEgKHBs
YXRmb3JtLXNwZWNpZmljIGhhbmRsZXJzIGhhdmUgdG8gZmx1c2ggb3V0IHRoaXMgZGF0YSBsYXRl
ciksCisgICAgICAgIHdoaWxlIGVhY2ggcGxhdGZvcm0gYWxzbyBwcm92aWRlcyBpbXBsZW1lbnRh
dGlvbnMgb2YgQ2xpcGJvYXJkRGF0YSB0aGF0IGFsbG93CisgICAgICAgIHJlYWQgYWNjZXNzIHRv
IGNsaXBib2FyZC9kcmFnLWFuZC1kcm9wIGRhdGEuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDU1CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgor
ICAgICAgICAqIHB1YmxpYy9XZWJDbGlwYm9hcmQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRGF0
YVRyYW5zZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhVHJhbnNmZXI6Oik6
CisgICAgICAgICogcHVibGljL1dlYkRyYWdEYXRhLmg6CisgICAgICAgICogcHVibGljL1dlYktp
dENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJLaXRDbGllbnQ6OmRhdGFUcmFuc2Zlckdl
dFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xpZW50OjpkYXRhVHJhbnNmZXJHZXRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xpZW50OjpkYXRhVHJhbnNmZXJHZXRGaWxl
bmFtZXMpOgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL0Nocm9t
aXVtQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRXcml0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFUcmFu
c2ZlckdldFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhVHJh
bnNmZXJHZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhVHJh
bnNmZXJHZXRGaWxlbmFtZXMpOgorICAgICAgICAqIHNyYy9EcmFnQ2xpZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnRJbXBsOjpzdGFydERyYWcpOgorICAgICAgICAqIHNy
Yy9XZWJCaW5kaW5ncy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmdldERyYWdEYXRhSW1wbCk6Cisg
ICAgICAgICogc3JjL1dlYkRyYWdEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Rh
dGE6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aW5pdGlhbGl6
ZUZvclBsYXRmb3JtRHJhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpjb252ZXJ0
RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjp1cmxUaXRsZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1sQmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpm
aWxlQ29udGVudE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6V2ViRHJhZ0Rh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6Om9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpD
bGlwYm9hcmREYXRhPik6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcmFnRW50ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEw
LTA2LTEwICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDllN2UzMzkuLmQw
OTU2NTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMDUsNiArMTA1LDcgQEAKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkRhdGFiYXNlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGF0
YWJhc2VPYnNlcnZlci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRhdGFTb3VyY2Uu
aCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhVHJhbnNmZXIuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJEZXZUb29sc0FnZW50LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkRldlRvb2xzRnJvbnRlbmQuaCcsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNsaXBib2FyZC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQu
aAppbmRleCA2OGUyMmI1Li4zYzFiYmU2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNsaXBib2FyZC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJv
YXJkLmgKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdl
YkRyYWdEYXRhOwogY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJV
Ukw7CkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViVVJMJiwgY29u
c3QgV2ViU3RyaW5nJiB0aXRsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUltYWdlKAog
ICAgICAgICBjb25zdCBXZWJJbWFnZSYsIGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYlN0cmluZyYg
dGl0bGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVEYXRhKGNvbnN0IFdlYkRyYWdEYXRh
JiBkYXRhKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB+V2ViQ2xpcGJvYXJkKCkge30KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YVRyYW5zZmVyLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRhdGFUcmFuc2Zlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ0OWM4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRhdGFUcmFuc2Zlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRhdGFU
cmFuc2Zlcl9oCisjZGVmaW5lIFdlYkRhdGFUcmFuc2Zlcl9oCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJEYXRhVHJhbnNmZXIgeworcHVibGljOgorICAgIGVudW0gU291cmNlIHsK
KyAgICAgICAgQ2xpcGJvYXJkLAorICAgICAgICBTZWxlY3Rpb24sCisgICAgICAgIERyYWcsCisg
ICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJEcmFnRGF0YS5oCmluZGV4IDI5Nzk1MTkuLmFjYjgxOGYgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkRyYWdEYXRhLmgKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJD
b21tb24uaCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7IH0KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3Mg
Q2xpcGJvYXJkRGF0YTsgfQogbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBQYXNzUmVmUHRyOyB9CiAjZW5kaWYKIApAQCAtNDMsNyArNDMsNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIFdlYkRhdGE7CiBjbGFzcyBXZWJEcmFnRGF0YVByaXZhdGU7CiBjbGFz
cyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
V2ViVmVjdG9yOwogCiAvLyBIb2xkcyBkYXRhIHRoYXQgbWF5IGJlIGV4Y2hhbmdlZCB0aHJvdWdo
IGEgZHJhZy1uLWRyb3Agb3BlcmF0aW9uLiAgSXQgaXMKQEAgLTYwLDUzICs1OSwyOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKKyAgICAvLyBUaGlzIGlzIHVzZWQg
YnkgRXZlbnRTZW5kZXIgZm9yIGxheW91dCB0ZXN0cy4KICAgICBXRUJLSVRfQVBJIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIFdFQktJVF9BUEkgdm9pZCBpbml0aWFsaXplRm9yUGxhdGZvcm1EcmFn
KCk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIGFz
c2lnbihjb25zdCBXZWJEcmFnRGF0YSYpOwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJl
dHVybiAhbV9wcml2YXRlOyB9CiAKLSAgICBXRUJLSVRfQVBJIFdlYlVSTCB1cmwoKSBjb25zdDsK
LSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0VVJMKGNvbnN0IFdlYlVSTCYpOwotCisgICAgV0VCS0lU
X0FQSSB2b2lkIGNvbnZlcnREYXRhKFdlYlZlY3RvcjxXZWJTdHJpbmc+KiB0eXBlcywgV2ViVmVj
dG9yPFdlYlN0cmluZz4qIGRhdHVtKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyB1
cmxUaXRsZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRVUkxUaXRsZShjb25zdCBX
ZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGRvd25sb2FkTWV0YWRhdGEo
KSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RG93bmxvYWRNZXRhZGF0YShjb25zdCBX
ZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBj
b25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJTdHJp
bmcmKTsKLQotICAgIFdFQktJVF9BUEkgYm9vbCBoYXNGaWxlTmFtZXMoKSBjb25zdDsKLSAgICBX
RUJLSVRfQVBJIHZvaWQgZmlsZU5hbWVzKFdlYlZlY3RvcjxXZWJTdHJpbmc+JikgY29uc3Q7Ci0g
ICAgV0VCS0lUX0FQSSB2b2lkIHNldEZpbGVOYW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYpOwotICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJp
bmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHBsYWluVGV4dCgpIGNvbnN0OwotICAg
IFdFQktJVF9BUEkgdm9pZCBzZXRQbGFpblRleHQoY29uc3QgV2ViU3RyaW5nJik7Ci0KLSAgICBX
RUJLSVRfQVBJIFdlYlN0cmluZyBodG1sVGV4dCgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9p
ZCBzZXRIVE1MVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViVVJM
IGh0bWxCYXNlVVJMKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldEhUTUxCYXNlVVJM
KGNvbnN0IFdlYlVSTCYpOwotCi0gICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgZmlsZUNvbnRlbnRG
aWxlTmFtZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVO
YW1lKGNvbnN0IFdlYlN0cmluZyYpOwotCisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgaHRtbEJh
c2VVUkwoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYkRhdGEgZmlsZUNvbnRlbnQoKSBjb25z
dDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RmlsZUNvbnRlbnQoY29uc3QgV2ViRGF0YSYpOwor
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGZpbGVDb250ZW50TmFtZSgpIGNvbnN0OwogCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2ViRHJhZ0RhdGEoY29uc3QgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4mKTsKLSAgICBXZWJEcmFnRGF0YSYgb3Bl
cmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+
Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdD4oKSBjb25zdDsKKyAgICBXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q2xpcGJvYXJkRGF0YT4mKTsKKyAgICBXZWJEcmFnRGF0YSYgb3BlcmF0b3I9KGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDbGlwYm9hcmREYXRhPiYpOworICAgIG9wZXJhdG9y
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDbGlwYm9hcmREYXRhPigpIGNvbnN0OwogI2VuZGlm
CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhc3NpZ24oV2ViRHJhZ0RhdGFQcml2YXRlKik7Ci0gICAg
dm9pZCBlbnN1cmVNdXRhYmxlKCk7CiAgICAgV2ViRHJhZ0RhdGFQcml2YXRlKiBtX3ByaXZhdGU7
CiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5o
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAppbmRleCBkMWRhODgzLi5k
Yzg3MGU1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKQEAgLTMzLDkgKzMz
LDExIEBACiAKICNpbmNsdWRlICJXZWJDb21tb24uaCIKICNpbmNsdWRlICJXZWJEYXRhLmgiCisj
aW5jbHVkZSAiV2ViRGF0YVRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiV2ViTG9jYWxpemVkU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVk
ZSAiV2ViVmVjdG9yLmgiCiAKICNpbmNsdWRlIDx0aW1lLmg+CiAKQEAgLTgzLDYgKzg1LDEwIEBA
IHB1YmxpYzoKICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVK
YXIqIGNvb2tpZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIERhdGEgdHJhbnNmZXIgaW50
ZXJmYWNlcyBmb3IgY2xpcGJvYXJkIGFuZCBkcmFnZ2luZyAtLS0tLS0tLS0tCisgICAgdmlydHVh
bCBXZWJWZWN0b3I8V2ViU3RyaW5nPiBkYXRhVHJhbnNmZXJHZXRUeXBlcyhXZWJEYXRhVHJhbnNm
ZXI6OlNvdXJjZSBzb3VyY2UpIHsgcmV0dXJuIFdlYlZlY3RvcjxXZWJTdHJpbmc+KCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZGF0YVRyYW5zZmVyR2V0RGF0YShXZWJEYXRhVHJhbnNmZXI6OlNvdXJj
ZSBzb3VyY2UsIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgV2ViU3RyaW5nKiBkYXRhLCBXZWJTdHJp
bmcqIG1ldGFkYXRhKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgV2ViVmVjdG9yPFdl
YlN0cmluZz4gZGF0YVRyYW5zZmVyR2V0RmlsZW5hbWVzKFdlYkRhdGFUcmFuc2Zlcjo6U291cmNl
IHNvdXJjZSkgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsgfQogCiAgICAgLy8gRE9N
IFN0b3JhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRleCA5MDU0ZDhjLi4xNzNkNDczIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtMTgwLDcgKzE4MCw3IEBAIHB1YmxpYzoKICAgICAv
LyBDYWxsYmFjayBtZXRob2RzIHdoZW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbiBpcyB0cnlp
bmcgdG8gZHJvcAogICAgIC8vIHNvbWV0aGluZyBvbiB0aGUgV2ViVmlldy4KICAgICB2aXJ0dWFs
IFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdFbnRlcigKLSAgICAgICAgY29uc3QgV2Vi
RHJhZ0RhdGEmLCBpbnQgaWRlbnRpdHksCisgICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiB3ZWJE
cmFnRGF0YSwgaW50IGlkZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9p
bnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CiAgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0
aW9uIGRyYWdUYXJnZXREcmFnT3ZlcigKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5j
cHAKaW5kZXggM2I4ZTVmYS4uZjhlMDZhZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJy
aWRnZS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJXZWJDb29raWVKYXIuaCIKICNp
bmNsdWRlICJXZWJDdXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUg
IldlYkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIldl
YkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCkBAIC0xOTgsNiArMTk5
LDQzIEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1h
Z2VQdHIgaW1hZ2UsCiAgICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdl
KHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxlKTsKIH0KIAordm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFBhc3NSZWZQdHI8Q2xpcGJvYXJkRGF0YT4mIGRhdGEp
Cit7CisgICAgV2ViS2l0OjpXZWJEcmFnRGF0YSBkcmFnRGF0YSA9IGRhdGE7CisgICAgd2ViS2l0
Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZURhdGEoZHJhZ0RhdGEpOworfQorCisvLyBEYXRh
IHRyYW5zZmVyIGludGVyZmFjZXMgZm9yIGNsaXBib2FyZCBhbmQgZHJhZ2dpbmcgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmRhdGFUcmFu
c2ZlckdldFR5cGVzKERhdGFUcmFuc2ZlclByaXZhdGU6OlNvdXJjZSBzb3VyY2UpCit7CisgICAg
V2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmRhdGFUcmFuc2Zl
ckdldFR5cGVzKHN0YXRpY19jYXN0PFdlYkRhdGFUcmFuc2Zlcjo6U291cmNlPihzb3VyY2UpKTsK
KyAgICBIYXNoU2V0PFN0cmluZz4gY29udmVydGVkUmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICBjb252ZXJ0ZWRSZXN1bHQuYWRk
KHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIGNvbnZlcnRlZFJlc3VsdDsKK30KKworYm9vbCBDaHJv
bWl1bUJyaWRnZTo6ZGF0YVRyYW5zZmVyR2V0RGF0YShEYXRhVHJhbnNmZXJQcml2YXRlOjpTb3Vy
Y2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRh
ZGF0YSkKK3sKKyAgICBXZWJLaXQ6OldlYlN0cmluZyByZXN1bHREYXRhOworICAgIFdlYktpdDo6
V2ViU3RyaW5nIHJlc3VsdE1ldGFkYXRhOworICAgIGJvb2wgc3VjY2VlZGVkID0gd2ViS2l0Q2xp
ZW50KCktPmRhdGFUcmFuc2ZlckdldERhdGEoc3RhdGljX2Nhc3Q8V2ViRGF0YVRyYW5zZmVyOjpT
b3VyY2U+KHNvdXJjZSksIHR5cGUsICZyZXN1bHREYXRhLCAmcmVzdWx0TWV0YWRhdGEpOworICAg
IGlmIChzdWNjZWVkZWQpIHsKKyAgICAgICAgZGF0YSA9IHJlc3VsdERhdGE7CisgICAgICAgIG1l
dGFkYXRhID0gcmVzdWx0TWV0YWRhdGE7CisgICAgfQorICAgIHJldHVybiBzdWNjZWVkZWQ7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpkYXRhVHJhbnNmZXJHZXRGaWxlbmFt
ZXMoRGF0YVRyYW5zZmVyUHJpdmF0ZTo6U291cmNlIHNvdXJjZSkKK3sKKyAgICBXZWJWZWN0b3I8
V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRDbGllbnQoKS0+ZGF0YVRyYW5zZmVyR2V0RmlsZW5h
bWVzKHN0YXRpY19jYXN0PFdlYkRhdGFUcmFuc2Zlcjo6U291cmNlPihzb3VyY2UpKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBjb252ZXJ0ZWRSZXN1bHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZXN1bHQuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5hcHBlbmQocmVz
dWx0W2ldKTsKKyAgICByZXR1cm4gY29udmVydGVkUmVzdWx0OworfQorCiAvLyBDb29raWVzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldENvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0RyYWdDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRHJhZ0NsaWVu
dEltcGwuY3BwCmluZGV4IDk4NzQ0MDEuLmNiNDY1ZDUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvRHJhZ0NsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRHJh
Z0NsaWVudEltcGwuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgRHJhZ0NsaWVudEltcGw6OnN0
YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLAogICAgIC8vIEFkZCBhIHJlZiB0byB0aGUg
ZnJhbWUganVzdCBpbiBjYXNlIGEgbG9hZCBvY2N1cnMgbWlkLWRyYWcuCiAgICAgUmVmUHRyPEZy
YW1lPiBmcmFtZVByb3RlY3RvciA9IGZyYW1lOwogCi0gICAgV2ViRHJhZ0RhdGEgZHJhZ0RhdGEg
PSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRDaHJvbWl1bSo+KGNsaXBib2FyZCktPmRhdGFPYmplY3Qo
KTsKKyAgICBXZWJEcmFnRGF0YSBkcmFnRGF0YSA9IGNsaXBib2FyZC0+ZGF0YSgpOwogCiAgICAg
RHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uTWFzayA9IGNsaXBib2FyZC0+c291cmNlT3BlcmF0
aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmluZGluZ3MuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKaW5kZXggMmIyMGMwYS4uZDdm
YmJlYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKQEAgLTM1LDggKzM1LDcgQEAK
ICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogCiAjaWYgVVNFKFY4KQotI2luY2x1ZGUgIkNo
cm9taXVtRGF0YU9iamVjdC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCisjaW5j
bHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJOUFY4T2JqZWN0LmgiICAvLyBmb3IgUHJpdmF0ZUlkZW50
aWZpZXIKQEAgLTI2OCwxMiArMjY3LDEzIEBAIHN0YXRpYyBib29sIGdldERyYWdEYXRhSW1wbChO
UE9iamVjdCogbnBvYmosIGludCogZXZlbnRJZCwgV2ViRHJhZ0RhdGEqIGRhdGEpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFuZCB0aGF0IGNsaXBib2FyZCBzaG91bGQgYmUgYWNj
ZXNzaWJsZSBieSBXZWJLaXQgcG9saWN5LgotICAgIENsaXBib2FyZENocm9taXVtKiBjaHJvbWUg
PSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRDaHJvbWl1bSo+KGNsaXBib2FyZCk7Ci0gICAgSGFzaFNl
dDxTdHJpbmc+IGFjY2Vzc2libGUoY2hyb21lLT50eXBlcygpKTsKKyAgICAvLyBUT0RPKGRjaGVu
Zyk6IGlzIHRoaXMgcmVhbGx5IHRoZSByaWdodCB3YXkgdG8gZG8gaXQ/IFNob3VsZG4ndCB3ZSBq
dXN0CisgICAgLy8gY2hlY2sgY2xpcGJvYXJkLT5wb2xpY3kgZGlyZWN0bHk/CisgICAgSGFzaFNl
dDxTdHJpbmc+IGFjY2Vzc2libGUoY2xpcGJvYXJkLT50eXBlcygpKTsKICAgICBpZiAoYWNjZXNz
aWJsZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QoY2hyb21lLT5kYXRhT2JqZWN0KCkpOworICAgIFJl
ZlB0cjxDbGlwYm9hcmREYXRhPiBkYXRhT2JqZWN0KGNsaXBib2FyZC0+ZGF0YSgpKTsKICAgICBp
ZiAoZGF0YU9iamVjdCAmJiBkYXRhKQogICAgICAgICAqZGF0YSA9IFdlYkRyYWdEYXRhKGRhdGFP
YmplY3QpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IDY0M2MzNWQuLjhk
NDc4NTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC0zMiwyMyArMzIsMzAg
QEAKICNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiV2ViRGF0YS5oIgogI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIFdlYkRyYWdEYXRhUHJpdmF0ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3Qg
eworY2xhc3MgV2ViRHJhZ0RhdGFQcml2YXRlIDogcHVibGljIENsaXBib2FyZERhdGEgewogfTsK
IAogdm9pZCBXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgYXNzaWduKHN0YXRpY19j
YXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCkucmVs
ZWFzZVJlZigpKSk7CisgICAgLy8gVE9ETyhkY2hlbmcpOiBNYXliZSB3ZSBzaG91bGQgaW5qZWN0
IGEgbW9jayBoZXJlIGluc3RlYWQgb2YgZGlyZWN0bHkgZXhwb3NpbmcgdGhlIHdyaXRhYmxlIGNs
aXBib2FyZCBvYmplY3Q/CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0
ZSo+KFdyaXRhYmxlQ2xpcGJvYXJkRGF0YTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKSk7Cit9CisK
K3ZvaWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemVGb3JQbGF0Zm9ybURyYWcoKQoreworICAgIGFz
c2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1bURhdGFPYmplY3Q6
OmNyZWF0ZSh0cnVlKS5yZWxlYXNlUmVmKCkpKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6cmVz
ZXQoKQpAQCAtNjQsMTUzICs3MSw1OSBAQCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oY29uc3Qg
V2ViRHJhZ0RhdGEmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAotV2ViVVJMIFdlYkRyYWdE
YXRhOjp1cmwoKSBjb25zdAordm9pZCBXZWJEcmFnRGF0YTo6Y29udmVydERhdGEoV2ViVmVjdG9y
PFdlYlN0cmluZz4qIHR5cGVzLCBXZWJWZWN0b3I8V2ViU3RyaW5nPiogZGF0dW0pIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VVJMKCk7
Ci19CisgICAgQVNTRVJUKHR5cGVzKTsKKyAgICBBU1NFUlQoZGF0dW0pOwogCi12b2lkIFdlYkRy
YWdEYXRhOjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgp
OwotICAgIG1fcHJpdmF0ZS0+c2V0VVJMKHVybCk7Ci19CisgICAgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4gdHlwZXNMaXN0KHN0YXRpY19jYXN0PHNpemVfdD4obV9wcml2YXRlLT5kYXRhKCkuc2l6ZSgp
KSk7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gZGF0dW1MaXN0KHN0YXRpY19jYXN0PHNpemVf
dD4obV9wcml2YXRlLT5kYXRhKCkuc2l6ZSgpKSk7CisgICAgaW50IGkgPSAwOworICAgIGZvciAo
V1RGOjpIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3ByaXZh
dGUtPmRhdGEoKS5iZWdpbigpOworICAgICAgICBpdCAhPSBtX3ByaXZhdGUtPmRhdGEoKS5lbmQo
KTsgKytpdCkgeworICAgICAgICB0eXBlc0xpc3RbaV0gPSBpdC0+Zmlyc3Q7CisgICAgICAgIGRh
dHVtTGlzdFtpXSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICsraTsKKyAgICB9CiAKLVdlYlN0cmlu
ZyBXZWJEcmFnRGF0YTo6dXJsVGl0bGUoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotICAgIHJldHVybiBtX3ByaXZhdGUtPnVybFRpdGxlOwotfQotCi12b2lkIFdlYkRyYWdEYXRh
OjpzZXRVUkxUaXRsZShjb25zdCBXZWJTdHJpbmcmIHVybFRpdGxlKQotewotICAgIGVuc3VyZU11
dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnVybFRpdGxlID0gdXJsVGl0bGU7Ci19Ci0KLVdlYlN0
cmluZyBXZWJEcmFnRGF0YTo6ZG93bmxvYWRNZXRhZGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZG93bmxvYWRNZXRhZGF0YTsKLX0K
LQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0RG93bmxvYWRNZXRhZGF0YShjb25zdCBXZWJTdHJpbmcm
IGRvd25sb2FkTWV0YWRhdGEpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZG93bmxvYWRNZXRhZGF0YSA9IGRvd25sb2FkTWV0YWRhdGE7Ci19Ci0KLVdlYlN0cmluZyBX
ZWJEcmFnRGF0YTo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwo
KSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbjsKLX0KLQotdm9pZCBXZWJE
cmFnRGF0YTo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24p
Ci17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbiA9
IGZpbGVFeHRlbnNpb247Ci19Ci0KLWJvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVOYW1lcygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuICFtX3ByaXZhdGUtPmZp
bGVuYW1lcy5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyhXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxs
KCkpOwotICAgIGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzOworICAgIHR5cGVzLT5z
d2FwKHR5cGVzTGlzdCk7CisgICAgZGF0dW0tPnN3YXAoZGF0dW1MaXN0KTsKIH0KIAotdm9pZCBX
ZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVzKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxl
TmFtZXMpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZW5hbWVz
LmNsZWFyKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlbmFtZXMuYXBwZW5kKGZpbGVOYW1lcy5kYXRh
KCksIGZpbGVOYW1lcy5zaXplKCkpOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjphcHBlbmRUb0Zp
bGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIGVuc3VyZU11dGFibGUo
KTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWUpOwotfQotCi1XZWJT
dHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhaW5UZXh0OwotfQotCi12b2lkIFdlYkRy
YWdEYXRhOjpzZXRQbGFpblRleHQoY29uc3QgV2ViU3RyaW5nJiBwbGFpblRleHQpCi17Ci0gICAg
ZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+cGxhaW5UZXh0ID0gcGxhaW5UZXh0Owot
fQotCi1XZWJTdHJpbmcgV2ViRHJhZ0RhdGE6Omh0bWxUZXh0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50ZXh0SHRtbDsKLX0KLQotdm9p
ZCBXZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQoY29uc3QgV2ViU3RyaW5nJiBodG1sVGV4dCkKLXsK
LSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT50ZXh0SHRtbCA9IGh0bWxUZXh0
OwotfQotCi1XZWJVUkwgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsKLX0K
LQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTEJhc2VVUkwoY29uc3QgV2ViVVJMJiBodG1sQmFz
ZVVSTCkKLXsKLSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5odG1sQmFzZVVy
bCA9IGh0bWxCYXNlVVJMOwotfQotCi1XZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50
RmlsZU5hbWUoKSBjb25zdAorV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmxUaXRsZSgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNv
bnRlbnRGaWxlbmFtZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT51cmxUaXRsZSgpOwogfQogCi12
b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVOYW1lKGNvbnN0IFdlYlN0cmluZyYg
ZmlsZU5hbWUpCitXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKIHsK
LSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1l
ID0gZmlsZU5hbWU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aHRtbEJhc2VVUkwoKTsKIH0KIAog
V2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAogewotICAgIEFTU0VSVCgh
aXNOdWxsKCkpOwotICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVDb250ZW50KCk7CiB9CiAKLXZvaWQgV2ViRHJhZ0Rh
dGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEmIGZpbGVDb250ZW50KQorV2ViU3RyaW5n
IFdlYkRyYWdEYXRhOjpmaWxlQ29udGVudE5hbWUoKSBjb25zdAogewotICAgIGVuc3VyZU11dGFi
bGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnROYW1lKCk7CiB9CiAKLVdlYkRyYWdEYXRhOjpXZWJE
cmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
PiYgZGF0YSkKK1dlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6Q2xpcGJvYXJkRGF0YT4mIGRhdGEpCiAgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nh
c3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oZGF0YS5yZWxlYXNlUmVmKCkpKQogewogfQogCi1XZWJE
cmFnRGF0YSYgV2ViRHJhZ0RhdGE6Om9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkKK1dlYkRyYWdEYXRhJiBXZWJEcmFnRGF0
YTo6b3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDbGlwYm9hcmREYXRh
PiYgZGF0YSkKIHsKICAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4o
ZGF0YS5yZWxlYXNlUmVmKCkpKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVdlYkRyYWdEYXRh
OjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Pigp
IGNvbnN0CitXZWJEcmFnRGF0YTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNs
aXBib2FyZERhdGE+KCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+KGNvbnN0X2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4obV9wcml2YXRlKSk7Cisg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8Q2xpcGJvYXJkRGF0YT4oY29uc3RfY2FzdDxXZWJEcmFnRGF0
YVByaXZhdGUqPihtX3ByaXZhdGUpKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKFdl
YkRyYWdEYXRhUHJpdmF0ZSogcCkKQEAgLTIyMSwxMSArMTM0LDQgQEAgdm9pZCBXZWJEcmFnRGF0
YTo6YXNzaWduKFdlYkRyYWdEYXRhUHJpdmF0ZSogcCkKICAgICBtX3ByaXZhdGUgPSBwOwogfQog
Ci12b2lkIFdlYkRyYWdEYXRhOjplbnN1cmVNdXRhYmxlKCkKLXsKLSAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+aGFzT25lUmVmKCkpCi0gICAgICAgIGFzc2lnbihz
dGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihtX3ByaXZhdGUtPmNvcHkoKS5yZWxlYXNl
UmVmKCkpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKaW5kZXggYmIxZjZjZS4uZDM5OGM0ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcApAQCAtNzMsNyArNzMsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXND
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNv
bnNvbGUuaCIKICNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDViNTI4NjcuLmNm
YjI2MzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNTk3LDcgKzE1OTcs
OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCkKIH0KIAog
V2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigKLSAgICBj
b25zdCBXZWJEcmFnRGF0YSYgd2ViRHJhZ0RhdGEsIGludCBpZGVudGl0eSwKKyAgICBjb25zdCBX
ZWJEcmFnRGF0YSYgd2ViRHJhZ0RhdGEsCisgICAgaW50IGlkZW50aXR5LAogICAgIGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAg
ICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCmluZGV4IDZhMDc5OGUuLjVhODkyNzkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CitjbGFzcyBD
bGlwYm9hcmREYXRhOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIaXN0b3J5SXRlbTsKIGNsYXNzIEhp
dFRlc3RSZXN1bHQ7CkBAIC0xMzgsNyArMTM4LDggQEAgcHVibGljOgogICAgICAgICBXZWJEcmFn
T3BlcmF0aW9uIG9wZXJhdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGRyYWdTb3VyY2VTeXN0ZW1E
cmFnRW5kZWQoKTsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdF
bnRlcigKLSAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRhLCBpbnQgaWRlbnRpdHks
CisgICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiB3ZWJEcmFnRGF0YSwKKyAgICAgICAgaW50IGlk
ZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNv
bnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNr
IG9wZXJhdGlvbnNBbGxvd2VkKTsKQEAgLTI3Niw2ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFdlYk5hdmlnYXRpb25Qb2xpY3kqKTsKIAogICAgIC8vIFN0YXJ0IGEgc3lzdGVtIGRyYWcgYW5k
IGRyb3Agb3BlcmF0aW9uLgorICAgIC8vIFRPRE8oZGNoZW5nKTogVGhlIGN1cnJlbnQgZHJhZyBk
YXRhIHBhcmFtZXRlciBuZWVkcyB0byBjaGFuZ2UuCiAgICAgdm9pZCBzdGFydERyYWdnaW5nKAog
ICAgICAgICBjb25zdCBXZWJEcmFnRGF0YSYgZHJhZ0RhdGEsCiAgICAgICAgIFdlYkRyYWdPcGVy
YXRpb25zTWFzayBtYXNrLApAQCAtMzk5LDggKzQwMSw4IEBAIHByaXZhdGU6CiAgICAgLy8gaXMg
Y2FsbGVkLgogICAgIE93blB0cjxXZWJTZXR0aW5nc0ltcGw+IG1fd2ViU2V0dGluZ3M7CiAKLSAg
ICAvLyBBIGNvcHkgb2YgdGhlIHdlYiBkcm9wIGRhdGEgb2JqZWN0IHdlIHJlY2VpdmVkIGZyb20g
dGhlIGJyb3dzZXIuCi0gICAgUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4gbV9j
dXJyZW50RHJhZ0RhdGE7CisgICAgLy8gQSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZHJhZyBk
YXRhLgorICAgIFJlZlB0cjxXZWJDb3JlOjpDbGlwYm9hcmREYXRhPiBtX2N1cnJlbnREcmFnRGF0
YTsKIAogICAgIC8vIFRoZSBwb2ludCByZWxhdGl2ZSB0byB0aGUgY2xpZW50IGFyZWEgd2hlcmUg
dGhlIG1vdXNlIHdhcyBsYXN0IHByZXNzZWQKICAgICAvLyBkb3duLiBUaGlzIGlzIHVzZWQgYnkg
dGhlIGRyYWcgY2xpZW50IHRvIGRldGVybWluZSB3aGF0IHdhcyB1bmRlciB0aGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>