<?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>114378</bug_id>
          
          <creation_ts>2013-04-10 13:35:45 -0700</creation_ts>
          <short_desc>[CSS Filters] Move all the FilterOperation classes to rendering/style folder</short_desc>
          <delta_ts>2014-03-02 09:04:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>68469</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>krit</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>873203</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-10 13:35:45 -0700</bug_when>
    <thetext>FilterOperation classes are CSS/Rendering/Style structures and should be part of the WebCore style folder. There are already a couple of layering violations in the ReferenceFilterOperation and moving to rendering/style would fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873248</commentid>
    <comment_count>1</comment_count>
      <attachid>197407</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-10 14:37:19 -0700</bug_when>
    <thetext>Created attachment 197407
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873250</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-10 14:41:17 -0700</bug_when>
    <thetext>Attachment 197407 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterOperation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterOperation.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterOperation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterOperation.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterOperations.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterOperations.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/ValidatedCustomFilterOperation.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/ValidatedCustomFilterOperation.h&apos;, u&apos;Source/WebCore/rendering/style/CustomFilterOperation.cpp&apos;, u&apos;Source/WebCore/rendering/style/CustomFilterOperation.h&apos;, u&apos;Source/WebCore/rendering/style/FilterOperation.cpp&apos;, u&apos;Source/WebCore/rendering/style/FilterOperation.h&apos;, u&apos;Source/WebCore/rendering/style/FilterOperations.cpp&apos;, u&apos;Source/WebCore/rendering/style/FilterOperations.h&apos;, u&apos;Source/WebCore/rendering/style/ValidatedCustomFilterOperation.cpp&apos;, u&apos;Source/WebCore/rendering/style/ValidatedCustomFilterOperation.h&apos;]&quot; exit_code: 1
Source/WebCore/rendering/style/FilterOperation.h:64:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:65:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:66:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:67:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:68:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:69:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:70:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:71:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:72:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:73:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:74:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:76:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:77:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:79:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Source/WebCore/rendering/style/FilterOperation.h:80:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 15 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873253</commentid>
    <comment_count>3</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-04-10 14:44:22 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 197407 [details] did not pass style-queue:

We need a different bug to fix the style issue of the filter operations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873276</commentid>
    <comment_count>4</comment_count>
      <attachid>197407</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-04-10 15:40:06 -0700</bug_when>
    <thetext>Comment on attachment 197407
Patch V1

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        for the -webkit-filter CSS property. ReferenceFilterOperation already had references to WebCore
&gt; +        structures, so this patch will also fix that layering violation.

But existing platform/ code references these classes, e.g. platform/graphics/GraphicsLayer.h includes FilterOperation.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962309</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-12-22 03:07:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 197407 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=197407&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        for the -webkit-filter CSS property. ReferenceFilterOperation already had references to WebCore
&gt; &gt; +        structures, so this patch will also fix that layering violation.
&gt; 
&gt; But existing platform/ code references these classes, e.g. platform/graphics/GraphicsLayer.h includes FilterOperation.h

This is correct. I think it would be a cleaner solution to have an light-weighted filter representation in WebCore that creates a platform dependent filter representation in platform that can then be used by GraphicsLayer.h and others. The code as is right now is confusing and has a lot of cutting points with WebCore already.

I would like the platform representation not be aware of any SVG or CSS filters but pure filter primitive chains, serialized as much as possible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197407</attachid>
            <date>2013-04-10 14:37:19 -0700</date>
            <delta_ts>2013-04-10 15:40:06 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug114378_v1.patch</filename>
            <type>text/plain</type>
            <size>130977</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNDYxODMyNS4uMTg0NDZmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5NjYsOSArMTk2Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW0uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFt
SW5mby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRl
cmVyLmNwcApAQCAtMTk5Miw4ICsxOTkwLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
cy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0yMjQ3LDcgKzIyNDMs
MTAgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBl
cy5jcHAKICAgICByZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuY3BwCiAgICAgcmVuZGVyaW5n
L3N0eWxlL0NvdW50ZXJEaXJlY3RpdmVzLmNwcAorICAgIHJlbmRlcmluZy9zdHlsZS9DdXN0b21G
aWx0ZXJPcGVyYXRpb24uY3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKKyAg
ICByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9uLmNwcAorICAgIHJlbmRlcmluZy9zdHls
ZS9GaWx0ZXJPcGVyYXRpb25zLmNwcAogICAgIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3Qu
Y3BwCiAgICAgcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcAogICAgIHJlbmRlcmlu
Zy9zdHlsZS9RdW90ZXNEYXRhLmNwcApAQCAtMjI3Myw2ICsyMjcyLDcgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcAogICAgIHJlbmRlcmluZy9zdHlsZS9TVkdS
ZW5kZXJTdHlsZURlZnMuY3BwCisgICAgcmVuZGVyaW5nL3N0eWxlL1ZhbGlkYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbi5jcHAKIAogICAgIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQmxvY2suY3Bw
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmI4ZTFkOS4uNzIyZjIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxMy0wNC0x
MCAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+CisKKyAgICAgICAgW0NT
UyBGaWx0ZXJzXSBNb3ZlIGFsbCB0aGUgRmlsdGVyT3BlcmF0aW9uIGNsYXNzZXMgdG8gcmVuZGVy
aW5nL3N0eWxlIGZvbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE0Mzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IG1vdmluZyBmaWxlcyBhcm91bmQuCisKKyAgICAg
ICAgUHJvbW90aW5nIEZpbHRlck9wZXJhdGlvbiogZmlsZXMgZnJvbSBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzIGZvbGRlciB0byB0aGUgcmVuZGVyaW5nL3N0eWxlIGZvbGRlci4KKyAgICAgICAg
RmlsdGVyT3BlcmF0aW9uKiBjbGFzc2VzIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGV4dGVybmFs
IHBsYXRmb3JtIGNvZGUgYW5kIGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICAgIGZv
ciB0aGUgLXdlYmtpdC1maWx0ZXIgQ1NTIHByb3BlcnR5LiBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24gYWxyZWFkeSBoYWQgcmVmZXJlbmNlcyB0byBXZWJDb3JlCisgICAgICAgIHN0cnVjdHVyZXMs
IHNvIHRoaXMgcGF0Y2ggd2lsbCBhbHNvIGZpeCB0aGF0IGxheWVyaW5nIHZpb2xhdGlvbi4KKwor
ICAgICAgICBBbGwgdGhlIGZpbGVzIGFyZSBqdXN0IGNvcHkvcGFzdGVkIHRvIHRoZSBuZXcgbG9j
YXRpb25zIHdpdGggbm8gY2hhbmdlcy4gVXBkYXRlZCBhbGwgdGhlIHByb2plY3QgZmlsZXMuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJPcGVyYXRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21GaWx0ZXJPcGVyYXRpb246OkN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246On5DdXN0b21GaWx0ZXJPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpibGVuZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJP
cGVyYXRpb24uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6cHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246OnNldFByb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpwYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6bWVzaFJvd3MpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjptZXNoQ29sdW1ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246Om1lc2hUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6YWZmZWN0c09wYWNpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjptb3Zlc1BpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246OmJsZW5kaW5nTmVlZHNSZW5kZXJlclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9uLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjp+UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6c2V0Q2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbjo6cGFzc3Rocm91Z2hBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6cGFzc3Rocm91
Z2hBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtbWFGaWx0ZXJPcGVyYXRpb246OmJsZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9uOjpGaWx0ZXJPcGVyYXRpb246On5GaWx0ZXJPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpGaWx0ZXJPcGVyYXRpb246Om9w
ZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpGaWx0ZXJPcGVy
YXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RmlsdGVy
T3BlcmF0aW9uOjpnZXRPcGVyYXRpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbjo6RmlsdGVyT3BlcmF0aW9uOjppc1NhbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlck9wZXJhdGlvbjo6RmlsdGVyT3BlcmF0aW9uOjppc0RlZmF1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpGaWx0ZXJPcGVyYXRpb246OmFmZmVjdHNPcGFjaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RmlsdGVyT3BlcmF0aW9uOjpt
b3Zlc1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkZpbHRlck9w
ZXJhdGlvbjo6YmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb246OkZpbHRlck9wZXJhdGlvbjo6RmlsdGVyT3BlcmF0aW9uKToKKyAgICAg
ICAgKERlZmF1bHRGaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9uOjpEZWZhdWx0RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9uOjpEZWZhdWx0RmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RGVmYXVsdEZpbHRlck9wZXJhdGlv
bjo6aXNEZWZhdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RGVmYXVs
dEZpbHRlck9wZXJhdGlvbjo6RGVmYXVsdEZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChQYXNz
dGhyb3VnaEZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b246OlBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9uOjpQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OlBhc3N0aHJvdWdoRmlsdGVy
T3BlcmF0aW9uOjpQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb246OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6YWZmZWN0c09wYWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b246Om1vdmVzUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246
OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbjo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpzZXRGaWx0ZXJF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb246OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmFtb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
OjpCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uKToKKyAgICAgICAgKEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9uOjpCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjphbW91bnQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uOjphZmZlY3RzT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb246OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKToKKyAgICAgICAgKEdhbW1hRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6R2FtbWFGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkdhbW1hRmlsdGVyT3BlcmF0aW9uOjph
bXBsaXR1ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpHYW1tYUZpbHRl
ck9wZXJhdGlvbjo6ZXhwb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
OjpHYW1tYUZpbHRlck9wZXJhdGlvbjo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbjo6R2FtbWFGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpHYW1tYUZpbHRlck9wZXJhdGlvbjo6R2FtbWFGaWx0
ZXJPcGVyYXRpb24pOgorICAgICAgICAoQmx1ckZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkJsdXJGaWx0ZXJPcGVyYXRpb246OnN0
ZERldmlhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkJsdXJGaWx0
ZXJPcGVyYXRpb246OmFmZmVjdHNPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbjo6Qmx1ckZpbHRlck9wZXJhdGlvbjo6bW92ZXNQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9uOjpCbHVyRmlsdGVyT3BlcmF0aW9uOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6Qmx1ckZpbHRlck9wZXJhdGlvbjo6
Qmx1ckZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6RHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6eCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb246OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OnkpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9uOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpsb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b246OnN0ZERldmlhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbjo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6YWZmZWN0c09wYWNpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uOjptb3Zlc1BpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OkRy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9uOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9u
cy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpvdXRzZXRTaXplRm9yQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zOjpGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Om9wZXJhdGlv
bnNNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjpoYXNDdXN0b21G
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aGFzUmVmZXJlbmNl
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Omhhc091dHNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6b3V0c2V0cyk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjpoYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9ucy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZpbHRlck9wZXJh
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6RmlsdGVyT3BlcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6Om9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9uczo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM6OmF0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjp+VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6YmxlbmQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246OmFmZmVjdHNPcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6bW92ZXNQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
OjpibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6dmFsaWRhdGVkUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246OnBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjptZXNoUm93cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb246Om1lc2hDb2x1
bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
bWVzaFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjpvcGVyYXRvcj09KToKKwogMjAxMy0wNC0xMCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3Nz
eUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGRmaXggYWZ0ZXIgcjE0ODEy
My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVlMWFlNTguLjZlNDYwOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDYzOSwxMCArNDYzOSwxNiBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db3VudGVy
RGlyZWN0aXZlcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yRGF0
YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3Vyc29yTGlzdC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRGF0YVJlZi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvRmlsdGVyT3BlcmF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0ZpbHRlck9wZXJhdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
RmlsdGVyT3BlcmF0aW9ucy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9G
aWx0ZXJPcGVyYXRpb25zLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Hcmlk
UG9zaXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlz
dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaCBc
CkBAIC00NzA3LDYgKzQ3MTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkVHJhY2tTaXplLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91dC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggXAogCVNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVRhc2suY3BwIFwKQEAgLTU1NDIsMTAgKzU1NTAsNiBAQCB3ZWJj
b3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9W
YWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQYXJhbWV0ZXJMaXN0LmggXApAQCAtNTYwMiwxMCArNTYwNiw2IEBAIHdlYmNvcmVfcGxh
dGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGM4YTRhOTQuLjRiYjBmZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMjE4OSw4ICsyMTg5LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmggXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBy
b2dyYW0uaCBcCkBAIC0yMjE3LDggKzIyMTUsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5oIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIFwKQEAgLTI1NDksOCArMjU0NSwxMSBAQCBIRUFE
RVJTICs9IFwKICAgICByZW5kZXJpbmcvc3R5bGUvQ291bnRlckRpcmVjdGl2ZXMuaCBcCiAgICAg
cmVuZGVyaW5nL3N0eWxlL0N1cnNvckRhdGEuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL0N1cnNv
ckxpc3QuaCBcCisgICAgcmVuZGVyaW5nL3N0eWxlL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5oIFwK
ICAgICByZW5kZXJpbmcvc3R5bGUvRXhjbHVzaW9uU2hhcGVWYWx1ZS5oIFwKICAgICByZW5kZXJp
bmcvc3R5bGUvRmlsbExheWVyLmggXAorICAgIHJlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRp
b24uaCBcCisgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbHRlck9wZXJhdGlvbnMuaCBcCiAgICAgcmVu
ZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvTmluZVBp
ZWNlSW1hZ2UuaCBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaCBcCkBAIC0yNTgx
LDYgKzI1ODAsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3R5bGUvR3JpZFRyYWNr
U2l6ZS5oIFwKICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGVEZWZzLmggXAogICAg
IHJlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKKyAgICByZW5kZXJpbmcvc3R5bGUv
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAogICAgIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQmxvY2suaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaCBc
CiAgICAgcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdFbGxpcHNlLmggXApAQCAtMzYzOSwxMiArMzYz
OSwxNCBAQCBlbmFibGU/KFhTTFQpIHsKIAogZW5hYmxlPyhGSUxURVJTKSB7CiAgICAgU09VUkNF
UyArPSBcCisgICAgICAgIHJlbmRlcmluZy9zdHlsZS9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3Bw
IFwKKyAgICAgICAgcmVuZGVyaW5nL3N0eWxlL0ZpbHRlck9wZXJhdGlvbi5jcHAgXAorICAgICAg
ICByZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9ucy5jcHAgXAorICAgICAgICByZW5kZXJp
bmcvc3R5bGUvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5jcHAgXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3RleG1hcC9DdXN0b21GaWx0ZXJWYWxpZGF0
ZWRQcm9ncmFtVGV4dHVyZU1hcHBlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmNwcCBcCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyUHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlclByb2dyYW1JbmZvLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcCBcCkBAIC0zNjcxLDggKzM2NzMsNiBA
QCBlbmFibGU/KEZJTFRFUlMpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCA0YTJiOGFhLi45NzZjMWU1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzI0NTMsMTQgKzMyNDUzLDYgQEAKIAkJCQkJCT4KIAkJ
CQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAiCi0JCQkJCQk+Ci0JCQkJ
CTwvRmlsZT4KLQkJCQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcZmlsdGVyc1xDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLQkJCQkJCT4KLQkJCQkJPC9G
aWxlPgotCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xmaWx0ZXJzXEN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+
CkBAIC0zMjY5NywyMiArMzI2ODksNiBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxG
aWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRmls
dGVyT3BlcmF0aW9uLmNwcCIKLQkJCQkJCT4KLQkJCQkJPC9GaWxlPgotCQkJCQk8RmlsZQotCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZpbHRlck9wZXJh
dGlvbi5oIgotCQkJCQkJPgotCQkJCQk8L0ZpbGU+Ci0JCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRmlsdGVyT3BlcmF0aW9ucy5jcHAi
Ci0JCQkJCQk+Ci0JCQkJCTwvRmlsZT4KLQkJCQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGaWx0ZXJPcGVyYXRpb25zLmgiCi0JCQkJCQk+
Ci0JCQkJCTwvRmlsZT4KLQkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcZmlsdGVyc1xMaWdodFNvdXJjZS5oIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+
CkBAIC0zMjc1MiwxNCArMzI3MjgsNiBAQAogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1xmaWx0ZXJzXFNwb3RMaWdodFNvdXJjZS5oIgogCQkJCQkJPgogCQkJCQk8L0Zp
bGU+Ci0JCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGZpbHRlcnNcVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCIKLQkJCQkJCT4KLQkJ
CQkJPC9GaWxlPgotCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xmaWx0ZXJzXFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotCQkJCQkJ
PgotCQkJCQk8L0ZpbGU+CiAJCQkJPC9GaWx0ZXI+CiAJCQkJPEZpbHRlcgogCQkJCQlOYW1lPSJj
YSIKQEAgLTQ2NDAwLDYgKzQ2MzY4LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN0eWxlXERhdGFSZWYuaCIKIAkJCQkJPgogCQkJCTwvRmls
ZT4KQEAgLTQ2NDY0LDYgKzQ2NDQwLDIyIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZpbHRl
ck9wZXJhdGlvbi5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEZpbHRlck9wZXJhdGlvbi5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xGaWx0ZXJPcGVyYXRpb25zLmNwcCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGZpbHRlcnNcRmlsdGVyT3BlcmF0aW9ucy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN0eWxlXEdyaWRQb3Np
dGlvbi5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtNDc4NzUsNiArNDc4NjcsMTQgQEAKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3R5bGVcU1ZHUmVuZGVyU3R5bGVEZWZzLmgi
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5j
cHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgogCQkJPC9GaWx0ZXI+CiAJCQk8RmlsdGVyCiAJCQkJ
TmFtZT0ic3ZnIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGM4MjI0NDEuLjQ3YTgzMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNjgsMTAgKzEzNjgsNiBA
QAogCQk0OUU5MTJBQzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBNzBFRkFDOTA2
MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi87IH07CiAJCTQ5RTkxMkFEMEVGQUM5MDYw
MDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBODBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlz
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5
RTkxMkFFMEVGQUM5MDYwMDlEMENBRiAvKiBUaW1pbmdGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTEyQTkwRUZBQzkwNjAwOUQwQ0FG
IC8qIFRpbWluZ0Z1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNDlFQ0VCNkQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVD
RUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLzsgfTsKLQkJNDlF
Q0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLzsgfTsKLQkJ
NDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY2MTQ5OTc5MEQwMENE
RDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlC
dWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OwogCQk0
OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgfTsKIAkJNDlFRUNGMDIxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAg
Ki87IH07CkBAIC0xNTA3LDEzICsxNTAzLDE3IEBACiAJCTUwOTg3QzI2MTU3RDY3NkQwMEJEQTgz
NSAvKiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTg3QzI0MTU3RDY3NkQwMEJEQTgzNSAvKiBDdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCAqLzsgfTsKIAkJNTA5ODdDMjcxNTdENjc2RDAwQkRB
ODM1IC8qIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOTg3QzI1MTU3RDY3NkQwMEJEQTgzNSAvKiBDdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmggKi87IH07CiAJCTUwOUNDOUZCMTRDMDY5RUQwMEJCRUNC
RCAvKiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwOUNDOUZBMTRDMDY5RUQwMEJCRUNCRCAvKiBDdXN0b21GaWx0
ZXJQYXJhbWV0ZXIuaCAqLzsgfTsKLQkJNTBBQ0UyQ0IxNEI1RDc5MzAwNDQ2NjY2IC8qIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTBBQ0UyQ0ExNEI1RDc5MzAwNDQ2NjY2IC8qIEN1c3RvbUZpbHRlck9wZXJhdGlv
bi5oICovOyB9OworCQk1MEFEQTUyMTE3MTYwQkRGMDA4MDI1N0QgLyogQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUwQURBNTE5MTcxNjBCREYwMDgwMjU3RCAvKiBDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwICov
OyB9OworCQk1MEFEQTUyMjE3MTYwQkRGMDA4MDI1N0QgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MEFEQTUx
QTE3MTYwQkRGMDA4MDI1N0QgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTBBREE1MjMxNzE2MEJERjAw
ODAyNTdEIC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MEFEQTUxQjE3MTYwQkRGMDA4MDI1N0QgLyogRmlsdGVyT3Bl
cmF0aW9uLmNwcCAqLzsgfTsKKwkJNTBBREE1MjQxNzE2MEJERjAwODAyNTdEIC8qIEZpbHRlck9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTBBREE1MUMxNzE2MEJERjAwODAyNTdEIC8qIEZpbHRlck9wZXJhdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwQURBNTI1MTcxNjBCREYw
MDgwMjU3RCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwQURBNTFEMTcxNjBCREYwMDgwMjU3RCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJNTBBREE1MjYxNzE2MEJERjAwODAyNTdEIC8qIEZpbHRl
ck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUwQURBNTFFMTcxNjBCREYwMDgwMjU3RCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTBBREE1MjcxNzE2
MEJERjAwODAyNTdEIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MEFEQTUxRjE3MTYwQkRG
MDA4MDI1N0QgLyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLzsgfTsKKwkJ
NTBBREE1MjgxNzE2MEJERjAwODAyNTdEIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTBBREE1
MjAxNzE2MEJERjAwODAyNTdEIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUwQ0MwODlB
MTRDNkU5OUMwMDE3QUI1MSAvKiBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwQ0MwODk5MTRDNkU5OUMw
MDE3QUI1MSAvKiBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCAqLzsgfTsKLQkJNTBDQzBB
MzkxNEM2RjVCMTAwMTdBQjUxIC8qIEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MENDMEEzODE0QzZGNUIxMDAx
N0FCNTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLzsgfTsKIAkJNTBEMTBEOTkxNTQ1
RjU3NjAwOTZEMjg4IC8qIFJlbmRlckxheWVyRmlsdGVySW5mby5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MEQxMEQ5NzE1NDVGNTc2MDA5NkQyODgg
LyogUmVuZGVyTGF5ZXJGaWx0ZXJJbmZvLmNwcCAqLzsgfTsKIAkJNTBEMTBEOUExNTQ1RjU3NjAw
OTZEMjg4IC8qIFJlbmRlckxheWVyRmlsdGVySW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTBEMTBEOTgxNTQ1RjU3NjAwOTZEMjg4IC8qIFJlbmRl
ckxheWVyRmlsdGVySW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTUwRDMyODU3MTYzQjMxM0YwMDE2MTExRSAvKiBWYWxpZGF0ZWRDdXN0b21G
aWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTBEMzI4NTUxNjNCMzEzRjAwMTYxMTFFIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5jcHAgKi87IH07Ci0JCTUwRDMyODU4MTYzQjMxM0YwMDE2MTExRSAvKiBWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwRDMyODU2MTYzQjMxM0YwMDE2MTExRSAvKiBWYWxpZGF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24uaCAqLzsgfTsKIAkJNTBENDAzQzcxNDc2OEM5NDAwRDMwQkI1
IC8qIEZFQ3VzdG9tRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUwRDQwM0M1MTQ3NjhDOTQwMEQzMEJCNSAvKiBGRUN1c3RvbUZpbHRlci5j
cHAgKi87IH07CiAJCTUwRDQwM0M4MTQ3NjhDOTQwMEQzMEJCNSAvKiBGRUN1c3RvbUZpbHRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTBENDAzQzYx
NDc2OEM5NDAwRDMwQkI1IC8qIEZFQ3VzdG9tRmlsdGVyLmggKi87IH07CiAJCTUwRDQwNUY5MTQ3
RDMxRjMwMEQzMEJCNSAvKiBDdXN0b21GaWx0ZXJNZXNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwRDQwNUY3MTQ3RDMxRjMwMEQzMEJCNSAvKiBD
dXN0b21GaWx0ZXJNZXNoLmNwcCAqLzsgfTsKQEAgLTc3MzQsMTAgKzc3MzQsNiBAQAogCQk0OUU5
MTJBNzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBbmltYXRpb25MaXN0LmNwcDsgcGF0aCA9IGFuaW1hdGlv
bi9BbmltYXRpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFOTEy
QTgwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uTGlzdC5oOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlv
bkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFOTEyQTkwRUZBQzkwNjAw
OUQwQ0FGIC8qIFRpbWluZ0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFRpbWluZ0Z1bmN0aW9uLmg7IHBhdGggPSBhbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFQ0VCNjMxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGaWx0ZXJPcGVyYXRpb24uY3BwOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQg
LyogRmlsdGVyT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZp
bHRlck9wZXJhdGlvbi5oOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRl
ck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmls
dGVyT3BlcmF0aW9ucy5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyog
RmlsdGVyT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0
ZXJPcGVyYXRpb25zLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5
QnVmZmVyVmlldy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXJWaWV3Lmlk
bDsgcGF0aCA9IGNhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEFycmF5QnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9BcnJh
eUJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVDRENGMTA1MDND
MjMwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZs
b2F0MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQzMkFycmF5LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4ODYsMTQgKzc4ODIsMTggQEAKIAkJNTA5ODdDMjUxNTdE
Njc2RDAwQkRBODM1IC8qIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5oOyBwYXRoID0g
ZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUwOUNDOUZBMTRDMDY5RUQwMEJCRUNCRCAvKiBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyLmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MDlFQzEwODE1RTg0OENBMDBFODI1ODEgLyogQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTBBQ0UyQ0ExNEI1RDc5MzAwNDQ2NjY2IC8qIEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJPcGVyYXRpb24uaDsgcGF0
aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUwQURBNTE5MTcxNjBCREYwMDgwMjU3RCAvKiBDdXN0b21GaWx0ZXJPcGVyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLmNwcDsgcGF0aCA9IHN0eWxlL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwQURBNTFBMTcxNjBCREYwMDgwMjU3RCAvKiBD
dXN0b21GaWx0ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBzdHlsZS9DdXN0b21GaWx0ZXJPcGVyYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTBBREE1MUIxNzE2MEJERjAwODAy
NTdEIC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb24uY3BwOyBwYXRoID0gc3R5bGUvRmlsdGVyT3BlcmF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTBBREE1MUMxNzE2MEJERjAwODAy
NTdEIC8qIEZpbHRlck9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGaWx0ZXJPcGVyYXRpb24uaDsgcGF0aCA9IHN0eWxlL0ZpbHRlck9wZXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MEFEQTUxRDE3MTYwQkRGMDA4MDI1N0QgLyogRmls
dGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
aWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9IHN0eWxlL0ZpbHRlck9wZXJhdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MEFEQTUxRTE3MTYwQkRGMDA4MDI1N0QgLyog
RmlsdGVyT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0
ZXJPcGVyYXRpb25zLmg7IHBhdGggPSBzdHlsZS9GaWx0ZXJPcGVyYXRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwQURBNTFGMTcxNjBCREYwMDgwMjU3RCAvKiBWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHN0eWxl
L1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUwQURBNTIwMTcxNjBCREYwMDgwMjU3RCAvKiBWYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBzdHlsZS9WYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTBCNDIxNTcxNDY5
NzY5NjAwODdFNjA0IC8qIFdlYktpdENTU1NoYWRlclZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYktpdENTU1NoYWRlclZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUwQ0MwODk5MTRDNkU5OUMwMDE3QUI1MSAvKiBDdXN0b21GaWx0ZXJOdW1i
ZXJQYXJhbWV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmls
dGVyTnVtYmVyUGFyYW1ldGVyLmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlck51bWJlclBh
cmFtZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MENDMEEzODE0QzZGNUIx
MDAxN0FCNTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHA7IHBhdGggPSBmaWx0
ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUwRDEwRDk3MTU0NUY1NzYwMDk2RDI4OCAvKiBSZW5kZXJMYXllckZpbHRlckluZm8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJJ
bmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTBEMTBEOTgxNTQ1RjU3NjAw
OTZEMjg4IC8qIFJlbmRlckxheWVyRmlsdGVySW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlckluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTBEMzI4NTUxNjNCMzEzRjAwMTYxMTFFIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOyBwYXRoID0gZmlsdGVycy9WYWxpZGF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MEQzMjg1NjE2M0IzMTNGMDAxNjExMUUgLyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5oOyBwYXRoID0gZmlsdGVycy9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTBENDAzQzUxNDc2OEM5NDAwRDMw
QkI1IC8qIEZFQ3VzdG9tRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZFQ3VzdG9tRmlsdGVyLmNwcDsgcGF0aCA9IGZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MEQ0MDNDNjE0NzY4Qzk0MDBEMzBC
QjUgLyogRkVDdXN0b21GaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RkVDdXN0b21GaWx0ZXIuaDsgcGF0aCA9IGZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTBENDA1RjcxNDdEMzFGMzAwRDMwQkI1IC8qIEN1c3Rv
bUZpbHRlck1lc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3Vz
dG9tRmlsdGVyTWVzaC5jcHA7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlck1lc2guY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1NzksOCArMTY1NzksNiBAQAogCQkJCTdF
MTJFOTBFMTVGQTVEM0EwMDVFNDEyNiAvKiBDdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNwcCAq
LywKIAkJCQk3RTEyRTkwRDE1RkE1RDNBMDA1RTQxMjYgLyogQ3VzdG9tRmlsdGVyTWVzaEdlbmVy
YXRvci5oICovLAogCQkJCTUwQ0MwODk5MTRDNkU5OUMwMDE3QUI1MSAvKiBDdXN0b21GaWx0ZXJO
dW1iZXJQYXJhbWV0ZXIuaCAqLywKLQkJCQk1MENDMEEzODE0QzZGNUIxMDAxN0FCNTEgLyogQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKLQkJCQk1MEFDRTJDQTE0QjVENzkzMDA0NDY2NjYg
LyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNTA5Q0M5RkExNEMwNjlFRDAwQkJF
Q0JEIC8qIEN1c3RvbUZpbHRlclBhcmFtZXRlci5oICovLAogCQkJCTUwOTMzMzREMTYzQjBFNDMw
MDA5OUE2MCAvKiBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmNwcCAqLywKIAkJCQk1MDkzMzM0
RTE2M0IwRTQzMDAwOTlBNjAgLyogQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oICovLApAQCAt
MTY2MzUsMTAgKzE2NjMzLDYgQEAKIAkJCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggKi8sCiAJCQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5j
cHAgKi8sCiAJCQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICov
LAotCQkJCTQ5RUNFQjYzMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICov
LAotCQkJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywK
LQkJCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8s
Ci0JCQkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLywK
IAkJCQk4NDczMEQ3NDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCAqLywKIAkJCQlB
MUUxMTU0NTEzMDE1QzRFMDA1NEFDOEMgLyogUG9pbnRMaWdodFNvdXJjZS5jcHAgKi8sCiAJCQkJ
ODQ3MzBENzUxMjQ4RjBCMzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCAqLywKQEAgLTE2
NjQ4LDggKzE2NjQyLDYgQEAKIAkJCQk4NEE4MUY0MDBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNl
R3JhcGhpYy5oICovLAogCQkJCUExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRT
b3VyY2UuY3BwICovLAogCQkJCTg0NzMwRDc2MTI0OEYwQjMwMEQzQTlDOSAvKiBTcG90TGlnaHRT
b3VyY2UuaCAqLywKLQkJCQk1MEQzMjg1NTE2M0IzMTNGMDAxNjExMUUgLyogVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKLQkJCQk1MEQzMjg1NjE2M0IzMTNGMDAxNjExMUUg
LyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9
IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTg5MjMsNiArMTg5MTUs
MTQgQEAKIAkJQkM4QzhGQUEwRERDRDJGMjAwQjU5MkY0IC8qIHN0eWxlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MEFEQTUxOTE3MTYwQkRGMDA4MDI1
N0QgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKKwkJCQk1MEFEQTUxQTE3MTYwQkRG
MDA4MDI1N0QgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggKi8sCisJCQkJNTBBREE1MUIxNzE2
MEJERjAwODAyNTdEIC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCisJCQkJNTBBREE1MUMxNzE2
MEJERjAwODAyNTdEIC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAorCQkJCTUwQURBNTFEMTcxNjBC
REYwMDgwMjU3RCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk1MEFEQTUxRTE3MTYw
QkRGMDA4MDI1N0QgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovLAorCQkJCTUwQURBNTFGMTcxNjBC
REYwMDgwMjU3RCAvKiBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwICovLAorCQkJ
CTUwQURBNTIwMTcxNjBCREYwMDgwMjU3RCAvKiBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCAqLywKIAkJCQlGQkQ2QUY4MjE1RUYyMUEzMDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuY3Bw
ICovLAogCQkJCUZCRDZBRjgzMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5oICovLAog
CQkJCUJDNUVCNUUwMEU4MUJFODcwMEIyNTk2NSAvKiBCb3JkZXJEYXRhLmggKi8sCkBAIC0yMTI0
OCw3ICsyMTI0OCw2IEBACiAJCQkJNTBENDA1RkExNDdEMzFGMzAwRDMwQkI1IC8qIEN1c3RvbUZp
bHRlck1lc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTdFMTJFOTBGMTVGQTVEM0EwMDVFNDEyNiAv
KiBDdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MENDMDg5
QTE0QzZFOTlDMDAxN0FCNTEgLyogQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MEFDRTJDQjE0QjVENzkzMDA0NDY2NjYgLyogQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDlDQzlGQjE0QzA2OUVEMDBCQkVDQkQgLyog
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDkzMzM1MDE2M0Iw
RTQzMDAwOTlBNjAgLyogQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uaCBp
biBIZWFkZXJzICovLApAQCAtMjE4MzAsOCArMjE4MjksNiBAQAogCQkJCTg0NUU3MkY4MEZEMjYx
RUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdD
NEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEzRjY2
MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5k
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8q
IEZpeGVkVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDczQkFBMEMzOTlCMUYw
MDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM4NTAsNyAr
MjM4NDcsNiBAQAogCQkJCUJDREYzMTdDMTFGOEQ2ODMwMDNDNUJGOCAvKiBVc2VyVHlwaW5nR2Vz
dHVyZUluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUZBRkJGMTkxNUE1RkE3NDAwMDgz
QTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkJGMDgxMTYyREEx
MTAwQjk0MDlBIC8qIFVVSUQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUwRDMyODU4MTYzQjMxM0Yw
MDE2MTExRSAvKiBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1QTE1NDI4MTI3OTUzNEQwMEQwQjBDMCAvKiBWYWxpZGF0aW9uTWVzc2FnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjUxM0EzRUExNUZGNDg0MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNUM3NzA4RDEwMEQzQzZCMDA1QkEy
NjcgLyogVmFsaWRpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDAzOSw2ICsyNDAzNSwx
MCBAQAogCQkJCUUxODA4MTBGMTZGQ0VDREYwMEI4MEQwNyAvKiBXZWJDb3JlUmVzb3VyY2VIYW5k
bGVBc0RlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTgwODExNzE2RkNGOUNCMDBCODBE
MDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTI1
NTE1MTZGRDIzNTAwMDNEN0FEQiAvKiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc09wZXJhdGlvblF1
ZXVlRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUwQURBNTIyMTcxNjBCREYwMDgwMjU3
RCAvKiBDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUwQURBNTI0
MTcxNjBCREYwMDgwMjU3RCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUwQURBNTI2MTcxNjBCREYwMDgwMjU3RCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MEFEQTUyODE3MTYwQkRGMDA4MDI1N0QgLyogVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI0NjUxLDcgKzI0NjUxLDYgQEAKIAkJ
CQk1MDk4N0MyNjE1N0Q2NzZEMDBCREE4MzUgLyogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEQ0MDVGOTE0N0QzMUYzMDBEMzBCQjUgLyogQ3VzdG9t
RmlsdGVyTWVzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTEyRTkxMDE1RkE1RDNBMDA1RTQx
MjYgLyogQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MENDMEEzOTE0QzZGNUIxMDAxN0FCNTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUwOTMzMzRGMTYzQjBFNDMwMDA5OUE2MCAvKiBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwM0QwQ0FBMTRCNUIwODcwMEYz
MkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwRDg4
Q0I1MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1MDE0LDggKzI1MDEzLDYgQEAKIAkJCQlCQzVFQjY5RTBFODFEQUVCMDBC
MjU5NjUgLyogRmlsbExheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4QzkyNTE5MEZDQzdD
NEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzMTNG
NjUxNDQzQjM1RjAwNkUyQTkwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTQ5RUNFQjZEMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYwOTAwMEE0MjM0
IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjgwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdD
OUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI2ODEzLDcgKzI2ODEwLDYgQEAKIAkJCQlCQ0RGMzE3QjExRjhENjgzMDAzQzVCRjggLyogVXNl
clR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUZBRkJGMTgx
NUE1RkE2RTAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJF
M0JCRjA3MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUw
RDMyODU3MTYzQjMxM0YwMDE2MTExRSAvKiBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjVBMTU0MjcxMjc5NTM0RDAwRDBCMEMwIC8qIFZhbGlk
YXRpb25NZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MDhFMTAwRDNDNkIwMDVC
QTI2NyAvKiBWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEFFMTJC
MDI2RjcwMEMxQTM1OSAvKiBWZWN0b3JNYXRoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5ODQs
NiArMjY5ODAsMTAgQEAKIAkJCQlFMTgwODExMjE2RkNGNDJGMDBCODBEMDcgLyogU3luY2hyb25v
dXNMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4MDgxMTYxNkZDRjlDQjAw
QjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTE1MjU1MTYxNkZEMjM1MDAwM0Q3QURCIC8qIFdlYkNvcmVSZXNvdXJjZUhhbmRsZUFzT3BlcmF0
aW9uUXVldWVEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUwQURBNTIxMTcxNjBCREYw
MDgwMjU3RCAvKiBDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTBBREE1MjMxNzE2MEJERjAwODAyNTdEIC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1MEFEQTUyNTE3MTYwQkRGMDA4MDI1N0QgLyogRmlsdGVyT3BlcmF0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MEFEQTUyNzE3MTYwQkRGMDA4MDI1N0QgLyogVmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVy
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJPcGVyYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGUz
NThlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJ
U+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
Ci0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCIKLQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgotI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclByb2dyYW0uaCIKLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1DdXN0b21GaWx0ZXJPcGVyYXRpb246OkN1c3RvbUZpbHRlck9w
ZXJhdGlvbihQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hS
b3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUp
Ci0gICAgOiBGaWx0ZXJPcGVyYXRpb24oQ1VTVE9NKQotICAgICwgbV9wcm9ncmFtKHByb2dyYW0p
Ci0gICAgLCBtX3BhcmFtZXRlcnMoc29ydGVkUGFyYW1ldGVycykKLSAgICAsIG1fbWVzaFJvd3Mo
bWVzaFJvd3MpCi0gICAgLCBtX21lc2hDb2x1bW5zKG1lc2hDb2x1bW5zKQotICAgICwgbV9tZXNo
VHlwZShtZXNoVHlwZSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcGFyYW1ldGVycyBh
cmUgYWx3eWFzIHNvcnRlZCBieSBuYW1lLiBXZSB1c2UgdGhhdCB0byBtZXJnZSB0d28gQ3VzdG9t
RmlsdGVyT3BlcmF0aW9ucyBpbiBhbmltYXRpb25zLgotICAgIEFTU0VSVChtX3BhcmFtZXRlcnMu
Y2hlY2tBbHBoYWJldGljYWxPcmRlcigpKTsKLX0KLSAgICAKLUN1c3RvbUZpbHRlck9wZXJhdGlv
bjo6fkN1c3RvbUZpbHRlck9wZXJhdGlvbigpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBDdXN0b21GaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJiBzaXplLCBib29sIGJs
ZW5kVG9QYXNzdGhyb3VnaCkKLXsKLSAgICAvLyBGSVhNRTogVGhlcmUncyBubyB3YXkgdG8gZGVj
aWRlIHdoYXQgaXMgdGhlICJwYXNzdGhyb3VnaCBmaWx0ZXIiIGZvciBzaGFkZXJzIHVzaW5nIHRo
ZSBjdXJyZW50IENTUyBTeW50YXguCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0OTAzCi0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xNjg2MQotICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2ggfHwgIWZy
b20gfHwgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAKLSAgICBjb25zdCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZyb20pOwotICAgIGlmIChtX3Byb2dyYW0u
Z2V0KCkgIT0gZnJvbU9wLT5tX3Byb2dyYW0uZ2V0KCkKLSAgICAgICAgfHwgbV9tZXNoUm93cyAh
PSBmcm9tT3AtPm1fbWVzaFJvd3MKLSAgICAgICAgfHwgbV9tZXNoQ29sdW1ucyAhPSBmcm9tT3At
Pm1fbWVzaENvbHVtbnMKLSAgICAgICAgfHwgbV9tZXNoVHlwZSAhPSBmcm9tT3AtPm1fbWVzaFR5
cGUpCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIAotICAgIEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QgYW5pbWF0ZWRQYXJhbWV0ZXJzOwotICAgIG1fcGFyYW1ldGVycy5ibGVuZChmcm9tT3At
Pm1fcGFyYW1ldGVycywgcHJvZ3Jlc3MsIHNpemUsIGFuaW1hdGVkUGFyYW1ldGVycyk7Ci0gICAg
cmV0dXJuIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKG1fcHJvZ3JhbSwgYW5pbWF0ZWRQ
YXJhbWV0ZXJzLCBtX21lc2hSb3dzLCBtX21lc2hDb2x1bW5zLCBtX21lc2hUeXBlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY4MWM2YTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDk4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDi
gJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uX2gKLSNkZWZpbmUgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIK
LSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCi0jaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDU1MgU2hhZGVycwot
Ci1jbGFzcyBDdXN0b21GaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEN1c3RvbUZpbHRlck9wZXJhdGlvbihw
cm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBl
KSk7Ci0gICAgfQotICAgIAotICAgIEN1c3RvbUZpbHRlclByb2dyYW0qIHByb2dyYW0oKSBjb25z
dCB7IHJldHVybiBtX3Byb2dyYW0uZ2V0KCk7IH0KLSAgICB2b2lkIHNldFByb2dyYW0oUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtKSB7IG1fcHJvZ3JhbSA9IHByb2dyYW07
IH0KLSAgICAKLSAgICBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgbWVz
aFJvd3MoKSBjb25zdCB7IHJldHVybiBtX21lc2hSb3dzOyB9Ci0gICAgdW5zaWduZWQgbWVzaENv
bHVtbnMoKSBjb25zdCB7IHJldHVybiBtX21lc2hDb2x1bW5zOyB9Ci0KLSAgICBDdXN0b21GaWx0
ZXJNZXNoVHlwZSBtZXNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaFR5cGU7IH0KLSAgICAK
LSAgICB2aXJ0dWFsIH5DdXN0b21GaWx0ZXJPcGVyYXRpb24oKTsKLSAgICAKLSAgICB2aXJ0dWFs
IGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIG1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0
IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXpl
JiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBD
dXN0b21GaWx0ZXJPcGVyYXRpb24oUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiwgY29u
c3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25l
ZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUpOwotICAgIAotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgY29uc3QgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBvdGhlciA9IHN0
YXRpY19jYXN0PGNvbnN0IEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgcmV0
dXJuIG1fcHJvZ3JhbS5nZXQoKSA9PSBvdGhlci0+bV9wcm9ncmFtLmdldCgpCi0gICAgICAgICAg
ICAmJiBtX21lc2hSb3dzID09IG90aGVyLT5tX21lc2hSb3dzCi0gICAgICAgICAgICAmJiBtX21l
c2hDb2x1bW5zID09IG90aGVyLT5tX21lc2hDb2x1bW5zCi0gICAgICAgICAgICAmJiBtX21lc2hU
eXBlID09IG90aGVyLT5tX21lc2hUeXBlCi0gICAgICAgICAgICAmJiBtX3BhcmFtZXRlcnMgPT0g
b3RoZXItPm1fcGFyYW1ldGVyczsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJv
Z3JhbT4gbV9wcm9ncmFtOwotICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgbV9wYXJhbWV0
ZXJzOwotICAgIAotICAgIHVuc2lnbmVkIG1fbWVzaFJvd3M7Ci0gICAgdW5zaWduZWQgbV9tZXNo
Q29sdW1uczsKLSAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtX21lc2hUeXBlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQotCi0j
ZW5kaWYgLy8gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjNzkxNC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRp
b24uaCIKLQotI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgotCi0jaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24oY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQs
IE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICA6IEZpbHRlck9wZXJhdGlvbih0eXBlKQotICAgICwg
bV91cmwodXJsKQotICAgICwgbV9mcmFnbWVudChmcmFnbWVudCkKLXsKLX0KLQotUmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uOjp+UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKCkKLXsKLX0KLQotI2lm
IEVOQUJMRShTVkcpCi12b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6c2V0Q2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UoUGFzc093blB0cjxDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZT4g
Y2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCi17Ci0gICAgbV9jYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSA9IGNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOwotfQotI2VuZGlmCi0KLVBhc3NS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpi
bGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBi
bGVuZFRvUGFzc3Rocm91Z2gpCi17Ci0gICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUo
KnRoaXMpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKLSAgICBpZiAoYmxlbmRUb1Bhc3N0
aHJvdWdoKQotICAgICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKG1fYW1vdW50LCBwYXNzdGhyb3VnaEFtb3VudCgpLCBwcm9n
cmVzcyksIG1fdHlwZSk7Ci0gICAgICAgIAotICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24qPihmcm9tKTsKLSAgICBkb3VibGUgZnJvbUFtb3VudCA9IGZyb21PcCA/
IGZyb21PcC0+YW1vdW50KCkgOiBwYXNzdGhyb3VnaEFtb3VudCgpOwotICAgIHJldHVybiBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFt
b3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKLX0KLQotZG91YmxlIEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgR1JBWVNDQUxFOgotICAgIGNhc2UgU0VQSUE6
Ci0gICAgY2FzZSBIVUVfUk9UQVRFOgotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIFNBVFVS
QVRFOgotICAgICAgICByZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Ymxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb1Bhc3N0aHJvdWdoKQotewotICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgaWYgKGJsZW5kVG9QYXNzdGhy
b3VnaCkKLSAgICAgICAgcmV0dXJuIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShXZWJDb3JlOjpibGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91bnQoKSwg
cHJvZ3Jlc3MpLCBtX3R5cGUpOwotICAgICAgICAKLSAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZnJvbSk7Ci0gICAgZG91YmxlIGZyb21B
bW91bnQgPSBmcm9tT3AgPyBmcm9tT3AtPmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91bnQoKTsK
LSAgICByZXR1cm4gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KFdlYkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7
Ci19Ci0KLWRvdWJsZSBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpwYXNz
dGhyb3VnaEFtb3VudCgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNl
IE9QQUNJVFk6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgSU5WRVJUOgotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIENPTlRSQVNUOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNl
IEJSSUdIVE5FU1M6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLVBhc3NS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBHYW1tYUZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0
aHJvdWdoKQotewotICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKLSAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgCi0gICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkKLSAg
ICAgICAgcmV0dXJuIEdhbW1hRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICBX
ZWJDb3JlOjpibGVuZChtX2FtcGxpdHVkZSwgMS4wLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBX
ZWJDb3JlOjpibGVuZChtX2V4cG9uZW50LCAxLjAsIHByb2dyZXNzKSwKLSAgICAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKG1fb2Zmc2V0LCAwLjAsIHByb2dyZXNzKSwgbV90eXBlKTsKLSAgICAgICAg
Ci0gICAgY29uc3QgR2FtbWFGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNv
bnN0IEdhbW1hRmlsdGVyT3BlcmF0aW9uKj4oZnJvbSk7Ci0gICAgZG91YmxlIGZyb21BbXBsaXR1
ZGUgPSBmcm9tT3AgPyBmcm9tT3AtPmFtcGxpdHVkZSgpIDogMTsKLSAgICBkb3VibGUgZnJvbUV4
cG9uZW50ID0gZnJvbU9wID8gZnJvbU9wLT5leHBvbmVudCgpIDogMTsKLSAgICBkb3VibGUgZnJv
bU9mZnNldCA9IGZyb21PcCA/IGZyb21PcC0+b2Zmc2V0KCkgOiAwOwotICAgIHJldHVybiBHYW1t
YUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tQW1w
bGl0dWRlLCBtX2FtcGxpdHVkZSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChm
cm9tRXhwb25lbnQsIG1fZXhwb25lbnQsIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbU9mZnNldCwgbV9vZmZzZXQsIHByb2dyZXNzKSwgbV90eXBlKTsKLX0KLQotUGFzc1Jl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZp
bHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhy
b3VnaCkKLXsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCi0gICAg
ICAgIHJldHVybiB0aGlzOwotCi0gICAgTGVuZ3RoVHlwZSBsZW5ndGhUeXBlID0gbV9zdGREZXZp
YXRpb24udHlwZSgpOwotCi0gICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkKLSAgICAgICAgcmV0
dXJuIEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShMZW5ndGgobGVuZ3RoVHlwZSkuYmxlbmQo
bV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwgbV90eXBlKTsKLQotICAgIGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRp
b24qPihmcm9tKTsKLSAgICBMZW5ndGggZnJvbUxlbmd0aCA9IGZyb21PcCA/IGZyb21PcC0+bV9z
dGREZXZpYXRpb24gOiBMZW5ndGgobGVuZ3RoVHlwZSk7Ci0gICAgcmV0dXJuIEJsdXJGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZShtX3N0ZERldmlhdGlvbi5ibGVuZChmcm9tTGVuZ3RoLCBwcm9ncmVz
cyksIG1fdHlwZSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCi17Ci0gICAgaWYgKGZyb20gJiYg
IWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gdGhpczsKLQotICAgIGlm
IChibGVuZFRvUGFzc3Rocm91Z2gpCi0gICAgICAgIHJldHVybiBEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2xvY2F0aW9uLCBJ
bnRQb2ludCgpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3N0ZERl
dmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9jb2xv
ciwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgbV90
eXBlKTsKLQotICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0
YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmcm9tKTsKLSAgICBJ
bnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3AgPyBmcm9tT3AtPmxvY2F0aW9uKCkgOiBJbnRQ
b2ludCgpOwotICAgIGludCBmcm9tU3RkRGV2aWF0aW9uID0gZnJvbU9wID8gZnJvbU9wLT5zdGRE
ZXZpYXRpb24oKSA6IDA7Ci0gICAgQ29sb3IgZnJvbUNvbG9yID0gZnJvbU9wID8gZnJvbU9wLT5j
b2xvcigpIDogQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICAKLSAgICByZXR1cm4gRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAotICAgICAgICBXZWJDb3JlOjpibGVuZChm
cm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVN0ZERldmlhdGlvbiwgbV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbUNvbG9yLCBtX2NvbG9yLCBwcm9ncmVzcyksIG1fdHlwZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVS
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjYx
ZjhkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgRmlsdGVyT3BlcmF0aW9uX2gKLSNkZWZpbmUgRmlsdGVyT3BlcmF0aW9u
X2gKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUg
Ikxlbmd0aC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2VuZGlmCi0KLS8vIEFubm95aW5nbHksIHdpbmdkaS5o
ICNkZWZpbmVzIHRoaXMuCi0jaWZkZWYgUEFTU1RIUk9VR0gKLSN1bmRlZiBQQVNTVEhST1VHSAot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQ1NTIEZpbHRlcnMKLQotI2lmIEVO
QUJMRShTVkcpCi1jbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTsKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLWNsYXNzIEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKLSNlbHNlCi1jbGFzcyBGaWx0
ZXJPcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKLSNlbmRp
ZgotcHVibGljOgotICAgIGVudW0gT3BlcmF0aW9uVHlwZSB7Ci0gICAgICAgIFJFRkVSRU5DRSwg
Ly8gdXJsKCNzb21lZmlsdGVyKQotICAgICAgICBHUkFZU0NBTEUsCi0gICAgICAgIFNFUElBLAot
ICAgICAgICBTQVRVUkFURSwKLSAgICAgICAgSFVFX1JPVEFURSwKLSAgICAgICAgSU5WRVJULAot
ICAgICAgICBPUEFDSVRZLAotICAgICAgICBCUklHSFRORVNTLAotICAgICAgICBDT05UUkFTVCwK
LSAgICAgICAgQkxVUiwKLSAgICAgICAgRFJPUF9TSEFET1csCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgICAgICBDVVNUT00sCi0gICAgICAgIFZBTElEQVRFRF9DVVNUT00sCi0jZW5kaWYK
LSAgICAgICAgUEFTU1RIUk9VR0gsCi0gICAgICAgIE5PTkUKLSAgICB9OwotCi0gICAgdmlydHVh
bCB+RmlsdGVyT3BlcmF0aW9uKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGaWx0ZXJPcGVyYXRpb24mKSBjb25zdCA9IDA7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmls
dGVyT3BlcmF0aW9uKiAvKmZyb20qLywgZG91YmxlIC8qcHJvZ3Jlc3MqLywgYm9vbCAvKmJsZW5k
VG9QYXNzdGhyb3VnaCovID0gZmFsc2UpCi0gICAgeyAKLSAgICAgICAgQVNTRVJUKCFibGVuZGlu
Z05lZWRzUmVuZGVyZXJTaXplKCkpOwotICAgICAgICByZXR1cm4gMDsgCi0gICAgfQotCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uKiAvKmZyb20qLywgZG91YmxlIC8qcHJvZ3Jlc3MqLywgY29uc3QgTGF5b3V0U2l6ZSYs
IGJvb2wgLypibGVuZFRvUGFzc3Rocm91Z2gqLyA9IGZhbHNlKQotICAgIHsgCi0gICAgICAgIEFT
U0VSVChibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkpOwotICAgICAgICByZXR1cm4gMDsgCi0g
ICAgfQotCi0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09
IG1fdHlwZTsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgLy8gVHJ1ZSBpZiB0aGUgYWxwaGEgY2hhbm5lbCBvZiBhbnkg
cGl4ZWwgY2FuIGNoYW5nZSB1bmRlciB0aGlzIG9wZXJhdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wg
YWZmZWN0c09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIC8vIFRydWUgaWYg
dGhlIHRoZSB2YWx1ZSBvZiBvbmUgcGl4ZWwgY2FuIGFmZmVjdCB0aGUgdmFsdWUgb2YgYW5vdGhl
ciBwaXhlbCB1bmRlciB0aGlzIG9wZXJhdGlvbiwgc3VjaCBhcyBibHVyLgotICAgIHZpcnR1YWwg
Ym9vbCBtb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgLy8gVHJ1ZSBp
ZiB0aGUgZmlsdGVyIG5lZWRzIHRoZSBzaXplIG9mIHRoZSBib3ggaW4gb3JkZXIgdG8gY2FsY3Vs
YXRlIHRoZSBhbmltYXRpb25zLgotICAgIHZpcnR1YWwgYm9vbCBibGVuZGluZ05lZWRzUmVuZGVy
ZXJTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAgIEZpbHRl
ck9wZXJhdGlvbihPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgewotICAgIH0KLQotICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwotfTsKLQotY2xhc3MgRGVm
YXVsdEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZmF1bHRGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShPcGVy
YXRpb25UeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlZmF1
bHRGaWx0ZXJPcGVyYXRpb24odHlwZSkpOwotICAgIH0KLQotcHJpdmF0ZToKLQotICAgIHZpcnR1
YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8pOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9v
bCBpc0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBEZWZhdWx0RmlsdGVy
T3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBGaWx0ZXJPcGVyYXRpb24o
dHlwZSkKLSAgICB7Ci0gICAgfQotfTsKLQotY2xhc3MgUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRp
b24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb24oKSk7Ci0gICAg
fQotCi1wcml2YXRlOgotCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzU2FtZVR5cGUobyk7
Ci0gICAgfQotCi0gICAgUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb24oKQotICAgICAgICA6IEZp
bHRlck9wZXJhdGlvbihQQVNTVEhST1VHSCkKLSAgICB7Ci0gICAgfQotfTsKLQotY2xhc3MgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQsIE9wZXJhdGlvblR5cGUg
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uKHVybCwgZnJhZ21lbnQsIHR5cGUpKTsKLSAgICB9Ci0gICAgflJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbigpOwotCi0gICAgdmlydHVhbCBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgdXJsKCkgY29uc3QgeyByZXR1
cm4gbV91cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIGZyYWdtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFnbWVudDsgfQotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSogY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTVkdE
b2N1bWVudFJlZmVyZW5jZShQYXNzT3duUHRyPENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlPik7
Ci0jZW5kaWYKLQotICAgIEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJFZmZlY3QuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEZpbHRlckVmZmVjdChQYXNz
UmVmUHRyPEZpbHRlckVmZmVjdD4gZmlsdGVyRWZmZWN0KSB7IG1fZmlsdGVyRWZmZWN0ID0gZmls
dGVyRWZmZWN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGZyYWdtZW50LCBPcGVyYXRpb25UeXBlKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiBvdGhl
ciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbio+KCZvKTsKLSAg
ICAgICAgcmV0dXJuIG1fdXJsID09IG90aGVyLT5tX3VybDsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
bV91cmw7Ci0gICAgU3RyaW5nIG1fZnJhZ21lbnQ7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBPd25Q
dHI8Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U+IG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVu
Y2U7Ci0jZW5kaWYKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2ZpbHRlckVmZmVjdDsKLX07
Ci0KLS8vIEdSQVlTQ0FMRSwgU0VQSUEsIFNBVFVSQVRFIGFuZCBIVUVfUk9UQVRFIGFyZSB2YXJp
YXRpb25zIG9uIGEgYmFzaWMgY29sb3IgbWF0cml4IGVmZmVjdC4KLS8vIEZvciBIVUVfUk9UQVRF
LCB0aGUgYW5nbGUgb2Ygcm90YXRpb24gaXMgc3RvcmVkIGluIG1fYW1vdW50LgotY2xhc3MgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24+IGNyZWF0ZShkb3VibGUgYW1vdW50LCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24oYW1vdW50LCB0eXBlKSk7Ci0gICAgfQotCi0gICAgZG91YmxlIGFtb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYW1vdW50OyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBvdGhlciA9IHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPigmbyk7Ci0g
ICAgICAgIHJldHVybiBtX2Ftb3VudCA9PSBvdGhlci0+bV9hbW91bnQ7Ci0gICAgfQotICAgIAot
ICAgIGRvdWJsZSBwYXNzdGhyb3VnaEFtb3VudCgpIGNvbnN0OwotICAgIAotICAgIEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24oZG91YmxlIGFtb3VudCwgT3BlcmF0aW9uVHlwZSB0eXBl
KQotICAgICAgICA6IEZpbHRlck9wZXJhdGlvbih0eXBlKQotICAgICAgICAsIG1fYW1vdW50KGFt
b3VudCkKLSAgICB7Ci0gICAgfQotCi0gICAgZG91YmxlIG1fYW1vdW50OwotfTsKLQotLy8gSU5W
RVJULCBCUklHSFRORVNTLCBDT05UUkFTVCBhbmQgT1BBQ0lUWSBhcmUgdmFyaWF0aW9ucyBvbiBh
IGJhc2ljIGNvbXBvbmVudCB0cmFuc2ZlciBlZmZlY3QuCi1jbGFzcyBCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4gY3JlYXRlKGRvdWJsZSBhbW91bnQsIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbihhbW91bnQsIHR5cGUpKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgYW1vdW50KCkgY29u
c3QgeyByZXR1cm4gbV9hbW91bnQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzT3BhY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBPUEFDSVRZOyB9Ci0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7Ci0K
LXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX2Ftb3VudCA9
PSBvdGhlci0+bV9hbW91bnQ7Ci0gICAgfQotCi0gICAgZG91YmxlIHBhc3N0aHJvdWdoQW1vdW50
KCkgY29uc3Q7Ci0KLSAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKGRv
dWJsZSBhbW91bnQsIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBGaWx0ZXJPcGVyYXRp
b24odHlwZSkKLSAgICAgICAgLCBtX2Ftb3VudChhbW91bnQpCi0gICAgewotICAgIH0KLQotICAg
IGRvdWJsZSBtX2Ftb3VudDsKLX07Ci0KLWNsYXNzIEdhbW1hRmlsdGVyT3BlcmF0aW9uIDogcHVi
bGljIEZpbHRlck9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2Ft
bWFGaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW1wbGl0dWRlLCBkb3VibGUgZXhwb25l
bnQsIGRvdWJsZSBvZmZzZXQsIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR2FtbWFGaWx0ZXJPcGVyYXRpb24oYW1wbGl0dWRlLCBleHBvbmVu
dCwgb2Zmc2V0LCB0eXBlKSk7Ci0gICAgfQotCi0gICAgZG91YmxlIGFtcGxpdHVkZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYW1wbGl0dWRlOyB9Ci0gICAgZG91YmxlIGV4cG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBvbmVudDsgfQotICAgIGRvdWJsZSBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y29uc3QgR2FtbWFGaWx0ZXJPcGVyYXRpb24qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgR2Ft
bWFGaWx0ZXJPcGVyYXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX2FtcGxpdHVkZSA9PSBv
dGhlci0+bV9hbXBsaXR1ZGUgJiYgbV9leHBvbmVudCA9PSBvdGhlci0+bV9leHBvbmVudCAmJiBt
X29mZnNldCA9PSBvdGhlci0+bV9vZmZzZXQ7Ci0gICAgfQotCi0gICAgR2FtbWFGaWx0ZXJPcGVy
YXRpb24oZG91YmxlIGFtcGxpdHVkZSwgZG91YmxlIGV4cG9uZW50LCBkb3VibGUgb2Zmc2V0LCBP
cGVyYXRpb25UeXBlIHR5cGUpCi0gICAgICAgIDogRmlsdGVyT3BlcmF0aW9uKHR5cGUpCi0gICAg
ICAgICwgbV9hbXBsaXR1ZGUoYW1wbGl0dWRlKQotICAgICAgICAsIG1fZXhwb25lbnQoZXhwb25l
bnQpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBkb3Vi
bGUgbV9hbXBsaXR1ZGU7Ci0gICAgZG91YmxlIG1fZXhwb25lbnQ7Ci0gICAgZG91YmxlIG1fb2Zm
c2V0OwotfTsKLQotY2xhc3MgQmx1ckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsdXJGaWx0ZXJPcGVyYXRp
b24+IGNyZWF0ZShMZW5ndGggc3RkRGV2aWF0aW9uLCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsdXJGaWx0ZXJPcGVyYXRpb24oc3RkRGV2
aWF0aW9uLCB0eXBlKSk7Ci0gICAgfQotCi0gICAgTGVuZ3RoIHN0ZERldmlhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RkRGV2aWF0aW9uOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c09w
YWNpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIG1vdmVzUGl4
ZWxzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gYmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpOwotCi1wcml2YXRlOgot
ICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiogb3RoZXIgPSBzdGF0
aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICByZXR1cm4g
bV9zdGREZXZpYXRpb24gPT0gb3RoZXItPm1fc3RkRGV2aWF0aW9uOwotICAgIH0KLQotICAgIEJs
dXJGaWx0ZXJPcGVyYXRpb24oTGVuZ3RoIHN0ZERldmlhdGlvbiwgT3BlcmF0aW9uVHlwZSB0eXBl
KQotICAgICAgICA6IEZpbHRlck9wZXJhdGlvbih0eXBlKQotICAgICAgICAsIG1fc3RkRGV2aWF0
aW9uKHN0ZERldmlhdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgTGVuZ3RoIG1fc3RkRGV2aWF0
aW9uOwotfTsKLQotY2xhc3MgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0
ZXJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShjb25zdCBJbnRQb2ludCYgbG9jYXRpb24sIGludCBzdGRE
ZXZpYXRpb24sIENvbG9yIGNvbG9yLCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24obG9jYXRpb24s
IHN0ZERldmlhdGlvbiwgY29sb3IsIHR5cGUpKTsKLSAgICB9Ci0KLSAgICBpbnQgeCgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9Ci0gICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBt
X2xvY2F0aW9uLnkoKTsgfQotICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhdGlvbjsgfQotICAgIGludCBzdGREZXZpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
ZERldmlhdGlvbjsgfQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQotCi0gICAgdmlydHVhbCBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0
IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNz
dGhyb3VnaCA9IGZhbHNlKTsKLQotcHJpdmF0ZToKLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
aXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICByZXR1cm4gbV9sb2NhdGlvbiA9
PSBvdGhlci0+bV9sb2NhdGlvbiAmJiBtX3N0ZERldmlhdGlvbiA9PSBvdGhlci0+bV9zdGREZXZp
YXRpb24gJiYgbV9jb2xvciA9PSBvdGhlci0+bV9jb2xvcjsKLSAgICB9Ci0KLSAgICBEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uKGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgaW50IHN0ZERldmlh
dGlvbiwgQ29sb3IgY29sb3IsIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBGaWx0ZXJP
cGVyYXRpb24odHlwZSkKLSAgICAgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQotICAgICAgICAs
IG1fc3RkRGV2aWF0aW9uKHN0ZERldmlhdGlvbikKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBtX2xvY2F0aW9uOyAvLyBGSVhNRTogc2hvdWxk
IGxvY2F0aW9uIGJlIGluIExlbmd0aHM/Ci0gICAgaW50IG1fc3RkRGV2aWF0aW9uOwotICAgIENv
bG9yIG1fY29sb3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0KLSNlbmRpZiAvLyBGaWx0ZXJPcGVyYXRpb25faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNjU5NDMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIK
LQotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBvdXRzZXRTaXplRm9y
Qmx1cihmbG9hdCBzdGREZXZpYXRpb24pCi17Ci0gICAgdW5zaWduZWQga2VybmVsU2l6ZVggPSAw
OwotICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZID0gMDsKLSAgICBGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RkRGV2
aWF0aW9uLCBzdGREZXZpYXRpb24pOwotCi0gICAgSW50U2l6ZSBvdXRzZXQ7Ci0gICAgLy8gV2Ug
dGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVj
YXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgb3V0c2V0LnNldFdpZHRoKDMg
KiBrZXJuZWxTaXplWCAqIDAuNWYpOwotICAgIG91dHNldC5zZXRIZWlnaHQoMyAqIGtlcm5lbFNp
emVZICogMC41Zik7Ci0KLSAgICByZXR1cm4gb3V0c2V0OwotfQotCi1GaWx0ZXJPcGVyYXRpb25z
OjpGaWx0ZXJPcGVyYXRpb25zKCkKLXsKLX0KLQotRmlsdGVyT3BlcmF0aW9ucyYgRmlsdGVyT3Bl
cmF0aW9uczo6b3BlcmF0b3I9KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG90aGVyKQotewotICAg
IG1fb3BlcmF0aW9ucyA9IG90aGVyLm1fb3BlcmF0aW9uczsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLWJvb2wgRmlsdGVyT3BlcmF0aW9uczo6b3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBvKSBjb25zdAotewotICAgIGlmIChtX29wZXJhdGlvbnMuc2l6ZSgpICE9IG8ubV9vcGVy
YXRpb25zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICB1bnNp
Z25lZCBzID0gbV9vcGVyYXRpb25zLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgczsgaSsrKSB7Ci0gICAgICAgIGlmICgqbV9vcGVyYXRpb25zW2ldICE9ICpvLm1fb3BlcmF0
aW9uc1tpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgRmlsdGVyT3BlcmF0aW9uczo6b3BlcmF0aW9uc01hdGNoKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAotewotICAgIHNpemVfdCBudW1PcGVy
YXRpb25zID0gb3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICAvLyBJZiB0aGUgc2l6ZXMgb2YgdGhl
IGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2gKLSAgICBp
ZiAobnVtT3BlcmF0aW9ucyAhPSBvdGhlci5vcGVyYXRpb25zKCkuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHR5cGVzIG9mIGVhY2ggZnVuY3Rpb24g
YXJlIG5vdCB0aGUgc2FtZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1PcGVyYXRpb25zOyArK2kpIHsKLSAgICAgICAgaWYgKCFvcGVyYXRpb25z
KClbaV0tPmlzU2FtZVR5cGUoKm90aGVyLm9wZXJhdGlvbnMoKVtpXSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKENT
U19TSEFERVJTKQotYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjpoYXNDdXN0b21GaWx0ZXIoKSBjb25z
dAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vcGVyYXRpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gbV9vcGVy
YXRpb25zLmF0KGkpLT5nZXRPcGVyYXRpb25UeXBlKCk7Ci0gICAgICAgIGlmICh0eXBlID09IEZp
bHRlck9wZXJhdGlvbjo6Q1VTVE9NIHx8IHR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFU
RURfQ1VTVE9NKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLSNlbmRpZgotCi1ib29sIEZpbHRlck9wZXJhdGlvbnM6Omhhc1JlZmVyZW5jZUZp
bHRlcigpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fb3BlcmF0aW9ucy5hdChpKS0+Z2V0T3BlcmF0
aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBGaWx0ZXJPcGVy
YXRpb25zOjpoYXNPdXRzZXRzKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IG1fb3BlcmF0aW9ucy5hdChpKS5nZXQoKS0+Z2V0
T3BlcmF0aW9uVHlwZSgpOwotICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVy
YXRpb246OkJMVVIgfHwgb3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hB
RE9XKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotRmlsdGVyT3V0c2V0cyBGaWx0ZXJPcGVyYXRpb25zOjpvdXRzZXRzKCkgY29uc3QKLXsK
LSAgICBGaWx0ZXJPdXRzZXRzIHRvdGFsT3V0c2V0czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9IG1fb3BlcmF0aW9ucy5hdChpKS5nZXQoKTsKLSAgICAgICAgc3dp
dGNoIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgQmx1ckZpbHRlck9wZXJhdGlv
biogYmx1ck9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1
ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgICAgICAg
ICBJbnRTaXplIG91dHNldFNpemUgPSBvdXRzZXRTaXplRm9yQmx1cihzdGREZXZpYXRpb24pOwot
ICAgICAgICAgICAgRmlsdGVyT3V0c2V0cyBvdXRzZXRzKG91dHNldFNpemUuaGVpZ2h0KCksIG91
dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIHRvdGFsT3V0c2V0cyArPSBvdXRzZXRzOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9X
OiB7Ci0gICAgICAgICAgICBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBkcm9wU2hhZG93T3Bl
cmF0aW9uID0gc3RhdGljX2Nhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBJbnRTaXplIG91dHNldFNpemUgPSBvdXRzZXRTaXplRm9y
Qmx1cihkcm9wU2hhZG93T3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBG
aWx0ZXJPdXRzZXRzIG91dHNldHMoCi0gICAgICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0
U2l6ZS5oZWlnaHQoKSAtIGRyb3BTaGFkb3dPcGVyYXRpb24tPnkoKSksCi0gICAgICAgICAgICAg
ICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgZHJvcFNoYWRvd09wZXJhdGlvbi0+
eCgpKSwKLSAgICAgICAgICAgICAgICBzdGQ6Om1heCgwLCBvdXRzZXRTaXplLmhlaWdodCgpICsg
ZHJvcFNoYWRvd09wZXJhdGlvbi0+eSgpKSwKLSAgICAgICAgICAgICAgICBzdGQ6Om1heCgwLCBv
dXRzZXRTaXplLndpZHRoKCkgLSBkcm9wU2hhZG93T3BlcmF0aW9uLT54KCkpCi0gICAgICAgICAg
ICApOwotICAgICAgICAgICAgdG90YWxPdXRzZXRzICs9IG91dHNldHM7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNVU1RPTToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZB
TElEQVRFRF9DVVNUT006IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGluY2x1ZGUg
dGhlIGZpbHRlciBtYXJnaW5zIGhlcmUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0MDAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiB0b3RhbE91dHNldHM7Ci19Ci0KLWJvb2wgRmlsdGVyT3Bl
cmF0aW9uczo6aGFzRmlsdGVyVGhhdEFmZmVjdHNPcGFjaXR5KCkgY29uc3QKLXsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYg
KG1fb3BlcmF0aW9uc1tpXS0+YWZmZWN0c09wYWNpdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjpoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vcGVyYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICBpZiAobV9vcGVyYXRpb25zW2ld
LT5tb3Zlc1BpeGVscygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwOWEyZDhmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgRmlsdGVyT3BlcmF0aW9uc19oCi0jZGVmaW5lIEZpbHRl
ck9wZXJhdGlvbnNfaAotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotCi0jaW5jbHVkZSAiRmls
dGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdHlwZWRlZiBJbnRSZWN0RXh0ZW50IEZpbHRlck91dHNldHM7Ci0KLWNsYXNzIEZpbHRl
ck9wZXJhdGlvbnMgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IEZpbHRlck9wZXJhdGlvbnMoKTsKLSAgICBGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG90aGVyKSB7ICp0aGlzID0gb3RoZXI7IH0KLSAgICAKLSAgICBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRvcj0oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotICAgIAotICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgY29uc3Q7Ci0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG8pIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpCi0g
ICAgewotICAgICAgICBtX29wZXJhdGlvbnMuY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgVmVj
dG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIG9wZXJhdGlvbnMoKSB7IHJldHVybiBtX29w
ZXJhdGlvbnM7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYg
b3BlcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9uczsgfQotCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fb3BlcmF0aW9ucy5zaXplKCk7IH0KLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KLSAgICBjb25z
dCBGaWx0ZXJPcGVyYXRpb24qIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXgg
PCBtX29wZXJhdGlvbnMuc2l6ZSgpID8gbV9vcGVyYXRpb25zLmF0KGluZGV4KS5nZXQoKSA6IDA7
IH0KLQotICAgIGJvb2wgb3BlcmF0aW9uc01hdGNoKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSBj
b25zdDsKLQotICAgIGJvb2wgaGFzT3V0c2V0cygpIGNvbnN0OwotICAgIEZpbHRlck91dHNldHMg
b3V0c2V0cygpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHko
KSBjb25zdDsKLSAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0OwotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGJvb2wgaGFzQ3VzdG9tRmlsdGVyKCkgY29uc3Q7
Ci0jZW5kaWYKLSAgICBib29sIGhhc1JlZmVyZW5jZUZpbHRlcigpIGNvbnN0OwotcHJpdmF0ZToK
LSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0KLSNlbmRpZiAvLyBGaWx0ZXJPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGVhNGQ1Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgot
ICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFt
ZXRlci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNs
dWRlICJMYXlvdXRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24oUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCAKLSAgICBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0JiBzb3J0ZWRQYXJhbWV0ZXJzLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVz
aENvbHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAgIDogRmlsdGVyT3Bl
cmF0aW9uKFZBTElEQVRFRF9DVVNUT00pCi0gICAgLCBtX3ZhbGlkYXRlZFByb2dyYW0odmFsaWRh
dGVkUHJvZ3JhbSkKLSAgICAsIG1fcGFyYW1ldGVycyhzb3J0ZWRQYXJhbWV0ZXJzKQotICAgICwg
bV9tZXNoUm93cyhtZXNoUm93cykKLSAgICAsIG1fbWVzaENvbHVtbnMobWVzaENvbHVtbnMpCi0g
ICAgLCBtX21lc2hUeXBlKG1lc2hUeXBlKQotewotfQotCi1WYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb246On5WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24oKQotewotfQotCi1QYXNz
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpi
bGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91
dFNpemUmIHNpemUsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQotewotICAgIFVOVVNFRF9QQVJB
TShwcm9ncmVzcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHNpemUpOwotICAgIFVOVVNFRF9QQVJBTShi
bGVuZFRvUGFzc3Rocm91Z2gpOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShDU1NfU0hBREVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWJiMGQ1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uX2gKLSNkZWZpbmUgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIK
LSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmgiCi0jaW5jbHVkZSAiRmlsdGVy
T3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW07Ci0KLWNsYXNzIFZhbGlk
YXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRh
dGVkUHJvZ3JhbSwgCi0gICAgICAgIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNv
cnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywg
Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbih2YWxpZGF0ZWRQcm9ncmFt
LCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB+VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBib29sIG1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBibGVuZGluZ05lZWRzUmVuZGVyZXJTaXplKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExh
eW91dFNpemUmLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKTsKLQotICAgIEN1c3Rv
bUZpbHRlclZhbGlkYXRlZFByb2dyYW0qIHZhbGlkYXRlZFByb2dyYW0oKSBjb25zdCB7IHJldHVy
biBtX3ZhbGlkYXRlZFByb2dyYW0uZ2V0KCk7IH0KLSAgICBjb25zdCBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXJMaXN0JiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9Ci0K
LSAgICB1bnNpZ25lZCBtZXNoUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaFJvd3M7IH0KLSAg
ICB1bnNpZ25lZCBtZXNoQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaENvbHVtbnM7IH0K
LQotICAgIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXNoVHlwZTsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlw
ZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjb25zdCBWYWxpZGF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsaWRh
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICByZXR1cm4gbV92YWxpZGF0
ZWRQcm9ncmFtLmdldCgpID09IG90aGVyLT5tX3ZhbGlkYXRlZFByb2dyYW0uZ2V0KCkKLSAgICAg
ICAgICAgICYmIG1fbWVzaFJvd3MgPT0gb3RoZXItPm1fbWVzaFJvd3MKLSAgICAgICAgICAgICYm
IG1fbWVzaENvbHVtbnMgPT0gb3RoZXItPm1fbWVzaENvbHVtbnMKLSAgICAgICAgICAgICYmIG1f
bWVzaFR5cGUgPT0gb3RoZXItPm1fbWVzaFR5cGUKLSAgICAgICAgICAgICYmIG1fcGFyYW1ldGVy
cyA9PSBvdGhlci0+bV9wYXJhbWV0ZXJzOwotICAgIH0KLQotICAgIFZhbGlkYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbihQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+LCBj
b25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2ln
bmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSk7Ci0KLSAgICBSZWZQdHI8Q3Vz
dG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gbV92YWxpZGF0ZWRQcm9ncmFtOwotCi0gICAgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBtX3BhcmFtZXRlcnM7Ci0gICAgdW5zaWduZWQgbV9tZXNo
Um93czsKLSAgICB1bnNpZ25lZCBtX21lc2hDb2x1bW5zOwotICAgIEN1c3RvbUZpbHRlck1lc2hU
eXBlIG1fbWVzaFR5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoQ1NTX1NIQURFUlMpCi0KLSNlbmRpZiAvLyBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0N1
c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jZGUzNThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMK
KyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisg
KiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0N1c3RvbUZpbHRlck9wZXJhdGlvbjo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2ln
bmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKKyAgICA6IEZp
bHRlck9wZXJhdGlvbihDVVNUT00pCisgICAgLCBtX3Byb2dyYW0ocHJvZ3JhbSkKKyAgICAsIG1f
cGFyYW1ldGVycyhzb3J0ZWRQYXJhbWV0ZXJzKQorICAgICwgbV9tZXNoUm93cyhtZXNoUm93cykK
KyAgICAsIG1fbWVzaENvbHVtbnMobWVzaENvbHVtbnMpCisgICAgLCBtX21lc2hUeXBlKG1lc2hU
eXBlKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYXJhbWV0ZXJzIGFyZSBhbHd5YXMg
c29ydGVkIGJ5IG5hbWUuIFdlIHVzZSB0aGF0IHRvIG1lcmdlIHR3byBDdXN0b21GaWx0ZXJPcGVy
YXRpb25zIGluIGFuaW1hdGlvbnMuCisgICAgQVNTRVJUKG1fcGFyYW1ldGVycy5jaGVja0FscGhh
YmV0aWNhbE9yZGVyKCkpOworfQorICAgIAorQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjp+Q3VzdG9t
RmlsdGVyT3BlcmF0aW9uKCkKK3sKK30KKworUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEN1
c3RvbUZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGNvbnN0IExheW91dFNpemUmIHNpemUsIGJvb2wgYmxlbmRUb1Bhc3N0
aHJvdWdoKQoreworICAgIC8vIEZJWE1FOiBUaGVyZSdzIG5vIHdheSB0byBkZWNpZGUgd2hhdCBp
cyB0aGUgInBhc3N0aHJvdWdoIGZpbHRlciIgZm9yIHNoYWRlcnMgdXNpbmcgdGhlIGN1cnJlbnQg
Q1NTIFN5bnRheC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODQ5MDMKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcu
Y2dpP2lkPTE2ODYxCisgICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCB8fCAhZnJvbSB8fCAhZnJv
bS0+aXNTYW1lVHlwZSgqdGhpcykpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIAorICAgIGNv
bnN0IEN1c3RvbUZpbHRlck9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKj4oZnJvbSk7CisgICAgaWYgKG1fcHJvZ3JhbS5nZXQoKSAhPSBm
cm9tT3AtPm1fcHJvZ3JhbS5nZXQoKQorICAgICAgICB8fCBtX21lc2hSb3dzICE9IGZyb21PcC0+
bV9tZXNoUm93cworICAgICAgICB8fCBtX21lc2hDb2x1bW5zICE9IGZyb21PcC0+bV9tZXNoQ29s
dW1ucworICAgICAgICB8fCBtX21lc2hUeXBlICE9IGZyb21PcC0+bV9tZXNoVHlwZSkKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBhbmlt
YXRlZFBhcmFtZXRlcnM7CisgICAgbV9wYXJhbWV0ZXJzLmJsZW5kKGZyb21PcC0+bV9wYXJhbWV0
ZXJzLCBwcm9ncmVzcywgc2l6ZSwgYW5pbWF0ZWRQYXJhbWV0ZXJzKTsKKyAgICByZXR1cm4gQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobV9wcm9ncmFtLCBhbmltYXRlZFBhcmFtZXRlcnMs
IG1fbWVzaFJvd3MsIG1fbWVzaENvbHVtbnMsIG1fbWVzaFR5cGUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxYzZhNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9DdXN0b21GaWx0ZXJPcGVyYXRp
b24uaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCisjZGVmaW5lIEN1c3RvbUZpbHRlck9wZXJh
dGlvbl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
Q29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24u
aCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
Q1NTIFNoYWRlcnMKKworY2xhc3MgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRl
ck9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFt
LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBzb3J0ZWRQYXJhbWV0ZXJzLCB1bnNp
Z25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBl
IG1lc2hUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21GaWx0
ZXJPcGVyYXRpb24ocHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1
bW5zLCBtZXNoVHlwZSkpOworICAgIH0KKyAgICAKKyAgICBDdXN0b21GaWx0ZXJQcm9ncmFtKiBw
cm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmFtLmdldCgpOyB9CisgICAgdm9pZCBzZXRQ
cm9ncmFtKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSkgeyBtX3Byb2dy
YW0gPSBwcm9ncmFtOyB9CisgICAgCisgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dCYgcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIAorICAg
IHVuc2lnbmVkIG1lc2hSb3dzKCkgY29uc3QgeyByZXR1cm4gbV9tZXNoUm93czsgfQorICAgIHVu
c2lnbmVkIG1lc2hDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9tZXNoQ29sdW1uczsgfQorCisg
ICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX21lc2hU
eXBlOyB9CisgICAgCisgICAgdmlydHVhbCB+Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKCk7CisgICAg
CisgICAgdmlydHVhbCBib29sIGFmZmVjdHNPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBtb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgYmxlbmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgTGF5b3V0U2l6ZSYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpOworCitwcm90
ZWN0ZWQ6CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UHJvZ3JhbT4sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLCB1bnNpZ25lZCBtZXNo
Um93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBvKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IEN1c3RvbUZpbHRlck9wZXJhdGlv
biogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qPigmbyk7
CisgICAgICAgIHJldHVybiBtX3Byb2dyYW0uZ2V0KCkgPT0gb3RoZXItPm1fcHJvZ3JhbS5nZXQo
KQorICAgICAgICAgICAgJiYgbV9tZXNoUm93cyA9PSBvdGhlci0+bV9tZXNoUm93cworICAgICAg
ICAgICAgJiYgbV9tZXNoQ29sdW1ucyA9PSBvdGhlci0+bV9tZXNoQ29sdW1ucworICAgICAgICAg
ICAgJiYgbV9tZXNoVHlwZSA9PSBvdGhlci0+bV9tZXNoVHlwZQorICAgICAgICAgICAgJiYgbV9w
YXJhbWV0ZXJzID09IG90aGVyLT5tX3BhcmFtZXRlcnM7CisgICAgfQorCisgICAgUmVmUHRyPEN1
c3RvbUZpbHRlclByb2dyYW0+IG1fcHJvZ3JhbTsKKyAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0IG1fcGFyYW1ldGVyczsKKyAgICAKKyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAgIHVu
c2lnbmVkIG1fbWVzaENvbHVtbnM7CisgICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbV9tZXNoVHlw
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1Nf
U0hBREVSUykKKworI2VuZGlmIC8vIEN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzc5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9uLmNwcApAQCAtMCww
ICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKKworI2luY2x1ZGUgIkFu
aW1hdGlvblV0aWxpdGllcy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJDYWNoZWRT
VkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24oY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQsIE9wZXJhdGlvblR5cGUgdHlwZSkK
KyAgICA6IEZpbHRlck9wZXJhdGlvbih0eXBlKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9m
cmFnbWVudChmcmFnbWVudCkKK3sKK30KKworUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjp+UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uKCkKK3sKK30KKworI2lmIEVOQUJMRShTVkcpCit2b2lkIFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoUGFz
c093blB0cjxDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZT4gY2FjaGVkU1ZHRG9jdW1lbnRSZWZl
cmVuY2UpCit7CisgICAgbV9jYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSA9IGNhY2hlZFNWR0Rv
Y3VtZW50UmVmZXJlbmNlOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpibGVuZChjb25zdCBGaWx0ZXJPcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCit7
CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAKKyAgICBpZiAoYmxlbmRUb1Bhc3N0aHJvdWdoKQorICAgICAgICByZXR1
cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5k
KG1fYW1vdW50LCBwYXNzdGhyb3VnaEFtb3VudCgpLCBwcm9ncmVzcyksIG1fdHlwZSk7CisgICAg
ICAgIAorICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmcm9t
KTsKKyAgICBkb3VibGUgZnJvbUFtb3VudCA9IGZyb21PcCA/IGZyb21PcC0+YW1vdW50KCkgOiBw
YXNzdGhyb3VnaEFtb3VudCgpOworICAgIHJldHVybiBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHByb2dy
ZXNzKSwgbV90eXBlKTsKK30KKworZG91YmxlIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgewor
ICAgIGNhc2UgR1JBWVNDQUxFOgorICAgIGNhc2UgU0VQSUE6CisgICAgY2FzZSBIVUVfUk9UQVRF
OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFNBVFVSQVRFOgorICAgICAgICByZXR1cm4g
MTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0
aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQorewor
ICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgCisgICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkKKyAgICAgICAgcmV0dXJu
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpi
bGVuZChtX2Ftb3VudCwgcGFzc3Rocm91Z2hBbW91bnQoKSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwor
ICAgICAgICAKKyAgICBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
KiBmcm9tT3AgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKj4oZnJvbSk7CisgICAgZG91YmxlIGZyb21BbW91bnQgPSBmcm9tT3AgPyBmcm9t
T3AtPmFtb3VudCgpIDogcGFzc3Rocm91Z2hBbW91bnQoKTsKKyAgICByZXR1cm4gQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21B
bW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7Cit9CisKK2RvdWJsZSBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpwYXNzdGhyb3VnaEFtb3VudCgpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIE9QQUNJVFk6CisgICAgICAgIHJl
dHVybiAxOworICAgIGNhc2UgSU5WRVJUOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIENP
TlRSQVNUOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEJSSUdIVE5FU1M6CisgICAgICAg
IHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiBHYW1tYUZpbHRlck9wZXJhdGlvbjo6YmxlbmQoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoKQoreworICAgIGlmIChm
cm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgCisgICAgaWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkKKyAgICAgICAgcmV0dXJuIEdhbW1hRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2FtcGxp
dHVkZSwgMS4wLCBwcm9ncmVzcyksCisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2V4cG9u
ZW50LCAxLjAsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fb2Zmc2V0
LCAwLjAsIHByb2dyZXNzKSwgbV90eXBlKTsKKyAgICAgICAgCisgICAgY29uc3QgR2FtbWFGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdhbW1hRmlsdGVyT3BlcmF0
aW9uKj4oZnJvbSk7CisgICAgZG91YmxlIGZyb21BbXBsaXR1ZGUgPSBmcm9tT3AgPyBmcm9tT3At
PmFtcGxpdHVkZSgpIDogMTsKKyAgICBkb3VibGUgZnJvbUV4cG9uZW50ID0gZnJvbU9wID8gZnJv
bU9wLT5leHBvbmVudCgpIDogMTsKKyAgICBkb3VibGUgZnJvbU9mZnNldCA9IGZyb21PcCA/IGZy
b21PcC0+b2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBHYW1tYUZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tQW1wbGl0dWRlLCBtX2FtcGxpdHVkZSwg
cHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tRXhwb25lbnQsIG1fZXhwb25l
bnQsIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbU9mZnNldCwgbV9vZmZz
ZXQsIHByb2dyZXNzKSwgbV90eXBlKTsKK30KKworUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IEJsdXJGaWx0ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwg
ZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCkKK3sKKyAgICBpZiAoZnJv
bSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCisgICAgICAgIHJldHVybiB0aGlzOworCisg
ICAgTGVuZ3RoVHlwZSBsZW5ndGhUeXBlID0gbV9zdGREZXZpYXRpb24udHlwZSgpOworCisgICAg
aWYgKGJsZW5kVG9QYXNzdGhyb3VnaCkKKyAgICAgICAgcmV0dXJuIEJsdXJGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgobGVuZ3RoVHlwZSkuYmxlbmQobV9zdGREZXZpYXRpb24sIHByb2dy
ZXNzKSwgbV90eXBlKTsKKworICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPihmcm9tKTsKKyAgICBMZW5n
dGggZnJvbUxlbmd0aCA9IGZyb21PcCA/IGZyb21PcC0+bV9zdGREZXZpYXRpb24gOiBMZW5ndGgo
bGVuZ3RoVHlwZSk7CisgICAgcmV0dXJuIEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShtX3N0
ZERldmlhdGlvbi5ibGVuZChmcm9tTGVuZ3RoLCBwcm9ncmVzcyksIG1fdHlwZSk7Cit9CisKK1Bh
c3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvUGFzc3Rocm91Z2gpCit7CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRo
aXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIGlmIChibGVuZFRvUGFzc3Rocm91Z2gp
CisgICAgICAgIHJldHVybiBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCisgICAg
ICAgICAgICBXZWJDb3JlOjpibGVuZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyks
CisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3Mp
LAorICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50KSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgbV90eXBlKTsKKworICAgIGNvbnN0IERy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24qPihmcm9tKTsKKyAgICBJbnRQb2ludCBmcm9tTG9jYXRpb24g
PSBmcm9tT3AgPyBmcm9tT3AtPmxvY2F0aW9uKCkgOiBJbnRQb2ludCgpOworICAgIGludCBmcm9t
U3RkRGV2aWF0aW9uID0gZnJvbU9wID8gZnJvbU9wLT5zdGREZXZpYXRpb24oKSA6IDA7CisgICAg
Q29sb3IgZnJvbUNvbG9yID0gZnJvbU9wID8gZnJvbU9wLT5jb2xvcigpIDogQ29sb3IoQ29sb3I6
OnRyYW5zcGFyZW50KTsKKyAgICAKKyAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRp
b24sIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVN0ZERldmlhdGlvbiwg
bV9zdGREZXZpYXRpb24sIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbUNv
bG9yLCBtX2NvbG9yLCBwcm9ncmVzcyksIG1fdHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfRklMVEVSUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZjYxZjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0ZpbHRlck9wZXJhdGlvbi5oCkBAIC0wLDAgKzEsMzgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBGaWx0ZXJPcGVyYXRpb25faAorI2RlZmluZSBGaWx0ZXJPcGVyYXRp
b25faAorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVk
ZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjZW5kaWYKKworLy8gQW5ub3lpbmdseSwgd2luZ2Rp
LmggI2RlZmluZXMgdGhpcy4KKyNpZmRlZiBQQVNTVEhST1VHSAorI3VuZGVmIFBBU1NUSFJPVUdI
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDU1MgRmlsdGVycworCisjaWYg
RU5BQkxFKFNWRykKK2NsYXNzIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEZpbHRlck9wZXJhdGlvbj4geworI2Vsc2UKK2NsYXNzIEZp
bHRlck9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlck9wZXJhdGlvbj4geworI2Vu
ZGlmCitwdWJsaWM6CisgICAgZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgUkVGRVJFTkNF
LCAvLyB1cmwoI3NvbWVmaWx0ZXIpCisgICAgICAgIEdSQVlTQ0FMRSwKKyAgICAgICAgU0VQSUEs
CisgICAgICAgIFNBVFVSQVRFLAorICAgICAgICBIVUVfUk9UQVRFLAorICAgICAgICBJTlZFUlQs
CisgICAgICAgIE9QQUNJVFksCisgICAgICAgIEJSSUdIVE5FU1MsCisgICAgICAgIENPTlRSQVNU
LAorICAgICAgICBCTFVSLAorICAgICAgICBEUk9QX1NIQURPVywKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgICAgIENVU1RPTSwKKyAgICAgICAgVkFMSURBVEVEX0NVU1RPTSwKKyNlbmRp
ZgorICAgICAgICBQQVNTVEhST1VHSCwKKyAgICAgICAgTk9ORQorICAgIH07CisKKyAgICB2aXJ0
dWFsIH5GaWx0ZXJPcGVyYXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBG
aWx0ZXJPcGVyYXRpb24qIC8qZnJvbSovLCBkb3VibGUgLypwcm9ncmVzcyovLCBib29sIC8qYmxl
bmRUb1Bhc3N0aHJvdWdoKi8gPSBmYWxzZSkKKyAgICB7IAorICAgICAgICBBU1NFUlQoIWJsZW5k
aW5nTmVlZHNSZW5kZXJlclNpemUoKSk7CisgICAgICAgIHJldHVybiAwOyAKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIC8qZnJvbSovLCBkb3VibGUgLypwcm9ncmVzcyovLCBjb25zdCBMYXlvdXRTaXpl
JiwgYm9vbCAvKmJsZW5kVG9QYXNzdGhyb3VnaCovID0gZmFsc2UpCisgICAgeyAKKyAgICAgICAg
QVNTRVJUKGJsZW5kaW5nTmVlZHNSZW5kZXJlclNpemUoKSk7CisgICAgICAgIHJldHVybiAwOyAK
KyAgICB9CisKKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0
IEZpbHRlck9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkg
PT0gbV90eXBlOyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBUcnVlIGlmIHRoZSBhbHBoYSBjaGFubmVsIG9mIGFu
eSBwaXhlbCBjYW4gY2hhbmdlIHVuZGVyIHRoaXMgb3BlcmF0aW9uLgorICAgIHZpcnR1YWwgYm9v
bCBhZmZlY3RzT3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgLy8gVHJ1ZSBp
ZiB0aGUgdGhlIHZhbHVlIG9mIG9uZSBwaXhlbCBjYW4gYWZmZWN0IHRoZSB2YWx1ZSBvZiBhbm90
aGVyIHBpeGVsIHVuZGVyIHRoaXMgb3BlcmF0aW9uLCBzdWNoIGFzIGJsdXIuCisgICAgdmlydHVh
bCBib29sIG1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBUcnVl
IGlmIHRoZSBmaWx0ZXIgbmVlZHMgdGhlIHNpemUgb2YgdGhlIGJveCBpbiBvcmRlciB0byBjYWxj
dWxhdGUgdGhlIGFuaW1hdGlvbnMuCisgICAgdmlydHVhbCBib29sIGJsZW5kaW5nTmVlZHNSZW5k
ZXJlclNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgRmls
dGVyT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkK
KyAgICB7CisgICAgfQorCisgICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBE
ZWZhdWx0RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVmYXVsdEZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKE9w
ZXJhdGlvblR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVm
YXVsdEZpbHRlck9wZXJhdGlvbih0eXBlKSk7CisgICAgfQorCitwcml2YXRlOgorCisgICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzU2FtZVR5cGUobyk7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIGlzRGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIERlZmF1bHRGaWx0
ZXJPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IEZpbHRlck9wZXJhdGlv
bih0eXBlKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBQYXNzdGhyb3VnaEZpbHRlck9wZXJh
dGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbigpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShv
KTsKKyAgICB9CisKKyAgICBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbigpCisgICAgICAgIDog
RmlsdGVyT3BlcmF0aW9uKFBBU1NUSFJPVUdIKQorICAgIHsKKyAgICB9Cit9OworCitjbGFzcyBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBmcmFnbWVudCwgT3BlcmF0aW9uVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24odXJsLCBmcmFnbWVudCwgdHlwZSkpOworICAgIH0KKyAgICB+UmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIG1vdmVzUGl4ZWxzKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYWdtZW50OyB9CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIENhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlKiBjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7IH0KKyAgICB2b2lkIHNldENhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlKFBhc3NPd25QdHI8Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U+
KTsKKyNlbmRpZgorCisgICAgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlckVmZmVjdC5nZXQoKTsgfQorICAgIHZvaWQgc2V0RmlsdGVyRWZmZWN0KFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBmaWx0ZXJFZmZlY3QpIHsgbV9maWx0ZXJFZmZlY3QgPSBm
aWx0ZXJFZmZlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24o
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQsIE9wZXJhdGlvblR5cGUp
OworCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBv
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qIG90
aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4oJm8pOwor
ICAgICAgICByZXR1cm4gbV91cmwgPT0gb3RoZXItPm1fdXJsOworICAgIH0KKworICAgIFN0cmlu
ZyBtX3VybDsKKyAgICBTdHJpbmcgbV9mcmFnbWVudDsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIE93
blB0cjxDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZT4gbV9jYWNoZWRTVkdEb2N1bWVudFJlZmVy
ZW5jZTsKKyNlbmRpZgorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fZmlsdGVyRWZmZWN0Owor
fTsKKworLy8gR1JBWVNDQUxFLCBTRVBJQSwgU0FUVVJBVEUgYW5kIEhVRV9ST1RBVEUgYXJlIHZh
cmlhdGlvbnMgb24gYSBiYXNpYyBjb2xvciBtYXRyaXggZWZmZWN0LgorLy8gRm9yIEhVRV9ST1RB
VEUsIHRoZSBhbmdsZSBvZiByb3RhdGlvbiBpcyBzdG9yZWQgaW4gbV9hbW91bnQuCitjbGFzcyBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbW91bnQsIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJh
dGlvbihhbW91bnQsIHR5cGUpKTsKKyAgICB9CisKKyAgICBkb3VibGUgYW1vdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hbW91bnQ7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8pIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIG90aGVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KCZvKTsK
KyAgICAgICAgcmV0dXJuIG1fYW1vdW50ID09IG90aGVyLT5tX2Ftb3VudDsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIHBhc3N0aHJvdWdoQW1vdW50KCkgY29uc3Q7CisgICAgCisgICAgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbihkb3VibGUgYW1vdW50LCBPcGVyYXRpb25UeXBlIHR5
cGUpCisgICAgICAgIDogRmlsdGVyT3BlcmF0aW9uKHR5cGUpCisgICAgICAgICwgbV9hbW91bnQo
YW1vdW50KQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgbV9hbW91bnQ7Cit9OworCisvLyBJ
TlZFUlQsIEJSSUdIVE5FU1MsIENPTlRSQVNUIGFuZCBPUEFDSVRZIGFyZSB2YXJpYXRpb25zIG9u
IGEgYmFzaWMgY29tcG9uZW50IHRyYW5zZmVyIGVmZmVjdC4KK2NsYXNzIEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPiBjcmVhdGUoZG91YmxlIGFtb3VudCwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKGFtb3VudCwgdHlwZSkpOworICAgIH0KKworICAgIGRvdWJsZSBhbW91bnQoKSBj
b25zdCB7IHJldHVybiBtX2Ftb3VudDsgfQorCisgICAgdmlydHVhbCBib29sIGFmZmVjdHNPcGFj
aXR5KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IE9QQUNJVFk7IH0KKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKTsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mIG8pIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1fYW1vdW50
ID09IG90aGVyLT5tX2Ftb3VudDsKKyAgICB9CisKKyAgICBkb3VibGUgcGFzc3Rocm91Z2hBbW91
bnQoKSBjb25zdDsKKworICAgIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24o
ZG91YmxlIGFtb3VudCwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IEZpbHRlck9wZXJh
dGlvbih0eXBlKQorICAgICAgICAsIG1fYW1vdW50KGFtb3VudCkKKyAgICB7CisgICAgfQorCisg
ICAgZG91YmxlIG1fYW1vdW50OworfTsKKworY2xhc3MgR2FtbWFGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
YW1tYUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbXBsaXR1ZGUsIGRvdWJsZSBleHBv
bmVudCwgZG91YmxlIG9mZnNldCwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1tYUZpbHRlck9wZXJhdGlvbihhbXBsaXR1ZGUsIGV4cG9u
ZW50LCBvZmZzZXQsIHR5cGUpKTsKKyAgICB9CisKKyAgICBkb3VibGUgYW1wbGl0dWRlKCkgY29u
c3QgeyByZXR1cm4gbV9hbXBsaXR1ZGU7IH0KKyAgICBkb3VibGUgZXhwb25lbnQoKSBjb25zdCB7
IHJldHVybiBtX2V4cG9uZW50OyB9CisgICAgZG91YmxlIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBi
bGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBi
bGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjb25zdCBHYW1tYUZpbHRlck9wZXJhdGlvbiogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBH
YW1tYUZpbHRlck9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1fYW1wbGl0dWRlID09
IG90aGVyLT5tX2FtcGxpdHVkZSAmJiBtX2V4cG9uZW50ID09IG90aGVyLT5tX2V4cG9uZW50ICYm
IG1fb2Zmc2V0ID09IG90aGVyLT5tX29mZnNldDsKKyAgICB9CisKKyAgICBHYW1tYUZpbHRlck9w
ZXJhdGlvbihkb3VibGUgYW1wbGl0dWRlLCBkb3VibGUgZXhwb25lbnQsIGRvdWJsZSBvZmZzZXQs
IE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBGaWx0ZXJPcGVyYXRpb24odHlwZSkKKyAg
ICAgICAgLCBtX2FtcGxpdHVkZShhbXBsaXR1ZGUpCisgICAgICAgICwgbV9leHBvbmVudChleHBv
bmVudCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAgIGRv
dWJsZSBtX2FtcGxpdHVkZTsKKyAgICBkb3VibGUgbV9leHBvbmVudDsKKyAgICBkb3VibGUgbV9v
ZmZzZXQ7Cit9OworCitjbGFzcyBCbHVyRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZpbHRlck9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qmx1ckZpbHRlck9wZXJh
dGlvbj4gY3JlYXRlKExlbmd0aCBzdGREZXZpYXRpb24sIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmx1ckZpbHRlck9wZXJhdGlvbihzdGRE
ZXZpYXRpb24sIHR5cGUpKTsKKyAgICB9CisKKyAgICBMZW5ndGggc3RkRGV2aWF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdGREZXZpYXRpb247IH0KKworICAgIHZpcnR1YWwgYm9vbCBhZmZlY3Rz
T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbW92ZXNQ
aXhlbHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBibGVuZChjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKiBvdGhlciA9IHN0
YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJldHVy
biBtX3N0ZERldmlhdGlvbiA9PSBvdGhlci0+bV9zdGREZXZpYXRpb247CisgICAgfQorCisgICAg
Qmx1ckZpbHRlck9wZXJhdGlvbihMZW5ndGggc3RkRGV2aWF0aW9uLCBPcGVyYXRpb25UeXBlIHR5
cGUpCisgICAgICAgIDogRmlsdGVyT3BlcmF0aW9uKHR5cGUpCisgICAgICAgICwgbV9zdGREZXZp
YXRpb24oc3RkRGV2aWF0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBMZW5ndGggbV9zdGREZXZp
YXRpb247Cit9OworCitjbGFzcyBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEZp
bHRlck9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IEludFBvaW50JiBsb2NhdGlvbiwgaW50IHN0
ZERldmlhdGlvbiwgQ29sb3IgY29sb3IsIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbihsb2NhdGlv
biwgc3RkRGV2aWF0aW9uLCBjb2xvciwgdHlwZSkpOworICAgIH0KKworICAgIGludCB4KCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb24ueSgpOyB9CisgICAgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uOyB9CisgICAgaW50IHN0ZERldmlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RkRGV2aWF0aW9uOyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c09wYWNpdHkoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIG1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmQoY29u
c3QgRmlsdGVyT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bh
c3N0aHJvdWdoID0gZmFsc2UpOworCitwcml2YXRlOgorCisgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IERy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJldHVybiBtX2xvY2F0aW9u
ID09IG90aGVyLT5tX2xvY2F0aW9uICYmIG1fc3RkRGV2aWF0aW9uID09IG90aGVyLT5tX3N0ZERl
dmlhdGlvbiAmJiBtX2NvbG9yID09IG90aGVyLT5tX2NvbG9yOworICAgIH0KKworICAgIERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24oY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uLCBpbnQgc3RkRGV2
aWF0aW9uLCBDb2xvciBjb2xvciwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IEZpbHRl
ck9wZXJhdGlvbih0eXBlKQorICAgICAgICAsIG1fbG9jYXRpb24obG9jYXRpb24pCisgICAgICAg
ICwgbV9zdGREZXZpYXRpb24oc3RkRGV2aWF0aW9uKQorICAgICAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgeworICAgIH0KKworICAgIEludFBvaW50IG1fbG9jYXRpb247IC8vIEZJWE1FOiBzaG91
bGQgbG9jYXRpb24gYmUgaW4gTGVuZ3Rocz8KKyAgICBpbnQgbV9zdGREZXZpYXRpb247CisgICAg
Q29sb3IgbV9jb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShDU1NfRklMVEVSUykKKworI2VuZGlmIC8vIEZpbHRlck9wZXJhdGlvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsdGVyT3BlcmF0aW9ucy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NTk0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb25zLmNw
cApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5s
aW5lIEludFNpemUgb3V0c2V0U2l6ZUZvckJsdXIoZmxvYXQgc3RkRGV2aWF0aW9uKQoreworICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVYID0gMDsKKyAgICB1bnNpZ25lZCBrZXJuZWxTaXplWSA9IDA7
CisgICAgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uKTsKKworICAgIElu
dFNpemUgb3V0c2V0OworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11
bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVz
LgorICAgIG91dHNldC5zZXRXaWR0aCgzICoga2VybmVsU2l6ZVggKiAwLjVmKTsKKyAgICBvdXRz
ZXQuc2V0SGVpZ2h0KDMgKiBrZXJuZWxTaXplWSAqIDAuNWYpOworCisgICAgcmV0dXJuIG91dHNl
dDsKK30KKworRmlsdGVyT3BlcmF0aW9uczo6RmlsdGVyT3BlcmF0aW9ucygpCit7Cit9CisKK0Zp
bHRlck9wZXJhdGlvbnMmIEZpbHRlck9wZXJhdGlvbnM6Om9wZXJhdG9yPShjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBvdGhlcikKK3sKKyAgICBtX29wZXJhdGlvbnMgPSBvdGhlci5tX29wZXJhdGlv
bnM7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIEZpbHRlck9wZXJhdGlvbnM6Om9wZXJh
dG9yPT0oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbykgY29uc3QKK3sKKyAgICBpZiAobV9vcGVy
YXRpb25zLnNpemUoKSAhPSBvLm1fb3BlcmF0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgcyA9IG1fb3BlcmF0aW9ucy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAoKm1fb3Bl
cmF0aW9uc1tpXSAhPSAqby5tX29wZXJhdGlvbnNbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZpbHRlck9wZXJh
dGlvbnM6Om9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvdGhlcikgY29u
c3QKK3sKKyAgICBzaXplX3QgbnVtT3BlcmF0aW9ucyA9IG9wZXJhdGlvbnMoKS5zaXplKCk7Cisg
ICAgLy8gSWYgdGhlIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgdGhl
IGxpc3RzIGRvbid0IG1hdGNoCisgICAgaWYgKG51bU9wZXJhdGlvbnMgIT0gb3RoZXIub3BlcmF0
aW9ucygpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIElmIHRo
ZSB0eXBlcyBvZiBlYWNoIGZ1bmN0aW9uIGFyZSBub3QgdGhlIHNhbWUsIHRoZSBsaXN0cyBkb24n
dCBtYXRjaAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT3BlcmF0aW9uczsgKytpKSB7
CisgICAgICAgIGlmICghb3BlcmF0aW9ucygpW2ldLT5pc1NhbWVUeXBlKCpvdGhlci5vcGVyYXRp
b25zKClbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK2Jvb2wgRmlsdGVyT3BlcmF0aW9u
czo6aGFzQ3VzdG9tRmlsdGVyKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSA9IG1fb3BlcmF0aW9ucy5hdChpKS0+Z2V0T3BlcmF0aW9uVHlwZSgp
OworICAgICAgICBpZiAodHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSB8fCB0eXBlID09
IEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBGaWx0ZXJP
cGVyYXRpb25zOjpoYXNSZWZlcmVuY2VGaWx0ZXIoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9vcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX29w
ZXJhdGlvbnMuYXQoaSktPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJF
RkVSRU5DRSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgRmlsdGVyT3BlcmF0aW9uczo6aGFzT3V0c2V0cygpIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBtX29w
ZXJhdGlvbnMuYXQoaSkuZ2V0KCktPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICAgICAgaWYgKG9w
ZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpCTFVSIHx8IG9wZXJhdGlvblR5cGUgPT0g
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ZpbHRlck91dHNldHMgRmlsdGVyT3BlcmF0
aW9uczo6b3V0c2V0cygpIGNvbnN0Cit7CisgICAgRmlsdGVyT3V0c2V0cyB0b3RhbE91dHNldHM7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXJPcGVyYXRpb24gPSBtX29wZXJhdGlvbnMu
YXQoaSkuZ2V0KCk7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRp
b25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAg
ICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24qIGJsdXJPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxC
bHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKKyAgICAgICAgICAgIGZsb2F0
IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi0+c3RkRGV2
aWF0aW9uKCksIDApOworICAgICAgICAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gb3V0c2V0U2l6
ZUZvckJsdXIoc3RkRGV2aWF0aW9uKTsKKyAgICAgICAgICAgIEZpbHRlck91dHNldHMgb3V0c2V0
cyhvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVp
Z2h0KCksIG91dHNldFNpemUud2lkdGgoKSk7CisgICAgICAgICAgICB0b3RhbE91dHNldHMgKz0g
b3V0c2V0czsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgRHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbiogZHJvcFNoYWRvd09wZXJhdGlvbiA9IHN0YXRpY19jYXN0PERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOworICAgICAgICAgICAgSW50U2l6ZSBv
dXRzZXRTaXplID0gb3V0c2V0U2l6ZUZvckJsdXIoZHJvcFNoYWRvd09wZXJhdGlvbi0+c3RkRGV2
aWF0aW9uKCkpOworICAgICAgICAgICAgRmlsdGVyT3V0c2V0cyBvdXRzZXRzKAorICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBkcm9wU2hhZG93T3BlcmF0
aW9uLT55KCkpLAorICAgICAgICAgICAgICAgIHN0ZDo6bWF4KDAsIG91dHNldFNpemUud2lkdGgo
KSArIGRyb3BTaGFkb3dPcGVyYXRpb24tPngoKSksCisgICAgICAgICAgICAgICAgc3RkOjptYXgo
MCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIGRyb3BTaGFkb3dPcGVyYXRpb24tPnkoKSksCisgICAg
ICAgICAgICAgICAgc3RkOjptYXgoMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gZHJvcFNoYWRvd09w
ZXJhdGlvbi0+eCgpKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHRvdGFsT3V0c2V0cyAr
PSBvdXRzZXRzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NOiB7CisgICAgICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byBpbmNsdWRlIHRoZSBmaWx0ZXIgbWFyZ2lucyBoZXJlLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDAwCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdG90YWxPdXRz
ZXRzOworfQorCitib29sIEZpbHRlck9wZXJhdGlvbnM6Omhhc0ZpbHRlclRoYXRBZmZlY3RzT3Bh
Y2l0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX29wZXJhdGlvbnNbaV0tPmFmZmVjdHNPcGFjaXR5
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgRmlsdGVyT3BlcmF0aW9uczo6aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgaWYgKG1fb3BlcmF0aW9uc1tpXS0+bW92ZXNQaXhlbHMoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbHRlck9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDlhMmQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9GaWx0ZXJPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRmlsdGVyT3BlcmF0aW9uc19oCisjZGVmaW5lIEZpbHRlck9wZXJhdGlv
bnNfaAorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlw
ZWRlZiBJbnRSZWN0RXh0ZW50IEZpbHRlck91dHNldHM7CisKK2NsYXNzIEZpbHRlck9wZXJhdGlv
bnMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZpbHRlck9w
ZXJhdGlvbnMoKTsKKyAgICBGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IG90aGVyKSB7ICp0aGlzID0gb3RoZXI7IH0KKyAgICAKKyAgICBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRvcj0oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBtX29wZXJhdGlvbnMuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+ID4mIG9wZXJhdGlvbnMoKSB7IHJldHVybiBtX29wZXJhdGlvbnM7
IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BlcmF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9uczsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIW1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICBjb25zdCBGaWx0ZXJP
cGVyYXRpb24qIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBtX29wZXJh
dGlvbnMuc2l6ZSgpID8gbV9vcGVyYXRpb25zLmF0KGluZGV4KS5nZXQoKSA6IDA7IH0KKworICAg
IGJvb2wgb3BlcmF0aW9uc01hdGNoKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSBjb25zdDsKKwor
ICAgIGJvb2wgaGFzT3V0c2V0cygpIGNvbnN0OworICAgIEZpbHRlck91dHNldHMgb3V0c2V0cygp
IGNvbnN0OworCisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkoKSBjb25zdDsK
KyAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0OworCisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQorICAgIGJvb2wgaGFzQ3VzdG9tRmlsdGVyKCkgY29uc3Q7CisjZW5kaWYK
KyAgICBib29sIGhhc1JlZmVyZW5jZUZpbHRlcigpIGNvbnN0OworcHJpdmF0ZToKKyAgICBWZWN0
b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisKKyNlbmRp
ZiAvLyBGaWx0ZXJPcGVyYXRpb25zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNGQ1MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9WYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2lu
Y2x1ZGUgIlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSAiQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVy
YXRpb246OlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbihQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIAorICAgIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisg
ICAgOiBGaWx0ZXJPcGVyYXRpb24oVkFMSURBVEVEX0NVU1RPTSkKKyAgICAsIG1fdmFsaWRhdGVk
UHJvZ3JhbSh2YWxpZGF0ZWRQcm9ncmFtKQorICAgICwgbV9wYXJhbWV0ZXJzKHNvcnRlZFBhcmFt
ZXRlcnMpCisgICAgLCBtX21lc2hSb3dzKG1lc2hSb3dzKQorICAgICwgbV9tZXNoQ29sdW1ucyht
ZXNoQ29sdW1ucykKKyAgICAsIG1fbWVzaFR5cGUobWVzaFR5cGUpCit7Cit9CisKK1ZhbGlkYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6flZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbigp
Cit7Cit9CisKK1Bhc3NSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBWYWxpZGF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb246OmJsZW5kKGNvbnN0IEZpbHRlck9wZXJhdGlvbiosIGRvdWJsZSBwcm9ncmVz
cywgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2gpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHByb2dyZXNzKTsKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGJsZW5kVG9QYXNzdGhyb3VnaCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gdGhpczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1ZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYmIwZDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCisjZGVmaW5lIFZh
bGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdC5oIgorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIkxheW91dFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOworCitjbGFzcyBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVy
YXRpb24gOiBwdWJsaWMgRmlsdGVyT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIAorICAgICAg
ICBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBzb3J0ZWRQYXJhbWV0ZXJzLCB1bnNp
Z25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBl
IG1lc2hUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWYWxpZGF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24odmFsaWRhdGVkUHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywg
bWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSkpOworICAgIH0KKworICAgIHZpcnR1YWwg
flZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbigpOworCisgICAgdmlydHVhbCBib29sIGFm
ZmVjdHNPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBt
b3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYmxl
bmRpbmdOZWVkc1JlbmRlcmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBMYXlvdXRTaXplJiwgYm9vbCBibGVu
ZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSk7CisKKyAgICBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtKiB2YWxpZGF0ZWRQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0ZWRQcm9ncmFt
LmdldCgpOyB9CisgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQorCisgICAgdW5zaWduZWQgbWVzaFJv
d3MoKSBjb25zdCB7IHJldHVybiBtX21lc2hSb3dzOyB9CisgICAgdW5zaWduZWQgbWVzaENvbHVt
bnMoKSBjb25zdCB7IHJldHVybiBtX21lc2hDb2x1bW5zOyB9CisKKyAgICBDdXN0b21GaWx0ZXJN
ZXNoVHlwZSBtZXNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzaFR5cGU7IH0KKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG8p
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsaWRhdGVkUHJvZ3JhbS5nZXQoKSA9PSBv
dGhlci0+bV92YWxpZGF0ZWRQcm9ncmFtLmdldCgpCisgICAgICAgICAgICAmJiBtX21lc2hSb3dz
ID09IG90aGVyLT5tX21lc2hSb3dzCisgICAgICAgICAgICAmJiBtX21lc2hDb2x1bW5zID09IG90
aGVyLT5tX21lc2hDb2x1bW5zCisgICAgICAgICAgICAmJiBtX21lc2hUeXBlID09IG90aGVyLT5t
X21lc2hUeXBlCisgICAgICAgICAgICAmJiBtX3BhcmFtZXRlcnMgPT0gb3RoZXItPm1fcGFyYW1l
dGVyczsKKyAgICB9CisKKyAgICBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24oUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYsIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3Vz
dG9tRmlsdGVyTWVzaFR5cGUpOworCisgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW0+IG1fdmFsaWRhdGVkUHJvZ3JhbTsKKworICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxp
c3QgbV9wYXJhbWV0ZXJzOworICAgIHVuc2lnbmVkIG1fbWVzaFJvd3M7CisgICAgdW5zaWduZWQg
bV9tZXNoQ29sdW1uczsKKyAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtX21lc2hUeXBlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJT
KQorCisjZW5kaWYgLy8gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gK
</data>
<flag name="review"
          id="219418"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="219419"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>