<?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>146338</bug_id>
          
          <creation_ts>2015-06-26 00:13:51 -0700</creation_ts>
          <short_desc>Make the NFA transitions range-based</short_desc>
          <delta_ts>2015-06-29 14:03:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1104875</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-26 00:13:51 -0700</bug_when>
    <thetext>Make the NFA transitions range-based</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104877</commentid>
    <comment_count>1</comment_count>
      <attachid>255619</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-26 00:20:03 -0700</bug_when>
    <thetext>Created attachment 255619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105052</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-26 14:16:21 -0700</bug_when>
    <thetext>Initial performance analysis indicates this patch is a huge time and memory improvement.  Here&apos;s data from compiling a large content blocker:

                        Without Patch   With Patch
Compiling Time          11.46 Seconds   5.39 Seconds
Memory Used for NFAs    ~20MB           ~16MB
Compiled Bytecode Size  14887063 Bytes  14311716 Bytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105349</commentid>
    <comment_count>3</comment_count>
      <attachid>255737</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-28 23:17:39 -0700</bug_when>
    <thetext>Created attachment 255737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105413</commentid>
    <comment_count>4</comment_count>
      <attachid>255737</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-29 10:29:28 -0700</bug_when>
    <thetext>Comment on attachment 255737
Patch

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

&gt; Source/WebCore/contentextensions/ImmutableNFA.h:127
&gt; +        void debugPrint() const

This and the other print functions should be in #if CONTENT_EXTENSIONS_STATE_MACHINE_DEBUGGING

&gt; Source/WebCore/contentextensions/ImmutableNFANodeBuilder.h:99
&gt; +        struct FakeRangeIterator {

This needs to be outside the scope of addTransition to compile successfully on Mavericks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105417</commentid>
    <comment_count>5</comment_count>
      <attachid>255759</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-29 10:36:08 -0700</bug_when>
    <thetext>Created attachment 255759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105434</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-29 11:31:04 -0700</bug_when>
    <thetext>After applying this patch and running a large test case, we are spending 5580ms total in compileRuleList.  Of that, 2253ms are spent in NFAtoDFA::convert and 2114ms are spent in DFAMinimizer::minimize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105462</commentid>
    <comment_count>7</comment_count>
      <attachid>255759</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-29 12:41:08 -0700</bug_when>
    <thetext>Comment on attachment 255759
Patch

Clearing flags on attachment: 255759

Committed r186079: &lt;http://trac.webkit.org/changeset/186079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105463</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-29 12:41:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105491</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-29 14:03:08 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Memory Used for NFAs    ~20MB           ~16MB
Correction: This reduced memory from ~20MB to ~1.6MB. A factor of 10 better than I thought!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255619</attachid>
            <date>2015-06-26 00:20:03 -0700</date>
            <delta_ts>2015-06-28 23:17:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146338-20150626001916.patch</filename>
            <type>text/plain</type>
            <size>88396</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjhiYTI3NDY3YmJkMDAz
ZmFmMDAyYzU1MDY1ZTZmMjFkMDRmZTQ0ZS4uODcyNTFjZDg4NzU1ZDFkMmMzMmVlNjhlMDkyZDYw
ZmQwOTdjZTFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxNS0wNi0yNiAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUg
TkZBIHRyYW5zaXRpb25zIHJhbmdlLWJhc2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgdGhlIE5GQSB0byB1c2UgcmFuZ2UgYmFzZWQgdHJh
bnNpdGlvbiBmb3IgYW55IGtpbmQgb2YgdHJhbnNpdGlvbi4KKyAgICAgICAgVGhlIGZhbGxiYWNr
IHRyYW5zaXRpb24gaXMgYWxzbyBhYnNvcmJlZCBhcyByYW5nZXMuCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQTo6ZW1wdHkpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5o
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0VGFy
Z2V0SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRhcmdldEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0VGFy
Z2V0SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RUYXJnZXRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRh
cmdldEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpJbW11dGFibGVORkE6Okl0ZXJhYmxlQ29uc3RUYXJnZXRzOjpiZWdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpJdGVyYWJsZUNv
bnN0VGFyZ2V0czo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJ
bW11dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRv
cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1t
dXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RSYW5nZUl0ZXJhdG9y
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11
dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5G
QTo6SXRlcmFibGVDb25zdFJhbmdlOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpJdGVyYWJsZUNvbnN0UmFuZ2U6OmVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpJdGVyYWJsZUNv
bnN0UmFuZ2U6OmRlYnVnUHJpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkltbXV0YWJsZU5GQTo6dHJhbnNpdGlvbnNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OnJvb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6ZmluYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6bWVtb3J5VXNlZCk6Cisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9k
ZUJ1aWxkZXI6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6fkltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFi
bGVORkFOb2RlQnVpbGRlcjo6YWRkVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmFkZEVwc2lsb25UcmFuc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFO
b2RlQnVpbGRlcjo6c2V0QWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmZpbmFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2Rl
QnVpbGRlcjo6c2lua0FjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjpzaW5rVHJhbnNpdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjpzaW5r
RXBzaWxvblRyYW5zaXRpb25zKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxl
UmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0
YWJsZVJhbmdlOjpNdXRhYmxlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Ok11dGFibGVSYW5nZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2U6OnNpemUpOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL011dGFibGVSYW5nZUxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0
OjpDb25zdEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpDb25zdEl0ZXJhdG9yOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpD
b25zdEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpDb25zdEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpiZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlz
dDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFu
Z2VMaXN0OjphcHBlbmRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6TXV0YWJsZVJhbmdlTGlzdDo6ZXh0ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6ZGVidWdQcmludCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6
aW5zZXJ0QmV0d2Vlbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0
YWJsZVJhbmdlTGlzdDo6aW5pdGlhbGl6ZUZyb20pOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL05GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpk
ZWJ1Z1ByaW50RG90KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6
Ok5GQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZB
OjpjcmVhdGVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpORkE6Om1lbW9yeVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Ok5GQTo6YWRkVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjphZGRFcHNpbG9uVHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjphZGRUcmFuc2l0
aW9uc09uQW55Q2hhcmFjdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6Z3JhcGhTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OnJlc3RvcmVUb0dyYXBoU2l6ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cHJpbnRSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cHJpbnRUcmFuc2l0
aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpyb290KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OmFkZFJ1bGVJZCk6IERlbGV0
ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjplcHNpbG9uQ2xvc3VyZUV4Y2x1ZGluZ1NlbGYpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OnJlc29sdmVFcHNpbG9uQ2xvc3VyZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291
cmNlOjpOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Tm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRUcmFuc2xhdG9y
Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRhdGFD
b252ZXJ0ZXJXaXRoRXBzaWxvbkNsb3N1cmU6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkRhdGFDb252ZXJ0ZXJXaXRoRXBzaWxvbkNsb3N1cmU6OmV4dGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Y3JlYXRlQ29tYmluZWRU
cmFuc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjYW5Vc2VG
YWxsYmFja1RyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmZpbmRCZXN0RmFsbGJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmdldE9yQ3JlYXRlREZBTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnBvcHVsYXRlVHJhbnNpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL05GQVRvREZBLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVy
bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OlRlcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlU3Vi
Z3JhcGhGb3JBdG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpUZXJtOjpnZW5lcmF0ZUdyYXBoKTogRGVsZXRlZC4KKwogMjAxNS0wNi0yMiAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICAtd2Via2l0LWNsaXAtcGF0
aCBjbGlwcyBpbmNvcnJlY3RseSBpZiB0aGUgZWxlbWVudCBib3VuZHMgZ28gYmV5b25kIHRoZSB0
b3AgZWRnZSBvZiB0aGUgcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE5YjQ1ZmM2NGY1Njc5N2ExYTExMzI1MWYwMDY2ZTJi
MTEwYjI1N2QuLjJhY2FkNmI3OGUzMTY4OTI4NzFhYjM1ZjFhYzg3MmM1YTM5MzVkYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwNDAsNiArMTA0MCwxMCBAQAogCQkyNkYwQzg5RjFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RjBDODlEMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuY3BwICovOyB9OwogCQkyNkYwQzhBMDFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkYwQzg5RTFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMjZGNDBENEExNDkwNEE2MzAwQ0E2N0M0IC8qIEV2ZW50TG9vcElPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjQwRDQ5MTQ5MDRBNjMwMENB
NjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi87IH07CisJCTI2Rjc1NkIwMUIzQjY1QUMwMDA1REQ3
OSAvKiBNdXRhYmxlUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2Rjc1NkFFMUIzQjY1QUMwMDA1REQ3OSAvKiBNdXRhYmxlUmFuZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNkY3NTZCMTFC
M0I2NUFDMDAwNURENzkgLyogTXV0YWJsZVJhbmdlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGNzU2QUYxQjNCNjVBQzAwMDVERDc5IC8qIE11
dGFibGVSYW5nZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkyNkY3NTZCMzFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY3NTZCMjFCM0I2
NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0
YWJsZU5GQU5vZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkY3NTZCNDFCM0I2OEYyMDAwNURENzkgLyogSW1tdXRhYmxlTkZBTm9kZUJ1
aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkyNkY5QTgzODE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjlBODM2MThB
MDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwICovOyB9OwogCQkyNkY5
QTgzOTE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY5QTgzNzE4QTA0NkFDMDBB
RUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjZGQUU0Q0MxODUyRTNBNTAwNEM4QzQ2IC8qIFJl
c291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGQUU0QzgxODUyRTNBNTAwNEM4QzQ2IC8q
IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwICovOyB9OwpAQCAtODE4
MCw2ICs4MTg0LDEwIEBACiAJCTI2RjBDODlEMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjZGMEM4OUUxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGNDBENDkxNDkwNEE2MzAwQ0E2
N0M0IC8qIEV2ZW50TG9vcElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEV2ZW50TG9vcElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZG
NzU2QUUxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNdXRhYmxlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjZGNzU2QUYxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YWJsZVJhbmdlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkY3NTZCMjFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRh
YmxlTkZBLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltbXV0YWJsZU5GQS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkY3NTZCNDFCM0I2OEYyMDAwNURENzkg
LyogSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjZGOUE4MzYxOEEwNDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydENvbmZpZ3Vy
YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkY5QTgzNzE4QTA0NkFD
MDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNkZBRTRDODE4NTJFM0E1MDA0QzhDNDYgLyogUmVzb3VyY2VIYW5kbGVDRlVS
TENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjgzLDYgKzE1NjkxLDEwIEBACiAJCQkJMjZBNTE3RkIx
QUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgKi8sCiAJCQkJMjZBNTE3RkMxQUI5
MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICovLAogCQkJCTI2NzcyNUY5MUE1QjNBRDkw
MDNDMjRERCAvKiBERkFOb2RlLmggKi8sCisJCQkJMjZGNzU2QjIxQjNCNjZGNzAwMDVERDc5IC8q
IEltbXV0YWJsZU5GQS5oICovLAorCQkJCTI2Rjc1NkI0MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11
dGFibGVORkFOb2RlQnVpbGRlci5oICovLAorCQkJCTI2Rjc1NkFFMUIzQjY1QUMwMDA1REQ3OSAv
KiBNdXRhYmxlUmFuZ2UuaCAqLywKKwkJCQkyNkY3NTZBRjFCM0I2NUFDMDAwNURENzkgLyogTXV0
YWJsZVJhbmdlTGlzdC5oICovLAogCQkJCTI2OTM5NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEu
Y3BwICovLAogCQkJCTI2OTM5NzIzMUE0QTVCNjQwMEU4MzQ5RCAvKiBORkEuaCAqLywKIAkJCQky
NjkzOTcyMDFBNEE0MTJGMDBFODM0OUQgLyogTkZBTm9kZS5oICovLApAQCAtMjQyMzgsNiArMjQy
NTAsNyBAQAogCQkJCTYyQ0QzMjVBMTE1N0U1N0MwMDYzQjBBNyAvKiBDdXN0b21FdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2Fy
ZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZGNzU2QjAxQjNCNjVBQzAwMDVERDc5IC8q
IE11dGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjExNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyNDE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE2Q0ZE
NDE2OUQxREVEMDBEM0EwQzcgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAg
LTI0Mzk4LDYgKzI0NDExLDcgQEAKIAkJCQk4NTkwOUNFNDBBQ0M3QTdFMDBERjAxRjEgLyogRE9N
Q1NTVW5rbm93blJ1bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU4QzM4MUMwQUE4
RTI5NjAwQjE4N0E0IC8qIERPTUNTU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUI0OThG
MzBBREIzMzZBMDA5MjVDQkIgLyogRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODU4QzM4M0MwQUE4RUQ4MjAwQjE4N0E0IC8qIERPTUNTU1ZhbHVlTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODU5MDlEMkIwQUNDN0Q1NTAwREYwMUYxIC8qIERPTUNTU1Zh
bHVlTGlzdEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTBCOUNDQzBCNzQ3QTQ0MDAz
RUQ4OTAgLyogRE9NQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2
MjMxLDYgKzI2MjQ1LDcgQEAKIAkJCQlCQ0VBNDg2RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMzAyNzU0QTEyQTVG
RTg0MDA0QkQ4MjggLyogUmVuZGVyRGV0YWlsc01hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc2RTVGN0YxMzVFMERDRjAwQTY5ODM3IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFO
b2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUIzMkNEQTkxM0RGN0ZBOTAwRjM0RDEz
IC8qIFJlbmRlcmVkUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0M0EwMjNCMTdFQjM3
MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1
NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICov
LApAQCAtMjY4NTYsNiArMjY4NzEsNyBAQAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQYXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURGNkEwQjAw
NTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg0
QTA4MjkxMjhENzg2NzAwMkRCMUYxIC8qIFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkyNkY3NTZCMTFCM0I2NUFDMDAwNURENzkgLyogTXV0YWJsZVJh
bmdlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRCNkI5NzgxMjBGMTNFNTAwQjhFRkFGIC8q
IFNWR1BhdGhTZWdMaXN0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzNTE3OEQ1
QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ01vdmV0b0Ficy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODNDMUQ0MzYxNzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdNb3ZldG9SZWwuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29t
YmluZWRVUkxGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bWJpbmVkVVJMRmlsdGVycy5jcHAKaW5kZXggNzIyYWQzNWU2ZDM3Y2ZmMWI4N2VmYTU5ZWQwYzk5
NWFmMzRhOTZjNS4uNmJjYzYyYzA2OGYzM2MxY2RhNzg3MjJkMjRmMWY1Y2E5M2EzMmMwZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0
ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuY3BwCkBAIC0xODAsMjUgKzE4MCwyNSBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVy
czo6YWRkUGF0dGVybih1aW50NjRfdCBhY3Rpb25JZCwgY29uc3QgVmVjdG9yPFRlcm0+JiBwYXR0
ZQogICAgICAgICBhY3Rpb25zLmFwcGVuZChhY3Rpb25JZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdl
bmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgdW5zaWduZWQgbmZhUm9vdElkLCBQcmVmaXhU
cmVlVmVydGV4JiByb290LCBzaXplX3QgbWF4TkZBU2l6ZSkKK3N0YXRpYyB2b2lkIGdlbmVyYXRl
TkZBRm9yU3VidHJlZShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgc3Vi
dHJlZVJvb3QsIFByZWZpeFRyZWVWZXJ0ZXgmIHJvb3QsIHNpemVfdCBtYXhORkFTaXplKQogewog
ICAgIC8vIFRoaXMgcmVjdXJzZXMgdGhlIHN1YnRyZWUgb2YgdGhlIHByZWZpeCB0cmVlLgogICAg
IC8vIEZvciBlYWNoIGVkZ2UgdGhhdCBoYXMgZml4ZWQgbGVuZ3RoIChubyBxdWFudGlmaWVycyBs
aWtlID8sICosIG9yICspIGl0IGdlbmVyYXRlcyB0aGUgbmZhIGdyYXBoLAogICAgIC8vIHJlY3Vy
c2VzIGludG8gY2hpbGRyZW4sIGFuZCBkZWxldGVzIGFueSBwcm9jZXNzZWQgbGVhZiBub2Rlcy4K
ICAgICBzdHJ1Y3QgQWN0aXZlU3VidHJlZSB7Ci0gICAgICAgIEFjdGl2ZVN1YnRyZWUoUHJlZml4
VHJlZVZlcnRleCYgdmVydGV4LCB1bnNpZ25lZCBuZmFOb2RlSWQsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICAgICAgQWN0aXZlU3VidHJlZShQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgsIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIG5mYU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAg
ICAgICAgICAgIDogdmVydGV4KHZlcnRleCkKLSAgICAgICAgICAgICwgbmZhTm9kZUlkKG5mYU5v
ZGVJZCkKKyAgICAgICAgICAgICwgbmZhTm9kZShXVEY6Om1vdmUobmZhTm9kZSkpCiAgICAgICAg
ICAgICAsIGVkZ2VJbmRleChlZGdlSW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICBQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXg7Ci0gICAgICAgIHVuc2lnbmVkIG5mYU5vZGVJZDsK
KyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5mYU5vZGU7CiAgICAgICAgIHVu
c2lnbmVkIGVkZ2VJbmRleDsKICAgICB9OwogICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBzdGFj
azsKICAgICBpZiAoIXJvb3QuZWRnZXMuaXNFbXB0eSgpKQotICAgICAgICBzdGFjay5hcHBlbmQo
QWN0aXZlU3VidHJlZShyb290LCBuZmFSb290SWQsIDApKTsKKyAgICAgICAgc3RhY2suYXBwZW5k
KEFjdGl2ZVN1YnRyZWUocm9vdCwgV1RGOjptb3ZlKHN1YnRyZWVSb290KSwgMCkpOwogICAgIGJv
b2wgbmZhVG9vQmlnID0gZmFsc2U7CiAgICAgCiAgICAgLy8gR2VuZXJhdGUgZ3JhcGhzIGZvciBl
YWNoIHN1YnRyZWUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBxdWFudGlmaWVycy4KQEAgLTIw
Nyw3ICsyMDcsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEs
IHVuc2lnbmVkIG5mYVJvb3RJZCwgUHJlZml4VHJlZVZlcnRleAogICAgICAgICBjb25zdCB1bnNp
Z25lZCBlZGdlSW5kZXggPSBzdGFjay5sYXN0KCkuZWRnZUluZGV4OwogICAgICAgICAKICAgICAg
ICAgLy8gT25seSBzdG9wIGdlbmVyYXRpbmcgYW4gTkZBIGF0IGEgbGVhZiB0byBlbnN1cmUgd2Ug
aGF2ZSBhIGNvcnJlY3QgTkZBLiBXZSBjb3VsZCBnbyBzbGlnaHRseSBvdmVyIHRoZSBtYXhORkFT
aXplLgotICAgICAgICBpZiAodmVydGV4LmVkZ2VzLmlzRW1wdHkoKSAmJiBuZmEuZ3JhcGhTaXpl
KCkgPiBtYXhORkFTaXplKQorICAgICAgICBpZiAodmVydGV4LmVkZ2VzLmlzRW1wdHkoKSAmJiBu
ZmEubm9kZXMuc2l6ZSgpID4gbWF4TkZBU2l6ZSkKICAgICAgICAgICAgIG5mYVRvb0JpZyA9IHRy
dWU7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZUluZGV4IDwgdmVydGV4LmVkZ2VzLnNpemUo
KSkgewpAQCAtMjI0LDEwICsyMjQsMTAgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0
cmVlKE5GQSYgbmZhLCB1bnNpZ25lZCBuZmFSb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgKICAgICAg
ICAgICAgICAgICBzdGFjay5sYXN0KCkuZWRnZUluZGV4Kys7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN1YnRyZWVSb290SWQgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHN0YWNrLmxhc3Qo
KS5uZmFOb2RlSWQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7CisKKyAgICAgICAgICAgIElt
bXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZXdOb2RlID0gZWRnZS50ZXJtLmdlbmVyYXRlR3Jh
cGgobmZhLCBzdGFjay5sYXN0KCkubmZhTm9kZSwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsK
ICAgICAgICAgICAgIEFTU0VSVChlZGdlLmNoaWxkLmdldCgpKTsKLSAgICAgICAgICAgIHN0YWNr
LmFwcGVuZChBY3RpdmVTdWJ0cmVlKCplZGdlLmNoaWxkLmdldCgpLCBzdWJ0cmVlUm9vdElkLCAw
KSk7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSgqZWRnZS5jaGlsZC5n
ZXQoKSwgV1RGOjptb3ZlKG5ld05vZGUpLCAwKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBBU1NFUlQoZWRnZUluZGV4ID09IHZlcnRleC5lZGdlcy5zaXplKCkpOwogICAgICAgICAg
ICAgdmVydGV4LmVkZ2VzLnJlbW92ZUFsbE1hdGNoaW5nKFtdKFByZWZpeFRyZWVFZGdlJiBlZGdl
KQpAQCAtMjczLDIyICsyNzMsMjYgQEAgdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NO
RkFzKHNpemVfdCBtYXhORkFTaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYKICAgICAgICAg
ICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFzdGFjay5pc0VtcHR5KCksICJBdCBsZWFzdCB0aGUgcm9vdCBzaG91bGQgYmUgaW4g
dGhlIHN0YWNrIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE1ha2UgYW4gTkZBIHdpdGggdGhl
IHN1YnRyZWVzIGZvciB3aG9tIHRoaXMgaXMgYWxzbyB0aGUgbGFzdCBxdWFudGlmaWVyIChvciB3
aG8gYWxzbyBoYXZlIG5vIHF1YW50aWZpZXIpLgogICAgICAgICBORkEgbmZhOwotICAgICAgICAv
LyBQdXQgdGhlIHByZWZpeCBpbnRvIHRoZSBORkEuCi0gICAgICAgIHVuc2lnbmVkIHByZWZpeEVu
ZCA9IG5mYS5yb290KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFjay5z
aXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc3RhY2tbaV0tPmVkZ2VzLmlz
RW1wdHkoKSk7Ci0gICAgICAgICAgICBjb25zdCBQcmVmaXhUcmVlRWRnZSYgZWRnZSA9IHN0YWNr
W2ldLT5lZGdlcy5sYXN0KCk7Ci0gICAgICAgICAgICBwcmVmaXhFbmQgPSBlZGdlLnRlcm0uZ2Vu
ZXJhdGVHcmFwaChuZmEsIHByZWZpeEVuZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gUHV0IHRoZSBwcmVmaXggaW50byB0aGUgTkZBLgorICAg
ICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGxhc3ROb2RlKG5mYSk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgUHJlZml4VHJlZUVkZ2UmIGVkZ2UgPSBzdGFja1tpXS0+
ZWRnZXMubGFzdCgpOworICAgICAgICAgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRl
ciBuZXdOb2RlID0gZWRnZS50ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0Tm9kZSwgZWRnZS5j
aGlsZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IFdURjo6bW92
ZShuZXdOb2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHV0IHRoZSBub24t
cXVhbnRpZmllZCB2ZXJ0aWNlcyBpbiB0aGUgc3VidHJlZSBpbnRvIHRoZSBORkEgYW5kIGRlbGV0
ZSB0aGVtLgorICAgICAgICAgICAgQVNTRVJUKHN0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICBn
ZW5lcmF0ZU5GQUZvclN1YnRyZWUobmZhLCBXVEY6Om1vdmUobGFzdE5vZGUpLCAqc3RhY2subGFz
dCgpLCBtYXhORkFTaXplKTsKICAgICAgICAgfQotICAgICAgICAvLyBQdXQgdGhlIG5vbi1xdWFu
dGlmaWVkIHZlcnRpY2VzIGluIHRoZSBzdWJ0cmVlIGludG8gdGhlIE5GQSBhbmQgZGVsZXRlIHRo
ZW0uCi0gICAgICAgIEFTU0VSVChzdGFjay5sYXN0KCkpOwotICAgICAgICBnZW5lcmF0ZU5GQUZv
clN1YnRyZWUobmZhLCBwcmVmaXhFbmQsICpzdGFjay5sYXN0KCksIG1heE5GQVNpemUpOwotICAg
ICAgICAKKyAgICAgICAgbmZhLmZpbmFsaXplKCk7CisKICAgICAgICAgaGFuZGxlcihXVEY6Om1v
dmUobmZhKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENsZWFuIHVwIGFueSBwcm9jZXNzZWQg
bGVhZiBub2Rlcy4KICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgIGlmIChzdGFj
ay5zaXplKCkgPiAxKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAppbmRleCAzMjVmNzNkMTI1
NjJiOTc5NjVhMGU2ZTBlMDdkMWU2YTY5NzVjMGM5Li45ODMwZTRmM2QyZDBlYjExNjc1ZGRlY2Qz
ZmY5OTA4MmQ2ODg5MmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKQEAgLTMwOSw5ICsz
MDksNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNpb25D
b21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBTdHJpbgogICAgICAgICAvLyBPdXIgYnl0ZWNvZGUg
aW50ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0IG9uZSBERkEsIHNvIGlmIHdlIGhh
dmVuJ3Qgc2VlbiBhbnkKICAgICAgICAgLy8gY3JlYXRlIGEgZHVtbXkgb25lIGFuZCBhZGQgYW55
IHVuaXZlcnNhbCBhY3Rpb25zLgogCi0gICAgICAgIE5GQSBkdW1teU5GQTsKLSAgICAgICAgREZB
IGR1bW15REZBID0gTkZBVG9ERkE6OmNvbnZlcnQoZHVtbXlORkEpOwotCisgICAgICAgIERGQSBk
dW1teURGQSA9IERGQTo6ZW1wdHkoKTsKICAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZB
KGR1bW15REZBLCB1bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpOwogCiAgICAgICAgIFZl
Y3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CkBAIC0zNzYsMTAgKzM3NCw4IEBAIHN0ZDo6ZXJy
b3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50
JiBjbGllbnQsIFN0cmluCiAgICAgaWYgKCFmaXJzdE5GQVdpdGhEb21haW5zU2VlbikgewogICAg
ICAgICAvLyBPdXIgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgZXhwZWN0cyB0byBoYXZlIGF0IGxlYXN0
IG9uZSBERkEsIHNvIGlmIHdlIGhhdmVuJ3Qgc2VlbiBhbnkKICAgICAgICAgLy8gY3JlYXRlIGEg
ZHVtbXkgb25lIGFuZCBhZGQgYW55IHVuaXZlcnNhbCBhY3Rpb25zLgotICAgICAgICAKLSAgICAg
ICAgTkZBIGR1bW15TkZBOwotICAgICAgICBERkEgZHVtbXlERkEgPSBORkFUb0RGQTo6Y29udmVy
dChkdW1teU5GQSk7Ci0gICAgICAgIAorCisgICAgICAgIERGQSBkdW1teURGQSA9IERGQTo6ZW1w
dHkoKTsKICAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGR1bW15REZBLCB1bml2ZXJz
YWxBY3Rpb25zV2l0aERvbWFpbnMpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPERGQUJ5dGVj
b2RlPiBieXRlY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCmlu
ZGV4IDVjM2QzNjUxNjkzYjU5NmFjOGMwMzE0NWMyZmQ0OGVkNTEwZjIzYzEuLjBlZTA0ZDljMmNi
Y2M5ZDRjYjMwYWMzMmFhODFkMzUzMmUzOTI0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBLmNwcApAQCAtMzUsNiArMzUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCitERkEgREZBOjplbXB0eSgpCit7Cisg
ICAgREZBIG5ld0RGQTsKKyAgICBuZXdERkEubm9kZXMuYXBwZW5kKERGQU5vZGUoKSk7CisgICAg
cmV0dXJuIG5ld0RGQTsKK30KKwogc2l6ZV90IERGQTo6bWVtb3J5VXNlZCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHNpemVvZihERkEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkEuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5o
CmluZGV4IDNlYmNhNzE2MDFlMjQzYTk4ZjEyZTQ3OTk4OGE4YWFjOTk5ZGYyNTEuLjE4OGRmYjQ5
YTA2ZGE3N2E2ODQyZTI1ODcyYzE5MDc2YTk2ODY2YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQS5oCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucyB7CiAKIC8vIFRoZSBERkEgYWJzdHJhY3QgYSBwYXJ0aWFsIERGQSBncmFwaCBpbiBhIGNv
bXBhY3QgZm9ybS4KIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBERkEgeworICAgIHN0YXRpYyBERkEg
ZW1wdHkoKTsKKwogICAgIHZvaWQgbWluaW1pemUoKTsKICAgICB1bnNpZ25lZCBncmFwaFNpemUo
KSBjb25zdDsKICAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9JbW11dGFibGVORkEuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjJjZTZk
OTQzOWM1Y2RmMDdjYmE1N2EzNjdiODFhMjMyYmIzYjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBLmgKQEAgLTAsMCArMSwx
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltbXV0YWJsZU5GQV9oCisjZGVmaW5lIEltbXV0
YWJsZU5GQV9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RydWN0
IEltbXV0YWJsZVJhbmdlIHsKKyAgICB1aW50MzJfdCB0YXJnZXRTdGFydDsKKyAgICB1aW50MzJf
dCB0YXJnZXRFbmQ7CisgICAgQ2hhcmFjdGVyVHlwZSBmaXJzdDsKKyAgICBDaGFyYWN0ZXJUeXBl
IGxhc3Q7Cit9OworCitzdHJ1Y3QgSW1tdXRhYmxlTkZBTm9kZSB7CisgICAgdWludDMyX3QgcmFu
Z2VzU3RhcnQgeyAwIH07CisgICAgdWludDMyX3QgcmFuZ2VzRW5kIHsgMCB9OworICAgIHVpbnQz
Ml90IGVwc2lsb25UcmFuc2l0aW9uVGFyZ2V0c1N0YXJ0IHsgMCB9OworICAgIHVpbnQzMl90IGVw
c2lsb25UcmFuc2l0aW9uVGFyZ2V0c0VuZCB7IDAgfTsKKyAgICB1aW50MzJfdCBhY3Rpb25TdGFy
dCB7IDAgfTsKKyAgICB1aW50MzJfdCBhY3Rpb25FbmQgeyAwIH07Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3N0cnVjdCBJbW11
dGFibGVORkEgeworICAgIFZlY3RvcjxJbW11dGFibGVORkFOb2RlPiBub2RlczsKKyAgICBWZWN0
b3I8SW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4+IHRyYW5zaXRpb25zOworICAgIFZlY3Rv
cjx1aW50MzJfdD4gdGFyZ2V0czsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGVwc2lsb25UcmFuc2l0
aW9uc1RhcmdldHM7CisgICAgVmVjdG9yPEFjdGlvblR5cGU+IGFjdGlvbnM7CisKKyAgICBzdHJ1
Y3QgQ29uc3RUYXJnZXRJdGVyYXRvciB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZU5GQSYgaW1t
dXRhYmxlTkZBOworICAgICAgICB1aW50MzJfdCBwb3NpdGlvbjsKKworICAgICAgICBjb25zdCB1
aW50MzJfdCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gaW1tdXRhYmxlTkZBLnRhcmdldHNb
cG9zaXRpb25dOyB9CisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gJmltbXV0YWJsZU5GQS50YXJnZXRzW3Bvc2l0aW9uXTsgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDb25zdFRhcmdldEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCZpbW11dGFibGVORkEgPT0gJm90aGVyLmltbXV0
YWJsZU5GQSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gPT0gb3RoZXIucG9zaXRpb247
CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0VGFyZ2V0SXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAg
ICAgIENvbnN0VGFyZ2V0SXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICArK3Bvc2l0aW9uOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHN0cnVjdCBJdGVyYWJsZUNvbnN0VGFyZ2V0cyB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZU5GQSYgaW1tdXRhYmxlTkZBOworICAgICAgICB1aW50MzJfdCB0YXJnZXRTdGFy
dDsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0RW5kOworCisgICAgICAgIENvbnN0VGFyZ2V0SXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiB7IGltbXV0YWJsZU5GQSwgdGFyZ2V0U3RhcnQg
fTsgfQorICAgICAgICBDb25zdFRhcmdldEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHsg
aW1tdXRhYmxlTkZBLCB0YXJnZXRFbmQgfTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgQ29uc3RS
YW5nZUl0ZXJhdG9yIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlTkZBJiBpbW11dGFibGVORkE7
CisgICAgICAgIHVpbnQzMl90IHBvc2l0aW9uOworCisgICAgICAgIGNvbnN0IEltbXV0YWJsZVJh
bmdlPENoYXJhY3RlclR5cGU+JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBpbW11dGFibGVO
RkEudHJhbnNpdGlvbnNbcG9zaXRpb25dOyB9CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVJhbmdl
PENoYXJhY3RlclR5cGU+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJmltbXV0YWJsZU5G
QS50cmFuc2l0aW9uc1twb3NpdGlvbl07IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29uc3RSYW5nZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCZpbW11dGFibGVORkEgPT0gJm90aGVyLmltbXV0YWJsZU5GQSk7CisgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb24gPT0gb3RoZXIucG9zaXRpb247CisgICAgICAgIH0KKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0UmFuZ2VJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICAgICAgQ29uc3RSYW5nZUl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgKytwb3NpdGlvbjsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhYmxlQ29u
c3RUYXJnZXRzIGRhdGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11
dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBlPiYgcmFuZ2UgPSBpbW11dGFibGVORkEudHJhbnNpdGlv
bnNbcG9zaXRpb25dOworICAgICAgICAgICAgcmV0dXJuIHsgaW1tdXRhYmxlTkZBLCByYW5nZS50
YXJnZXRTdGFydCwgcmFuZ2UudGFyZ2V0RW5kIH07CisgICAgICAgIH07CisgICAgfTsKKworICAg
IHN0cnVjdCBJdGVyYWJsZUNvbnN0UmFuZ2UgeworICAgICAgICBjb25zdCBJbW11dGFibGVORkEm
IGltbXV0YWJsZU5GQTsKKyAgICAgICAgdWludDMyX3QgcmFuZ2VzU3RhcnQ7CisgICAgICAgIHVp
bnQzMl90IHJhbmdlc0VuZDsKKworICAgICAgICBDb25zdFJhbmdlSXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiB7IGltbXV0YWJsZU5GQSwgcmFuZ2VzU3RhcnQgfTsgfQorICAgICAgICBD
b25zdFJhbmdlSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyBpbW11dGFibGVORkEsIHJh
bmdlc0VuZCB9OyB9CisKKyAgICAgICAgdm9pZCBkZWJ1Z1ByaW50KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6ICp0aGlzKQorICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiICAgICVkLSVkIiwgcmFuZ2UuZmlyc3QsIHJhbmdlLmxhc3Qp
OworICAgICAgICB9CisgICAgfTsKKworICAgIEl0ZXJhYmxlQ29uc3RSYW5nZSB0cmFuc2l0aW9u
c0Zvck5vZGUodWludDMyX3Qgbm9kZUlkKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgSW1t
dXRhYmxlTkZBTm9kZSYgbm9kZSA9IG5vZGVzW25vZGVJZF07CisgICAgICAgIHJldHVybiB7ICp0
aGlzLCBub2RlLnJhbmdlc1N0YXJ0LCBub2RlLnJhbmdlc0VuZCB9OworICAgIH07CisKKyAgICB1
aW50MzJfdCByb290KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2Rl
cy5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIGZpbmFs
aXplKCkKKyAgICB7CisgICAgICAgIG5vZGVzLnNocmlua1RvRml0KCk7CisgICAgICAgIHRyYW5z
aXRpb25zLnNocmlua1RvRml0KCk7CisgICAgICAgIHRhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0cy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBh
Y3Rpb25zLnNocmlua1RvRml0KCk7CisgICAgfQorCisgICAgc2l6ZV90IG1lbW9yeVVzZWQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGVzLmNhcGFjaXR5KCkgKiBzaXplb2YoSW1t
dXRhYmxlTkZBTm9kZSkKKyAgICAgICAgICAgICsgdHJhbnNpdGlvbnMuY2FwYWNpdHkoKSAqIHNp
emVvZihJbW11dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBlPikKKyAgICAgICAgICAgICsgdGFyZ2V0
cy5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQzMl90KQorICAgICAgICAgICAgKyBlcHNpbG9uVHJh
bnNpdGlvbnNUYXJnZXRzLmNhcGFjaXR5KCkgKiBzaXplb2YodWludDMyX3QpCisgICAgICAgICAg
ICArIGFjdGlvbnMuY2FwYWNpdHkoKSAqIHNpemVvZihBY3Rpb25UeXBlKTsKKyAgICB9Cit9Owor
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBJbW11dGFibGVORkFfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTU1NTJkZDc4OGE0YzIzOTc1NzBjZmM0NmU5YjcxODJiZjdkNmIyZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0
YWJsZU5GQU5vZGVCdWlsZGVyLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyX2gKKyNkZWZpbmUgSW1tdXRhYmxlTkZBTm9kZUJ1
aWxkZXJfaAorCisjaW5jbHVkZSAiSW1tdXRhYmxlTkZBLmgiCisjaW5jbHVkZSAiTXV0YWJsZVJh
bmdlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CisKKy8vIEEgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIgbGV0IHlvdSBidWls
ZCBhIE5GQSBub2RlIGJ5IGFkZGluZyBzdGF0ZXMgYW5kIGxpbmtpbmcgd2l0aCBvdGhlciBub2Rl
cy4KKy8vIE9uY2UgZXZlcnl0aGluZyBpcyBzZXQsIHlvdSBzaG91bGQgZmluYWxpemUgb3IgbWFr
ZSBzdXJlIHRoZSBkZXN0cnVjdG9yIGlzIGNhbGxlZC4KKy8vIEFmdGVyIGEgbm9kZSBpcyBmaW5h
bGl6ZWQsIHlvdSBjYW4gc3RpbGwgbGluayBvdGhlciBub2RlcyB0byBpdCBidXQgeW91IGNhbm5v
dCBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIGN1cnJlbnQgbm9kZS4KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorY2xhc3MgSW1tdXRhYmxlTkZB
Tm9kZUJ1aWxkZXIgeworICAgIHR5cGVkZWYgSW1tdXRhYmxlTkZBPENoYXJhY3RlclR5cGUsIEFj
dGlvblR5cGU+IFR5cGVkSW1tdXRhYmxlTkZBOworICAgIHR5cGVkZWYgSGFzaFNldDx1aW50MzJf
dCwgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQzMl90Pj4gVGFyZ2V0U2V0OworcHVibGljOgorICAgIEltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyKCkgeyB9CisKKyAgICBJbW11dGFibGVORkFOb2RlQnVpbGRlcihUeXBlZElt
bXV0YWJsZU5GQSYgaW1tdXRhYmxlTkZBKQorICAgICAgICA6IG1faW1tdXRhYmxlTkZBKCZpbW11
dGFibGVORkEpCisgICAgICAgICwgbV9maW5hbGl6ZWQoZmFsc2UpCisgICAgeworICAgICAgICBt
X25vZGVJZCA9IG1faW1tdXRhYmxlTkZBLT5ub2Rlcy5zaXplKCk7CisgICAgICAgIG1faW1tdXRh
YmxlTkZBLT5ub2Rlcy5hcHBlbmQoSW1tdXRhYmxlTkZBTm9kZSgpKTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIG1faXNEaXNjb25uZWN0ZWQgPSB0cnVlOworI2VuZGlmCisgICAgfQor
CisgICAgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIoSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXImJiBv
dGhlcikKKyAgICAgICAgOiBtX2ltbXV0YWJsZU5GQShvdGhlci5tX2ltbXV0YWJsZU5GQSkKKyAg
ICAgICAgLCBtX3JhbmdlcyhXVEY6Om1vdmUob3RoZXIubV9yYW5nZXMpKQorICAgICAgICAsIG1f
ZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzKFdURjo6bW92ZShtX2Vwc2lsb25UcmFuc2l0aW9uVGFy
Z2V0cykpCisgICAgICAgICwgbV9hY3Rpb25zKFdURjo6bW92ZShvdGhlci5tX2FjdGlvbnMpKQor
ICAgICAgICAsIG1fbm9kZUlkKG90aGVyLm1fbm9kZUlkKQorICAgICAgICAsIG1fZmluYWxpemVk
KG90aGVyLm1fZmluYWxpemVkKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX2lz
RGlzY29ubmVjdGVkKG90aGVyLm1faXNEaXNjb25uZWN0ZWQpCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIG90aGVyLm1faW1tdXRhYmxlTkZBID0gbnVsbHB0cjsKKyAgICAgICAgb3RoZXIubV9maW5h
bGl6ZWQgPSB0cnVlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgb3RoZXIubV9pc0Rp
c2Nvbm5lY3RlZCA9IGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgfkltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faXNEaXNj
b25uZWN0ZWQsICJUaGlzIG5vZGVzIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcgYW5kIGlz
IG5vdCByZWFjaGVkIGJ5IGFueSBvdGhlciBub2RlLiIpOworCisgICAgICAgIGlmICghbV9maW5h
bGl6ZWQpCisgICAgICAgICAgICBmaW5hbGl6ZSgpOworICAgIH0KKworICAgIHZvaWQgYWRkVHJh
bnNpdGlvbihDaGFyYWN0ZXJUeXBlIGZpcnN0LCBDaGFyYWN0ZXJUeXBlIGxhc3QsIGNvbnN0IElt
bXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0YXJnZXQpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOworICAgICAgICB0YXJnZXQubV9p
c0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIHN0cnVjdCBUcml2aWFsUmFu
Z2UgeworICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSBmaXJzdDsKKyAgICAgICAgICAgIENoYXJh
Y3RlclR5cGUgbGFzdDsKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IEZha2VSYW5nZUl0ZXJh
dG9yIHsKKyAgICAgICAgICAgIGNvbnN0IFRyaXZpYWxSYW5nZSYgb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gcmFuZ2U7IH0KKyAgICAgICAgICAgIGNvbnN0IFRyaXZpYWxSYW5nZSogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICZyYW5nZTsgfQorICAgICAgICAgICAgdWludDMyX3QgZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIHRhcmdldElkOyB9CisgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRmFrZVJhbmdlSXRlcmF0b3ImIG90aGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLT5pc0VuZCA9PSBvdGhlci5pc0VuZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGYWtlUmFuZ2VJdGVyYXRvciYg
b3RoZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgICAgICBGYWtlUmFu
Z2VJdGVyYXRvciBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
c0VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBUcml2aWFsUmFuZ2UgcmFuZ2U7CisgICAgICAgICAgICB1aW50MzJf
dCB0YXJnZXRJZDsKKyAgICAgICAgICAgIGJvb2wgaXNFbmQ7CisgICAgICAgIH07CisKKyAgICAg
ICAgc3RydWN0IENvbnZlcnRlciB7CisgICAgICAgICAgICBUYXJnZXRTZXQgY29udmVydCh1aW50
MzJfdCB0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRhcmdl
dFNldCh7IHRhcmdldCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZXh0ZW5k
KFRhcmdldFNldCYgZXhpc3RpbmdUYXJnZXRzLCB1aW50MzJfdCB0YXJnZXQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUYXJnZXRzLmFkZCh0YXJnZXQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIENvbnZlcnRlciBjb252ZXJ0ZXI7CisgICAg
ICAgIG1fcmFuZ2VzLmV4dGVuZChGYWtlUmFuZ2VJdGVyYXRvciB7IHsgZmlyc3QsIGxhc3QgfSwg
dGFyZ2V0Lm1fbm9kZUlkLCBmYWxzZSB9LCBGYWtlUmFuZ2VJdGVyYXRvciB7IHsgMCwgMCB9LCB0
YXJnZXQubV9ub2RlSWQsIHRydWUgfSwgY29udmVydGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZEVwc2lsb25UcmFuc2l0aW9uKGNvbnN0IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0YXJnZXQp
CisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9
IGZhbHNlOworICAgICAgICB0YXJnZXQubV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOworI2VuZGlm
CisgICAgICAgIG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzLmFkZCh0YXJnZXQubV9ub2RlSWQp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFjdGlvbkl0ZXJhdG9yPgorICAgIHZv
aWQgc2V0QWN0aW9ucyhBY3Rpb25JdGVyYXRvciBiZWdpbiwgQWN0aW9uSXRlcmF0b3IgZW5kKQor
ICAgIHsKKyAgICAgICAgbV9hY3Rpb25zLmFkZChiZWdpbiwgZW5kKTsKKyAgICB9CisKKyAgICBJ
bW11dGFibGVORkFOb2RlQnVpbGRlciYgb3BlcmF0b3I9KEltbXV0YWJsZU5GQU5vZGVCdWlsZGVy
JiYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIW1fZmluYWxpemVkKQorICAgICAgICAgICAg
ZmluYWxpemUoKTsKKworICAgICAgICBtX2ltbXV0YWJsZU5GQSA9IG90aGVyLm1faW1tdXRhYmxl
TkZBOworICAgICAgICBtX3JhbmdlcyA9IFdURjo6bW92ZShvdGhlci5tX3Jhbmdlcyk7CisgICAg
ICAgIG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzID0gV1RGOjptb3ZlKG90aGVyLm1fZXBzaWxv
blRyYW5zaXRpb25UYXJnZXRzKTsKKyAgICAgICAgbV9hY3Rpb25zID0gV1RGOjptb3ZlKG90aGVy
Lm1fYWN0aW9ucyk7CisgICAgICAgIG1fbm9kZUlkID0gb3RoZXIubV9ub2RlSWQ7CisgICAgICAg
IG1fZmluYWxpemVkID0gb3RoZXIubV9maW5hbGl6ZWQ7CisKKyAgICAgICAgb3RoZXIubV9pbW11
dGFibGVORkEgPSBudWxscHRyOworICAgICAgICBvdGhlci5tX2ZpbmFsaXplZCA9IHRydWU7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gb3RoZXIubV9p
c0Rpc2Nvbm5lY3RlZDsKKyAgICAgICAgb3RoZXIubV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOwor
I2VuZGlmCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBmaW5hbGl6ZSgpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2ZpbmFs
aXplZCwgIlRoZSBBUEkgY29udHJhY3QgaXMgdGhhdCB0aGUgYnVpbGRlciBjYW4gb25seSBiZSBm
aW5hbGl6ZWQgb25jZS4iKTsKKyAgICAgICAgbV9maW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBJ
bW11dGFibGVORkFOb2RlJiBpbW11dGFibGVORkFOb2RlID0gbV9pbW11dGFibGVORkEtPm5vZGVz
W21fbm9kZUlkXTsKKyAgICAgICAgc2lua0FjdGlvbnMoaW1tdXRhYmxlTkZBTm9kZSk7CisgICAg
ICAgIHNpbmtFcHNpbG9uVHJhbnNpdGlvbnMoaW1tdXRhYmxlTkZBTm9kZSk7CisgICAgICAgIHNp
bmtUcmFuc2l0aW9ucyhpbW11dGFibGVORkFOb2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNpbmtB
Y3Rpb25zKEltbXV0YWJsZU5GQU5vZGUmIGltbXV0YWJsZU5GQU5vZGUpCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBhY3Rpb25TdGFydCA9IG1faW1tdXRhYmxlTkZBLT5hY3Rpb25zLnNpemUoKTsK
KyAgICAgICAgZm9yIChjb25zdCBBY3Rpb25UeXBlJiBhY3Rpb24gOiBtX2FjdGlvbnMpCisgICAg
ICAgICAgICBtX2ltbXV0YWJsZU5GQS0+YWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICAgICAg
dW5zaWduZWQgYWN0aW9uRW5kID0gbV9pbW11dGFibGVORkEtPmFjdGlvbnMuc2l6ZSgpOworICAg
ICAgICBpbW11dGFibGVORkFOb2RlLmFjdGlvblN0YXJ0ID0gYWN0aW9uU3RhcnQ7CisgICAgICAg
IGltbXV0YWJsZU5GQU5vZGUuYWN0aW9uRW5kID0gYWN0aW9uRW5kOworICAgIH0KKworICAgIHZv
aWQgc2lua1RyYW5zaXRpb25zKEltbXV0YWJsZU5GQU5vZGUmIGltbXV0YWJsZU5GQU5vZGUpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc1N0YXJ0ID0gbV9pbW11dGFibGVORkEt
PnRyYW5zaXRpb25zLnNpemUoKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IG1f
cmFuZ2VzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXRzU3RhcnQgPSBtX2ltbXV0YWJs
ZU5GQS0+dGFyZ2V0cy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IHRhcmdldCA6
IHJhbmdlLmRhdGEpCisgICAgICAgICAgICAgICAgbV9pbW11dGFibGVORkEtPnRhcmdldHMuYXBw
ZW5kKHRhcmdldCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXRzRW5kID0gbV9pbW11dGFi
bGVORkEtPnRhcmdldHMuc2l6ZSgpOworCisgICAgICAgICAgICBtX2ltbXV0YWJsZU5GQS0+dHJh
bnNpdGlvbnMuYXBwZW5kKEltbXV0YWJsZVJhbmdlPENoYXJhY3RlclR5cGU+IHsgdGFyZ2V0c1N0
YXJ0LCB0YXJnZXRzRW5kLCByYW5nZS5maXJzdCwgcmFuZ2UubGFzdCB9KTsKKyAgICAgICAgfQor
ICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0VuZCA9IG1faW1tdXRhYmxlTkZBLT50cmFuc2l0
aW9ucy5zaXplKCk7CisKKyAgICAgICAgaW1tdXRhYmxlTkZBTm9kZS5yYW5nZXNTdGFydCA9IHRy
YW5zaXRpb25zU3RhcnQ7CisgICAgICAgIGltbXV0YWJsZU5GQU5vZGUucmFuZ2VzRW5kID0gdHJh
bnNpdGlvbnNFbmQ7CisgICAgfQorCisgICAgdm9pZCBzaW5rRXBzaWxvblRyYW5zaXRpb25zKElt
bXV0YWJsZU5GQU5vZGUmIGltbXV0YWJsZU5GQU5vZGUpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBzdGFydCA9IG1faW1tdXRhYmxlTkZBLT5lcHNpbG9uVHJhbnNpdGlvbnNUYXJnZXRzLnNpemUo
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCB0YXJnZXQgOiBtX2Vwc2lsb25UcmFuc2l0aW9uVGFy
Z2V0cykKKyAgICAgICAgICAgIG1faW1tdXRhYmxlTkZBLT5lcHNpbG9uVHJhbnNpdGlvbnNUYXJn
ZXRzLmFwcGVuZCh0YXJnZXQpOworICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX2ltbXV0YWJsZU5G
QS0+ZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0cy5zaXplKCk7CisKKyAgICAgICAgaW1tdXRhYmxl
TkZBTm9kZS5lcHNpbG9uVHJhbnNpdGlvblRhcmdldHNTdGFydCA9IHN0YXJ0OworICAgICAgICBp
bW11dGFibGVORkFOb2RlLmVwc2lsb25UcmFuc2l0aW9uVGFyZ2V0c0VuZCA9IGVuZDsKKyAgICB9
CisKKyAgICBUeXBlZEltbXV0YWJsZU5GQSogbV9pbW11dGFibGVORkEgeyBudWxscHRyIH07Cisg
ICAgTXV0YWJsZVJhbmdlTGlzdDxDaGFyYWN0ZXJUeXBlLCBUYXJnZXRTZXQ+IG1fcmFuZ2VzOwor
ICAgIFRhcmdldFNldCBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0czsKKyAgICBIYXNoU2V0PEFj
dGlvblR5cGUsIFdURjo6SW50SGFzaDxBY3Rpb25UeXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxBY3Rpb25UeXBlPj4gbV9hY3Rpb25zOworICAgIHVpbnQzMl90IG1fbm9k
ZUlkOworICAgIGJvb2wgbV9maW5hbGl6ZWQgeyB0cnVlIH07CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIG11dGFibGUgYm9vbCBtX2lzRGlzY29ubmVjdGVkIHsgZmFsc2UgfTsKKyNlbmRpZgor
fTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNWQxNDJiYjgxYjUyM2U5MGI0MDcxYWUxMGU2MDIyNWRiYmU1OTIxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdl
LmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGFibGVSYW5nZV9o
CisjZGVmaW5lIE11dGFibGVSYW5nZV9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEYXRhVHlwZT4K
K2NsYXNzIE11dGFibGVSYW5nZSB7CisgICAgdHlwZWRlZiBNdXRhYmxlUmFuZ2U8Q2hhcmFjdGVy
VHlwZSwgRGF0YVR5cGU+IFR5cGVkTXV0YWJsZVJhbmdlOworcHVibGljOgorICAgIE11dGFibGVS
YW5nZSh1aW50MzJfdCBuZXh0UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFj
dGVyVHlwZSBsYXN0KQorICAgICAgICA6IG5leHRSYW5nZUluZGV4KG5leHRSYW5nZUluZGV4KQor
ICAgICAgICAsIGZpcnN0KGZpcnN0KQorICAgICAgICAsIGxhc3QobGFzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChmaXJzdCA8PSBsYXN0KTsKKyAgICB9CisKKyAgICBNdXRhYmxlUmFuZ2UoY29u
c3QgRGF0YVR5cGUmIGRhdGEsIHVpbnQzMl90IG5leHRSYW5nZUluZGV4LCBDaGFyYWN0ZXJUeXBl
IGZpcnN0LCBDaGFyYWN0ZXJUeXBlIGxhc3QpCisgICAgICAgIDogZGF0YShkYXRhKQorICAgICAg
ICAsIG5leHRSYW5nZUluZGV4KG5leHRSYW5nZUluZGV4KQorICAgICAgICAsIGZpcnN0KGZpcnN0
KQorICAgICAgICAsIGxhc3QobGFzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmaXJzdCA8PSBs
YXN0KTsKKyAgICB9CisKKyAgICBNdXRhYmxlUmFuZ2UoRGF0YVR5cGUmJiBkYXRhLCB1aW50MzJf
dCBuZXh0UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0
KQorICAgICAgICA6IGRhdGEoV1RGOjptb3ZlKGRhdGEpKQorICAgICAgICAsIG5leHRSYW5nZUlu
ZGV4KG5leHRSYW5nZUluZGV4KQorICAgICAgICAsIGZpcnN0KGZpcnN0KQorICAgICAgICAsIGxh
c3QobGFzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmaXJzdCA8PSBsYXN0KTsKKyAgICB9CisK
KyAgICBNdXRhYmxlUmFuZ2UoTXV0YWJsZVJhbmdlJiYgb3RoZXIpCisgICAgICAgIDogZGF0YShX
VEY6Om1vdmUob3RoZXIuZGF0YSkpCisgICAgICAgICwgbmV4dFJhbmdlSW5kZXgob3RoZXIubmV4
dFJhbmdlSW5kZXgpCisgICAgICAgICwgZmlyc3Qob3RoZXIuZmlyc3QpCisgICAgICAgICwgbGFz
dChvdGhlci5sYXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpcnN0IDw9IGxhc3QpOworICAg
IH0KKworICAgIFR5cGVkTXV0YWJsZVJhbmdlJiBvcGVyYXRvcj0oVHlwZWRNdXRhYmxlUmFuZ2Um
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGRhdGEgPSBXVEY6Om1vdmUob3RoZXIuZGF0YSk7Cisg
ICAgICAgIG5leHRSYW5nZUluZGV4ID0gV1RGOjptb3ZlKG90aGVyLm5leHRSYW5nZUluZGV4KTsK
KyAgICAgICAgZmlyc3QgPSBXVEY6Om1vdmUob3RoZXIuZmlyc3QpOworICAgICAgICBsYXN0ID0g
V1RGOjptb3ZlKG90aGVyLmxhc3QpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgRGF0YVR5cGUgZGF0YTsKKworICAgIC8vIFdlIHVzZSBhIGZ1bm55IGNvbnZlbnRpb246IGlm
IHRoZXJlIGFyZSBubyBuZXh0UmFuZ2UsIHRoZSBuZXh0UmFuZ2VJbmRleCBpcyB6ZXJvLgorICAg
IC8vIFRoaXMgaXMgZmFzdGVyIHRvIGNoZWNrIHRoYW4gYSBzcGVjaWFsIHZhbHVlIGluIG1hbnkg
Y2FzZXMuCisgICAgLy8gV2UgY2FuIHVzZSB6ZXJvIGJlY2F1c2UgcmFuZ2VzIGNhbiBvbmx5IGZv
cm0gYSBjaGFpbiwgYW5kIHRoZSBmaXJzdCByYW5nZSBpcyBhbHdheXMgemVybyBieSBjb252ZW50
aW9uLgorICAgIC8vIFdoZW4gd2UgaW5zZXJ0IHNvbWV0aGluZyBpbiBmcm9tIG9mIHRoZSBmaXJz
dCByYW5nZSwgd2Ugc3dhcCB0aGUgdmFsdWVzLgorICAgIHVpbnQzMl90IG5leHRSYW5nZUluZGV4
OworICAgIENoYXJhY3RlclR5cGUgZmlyc3Q7CisgICAgQ2hhcmFjdGVyVHlwZSBsYXN0OworCisg
ICAgQ2hhcmFjdGVyVHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbGFzdCAtIGZpcnN0OyB9Cit9
OworCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBNdXRhYmxlUmFuZ2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdlTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdlTGlzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJlZjkwN2VlYWU0ZWEzMWZlYjgxNzZlZDkxMzFhNmQ2ZjYxYTNjZGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2VMaXN0
LmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGFibGVSYW5nZUxp
c3RfaAorI2RlZmluZSBNdXRhYmxlUmFuZ2VMaXN0X2gKKworI2luY2x1ZGUgIk11dGFibGVSYW5n
ZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCisvLyBBIHJhbmdlIGxpc3Qg
a2VlcHMgcmFuZ2VzIHNvcnRlZC4gUmFuZ2VzIGFyZSBub3Qgc29ydGVkIGluIHRoZSB2ZWN0b3Is
IGJ1dAordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIERhdGFUeXBl
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA+CitjbGFzcyBNdXRhYmxlUmFuZ2VMaXN0IHsK
KyAgICB0eXBlZGVmIE11dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBlLCBEYXRhVHlwZT4gVHlwZWRN
dXRhYmxlUmFuZ2U7CitwdWJsaWM6CisgICAgY2xhc3MgQ29uc3RJdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBjb25zdCBNdXRhYmxlUmFuZ2VMaXN0JiByYW5nZUxpc3Q7CisgICAgICAg
IHVpbnQzMl90IGluZGV4OworICAgICAgICBib29sIGF0RW5kOworCisgICAgICAgIGNvbnN0IFR5
cGVkTXV0YWJsZVJhbmdlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiByYW5nZUxpc3QubV9y
YW5nZXNbaW5kZXhdOyB9CisgICAgICAgIGNvbnN0IFR5cGVkTXV0YWJsZVJhbmdlKiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gJnJhbmdlTGlzdC5tX3Jhbmdlc1tpbmRleF07IH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgmcmFuZ2VMaXN0ID09ICZvdGhlci5yYW5nZUxp
c3QpOworICAgICAgICAgICAgaWYgKGF0RW5kIHx8IG90aGVyLmF0RW5kKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhdEVuZCA9PSBvdGhlci5hdEVuZDsKKyAgICAgICAgICAgIHJldHVybiBpbmRl
eCA9PSBvdGhlci5pbmRleDsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9CisKKyAgICAgICAgQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghYXRFbmQpOworICAgICAgICAgICAgaW5kZXggPSByYW5nZUxpc3Qu
bV9yYW5nZXNbaW5kZXhdLm5leHRSYW5nZUluZGV4OworICAgICAgICAgICAgaWYgKCFpbmRleCkK
KyAgICAgICAgICAgICAgICBhdEVuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIENvbnN0SXRlcmF0b3IgeyAqdGhpcywgMCwgbV9yYW5nZXMuaXNFbXB0eSgpIH07IH0K
KyAgICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IgeyAq
dGhpcywgMCwgdHJ1ZSB9OyB9CisKKyAgICB1aW50MzJfdCBhcHBlbmRSYW5nZSh1aW50MzJfdCBs
YXN0UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0LCBj
b25zdCBEYXRhVHlwZSYgZGF0YSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG5ld1JhbmdlSW5k
ZXggPSBtX3Jhbmdlcy5zaXplKCk7CisgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChUeXBlZE11dGFi
bGVSYW5nZShkYXRhLCAwLCBmaXJzdCwgbGFzdCkpOworICAgICAgICBpZiAoIW5ld1JhbmdlSW5k
ZXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBBU1NFUlQoIW1fcmFuZ2VzW2xh
c3RSYW5nZUluZGV4XS5uZXh0UmFuZ2VJbmRleCk7CisgICAgICAgIEFTU0VSVChtX3Jhbmdlc1ts
YXN0UmFuZ2VJbmRleF0ubGFzdCA8IGZpcnN0KTsKKworICAgICAgICBtX3Jhbmdlc1tsYXN0UmFu
Z2VJbmRleF0ubmV4dFJhbmdlSW5kZXggPSBuZXdSYW5nZUluZGV4OworICAgICAgICByZXR1cm4g
bmV3UmFuZ2VJbmRleDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2VJdGVy
YXRvciwgdHlwZW5hbWUgRGF0YUNvbnZlcnRlcj4KKyAgICB2b2lkIGV4dGVuZChSYW5nZUl0ZXJh
dG9yIG90aGVySXRlcmF0b3IsIFJhbmdlSXRlcmF0b3Igb3RoZXJFbmQsIERhdGFDb252ZXJ0ZXIg
ZGF0YUNvbnZlcnRlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlckl0ZXJhdG9yID09IG90aGVy
RW5kKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3Jhbmdlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGluaXRpYWxpemVGcm9tKG90aGVySXRlcmF0b3IsIG90aGVyRW5k
LCBkYXRhQ29udmVydGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgcmVhY2hlZFNlbGZFbmQgPSBmYWxzZTsKKyAgICAgICAgdWludDMyX3QgbGFzdFNl
bGZSYW5nZUluZGV4ID0gMDsKKyAgICAgICAgdWludDMyX3Qgc2VsZlJhbmdlSW5kZXggPSAwOwor
CisgICAgICAgIGF1dG8gb3RoZXJSYW5nZU9mZnNldCA9IG90aGVySXRlcmF0b3ItPmZpcnN0OyAv
LyBUbyBnZXQgdGhlIHJpZ2h0IHR5cGUgOikKKyAgICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IDA7
CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgVHlwZWRNdXRhYmxlUmFuZ2UqIGFjdGl2ZVNl
bGZSYW5nZSA9ICZtX3Jhbmdlc1tzZWxmUmFuZ2VJbmRleF07CisKKyAgICAgICAgICAgIC8vIEZp
cnN0LCB3ZSBtb3ZlIGZvcndhcmQgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgaW50ZXJlc3Rpbmcu
CisgICAgICAgICAgICBpZiAoYWN0aXZlU2VsZlJhbmdlLT5sYXN0IDwgb3RoZXJJdGVyYXRvci0+
Zmlyc3QgKyBvdGhlclJhbmdlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgbGFzdFNlbGZSYW5n
ZUluZGV4ID0gc2VsZlJhbmdlSW5kZXg7CisgICAgICAgICAgICAgICAgc2VsZlJhbmdlSW5kZXgg
PSBhY3RpdmVTZWxmUmFuZ2UtPm5leHRSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIHJlYWNo
ZWRTZWxmRW5kID0gIXNlbGZSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG90aGVySXRlcmF0b3ItPmxhc3QgPCBhY3Rp
dmVTZWxmUmFuZ2UtPmZpcnN0KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmV0d2VlbihsYXN0
U2VsZlJhbmdlSW5kZXgsIHNlbGZSYW5nZUluZGV4LCBvdGhlckl0ZXJhdG9yLT5maXJzdCArIG90
aGVyUmFuZ2VPZmZzZXQsIG90aGVySXRlcmF0b3ItPmxhc3QsIGRhdGFDb252ZXJ0ZXIuY29udmVy
dChvdGhlckl0ZXJhdG9yLmRhdGEoKSkpOworCisgICAgICAgICAgICAgICAgKytvdGhlckl0ZXJh
dG9yOworICAgICAgICAgICAgICAgIG90aGVyUmFuZ2VPZmZzZXQgPSAwOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB3ZSByZWFj
aGVkIGhlcmUsIHdlIGhhdmU6CisgICAgICAgICAgICAvLyAxKSBhY3RpdmVSYW5nZUEtPmxhc3Qg
Pj0gYWN0aXZlUmFuZ2VCLT5maXJzdC4KKyAgICAgICAgICAgIC8vIDIpIGFjdGl2ZVJhbmdlQS0+
Zmlyc3QgPD0gYWN0aXZlUmFuZ2VCLT5sYXN0LgorICAgICAgICAgICAgLy8gQnV0IHdlIGRvbid0
IGtub3cgaG93IHRoZXkgY29sbGlkZS4KKworICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHBh
cnQgb24gdGhlIGxlZnQ/IENyZWF0ZSBhIG5ldyByYW5nZSBmb3IgaXQuCisgICAgICAgICAgICBp
ZiAoYWN0aXZlU2VsZlJhbmdlLT5maXJzdCA8IG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJS
YW5nZU9mZnNldCkgeworICAgICAgICAgICAgICAgIERhdGFUeXBlIGNvcGllZERhdGEgPSBhY3Rp
dmVTZWxmUmFuZ2UtPmRhdGE7CisgICAgICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSBuZXdSYW5n
ZUZpcnN0Q2hhcmFjdGVyID0gYWN0aXZlU2VsZlJhbmdlLT5maXJzdDsKKyAgICAgICAgICAgICAg
ICBhY3RpdmVTZWxmUmFuZ2UtPmZpcnN0ID0gb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyBvdGhlclJh
bmdlT2Zmc2V0OworICAgICAgICAgICAgICAgIGluc2VydEJldHdlZW4obGFzdFNlbGZSYW5nZUlu
ZGV4LCBzZWxmUmFuZ2VJbmRleCwgbmV3UmFuZ2VGaXJzdENoYXJhY3Rlciwgb3RoZXJJdGVyYXRv
ci0+Zmlyc3QgKyBvdGhlclJhbmdlT2Zmc2V0IC0gMSwgV1RGOjptb3ZlKGNvcGllZERhdGEpKTsK
KyAgICAgICAgICAgICAgICBhY3RpdmVTZWxmUmFuZ2UgPSAmbV9yYW5nZXNbc2VsZlJhbmdlSW5k
ZXhdOworICAgICAgICAgICAgfSBlbHNlIGlmIChvdGhlckl0ZXJhdG9yLT5maXJzdCArIG90aGVy
UmFuZ2VPZmZzZXQgPCBhY3RpdmVTZWxmUmFuZ2UtPmZpcnN0KSB7CisgICAgICAgICAgICAgICAg
aW5zZXJ0QmV0d2VlbihsYXN0U2VsZlJhbmdlSW5kZXgsIHNlbGZSYW5nZUluZGV4LCBvdGhlckl0
ZXJhdG9yLT5maXJzdCArIG90aGVyUmFuZ2VPZmZzZXQsIGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3Qg
LSAxLCBkYXRhQ29udmVydGVyLmNvbnZlcnQob3RoZXJJdGVyYXRvci5kYXRhKCkpKTsKKworICAg
ICAgICAgICAgICAgIGFjdGl2ZVNlbGZSYW5nZSA9ICZtX3Jhbmdlc1tzZWxmUmFuZ2VJbmRleF07
CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvdGhlclJhbmdlT2Zmc2V0IDwg
YWN0aXZlU2VsZlJhbmdlLT5maXJzdCAtIG90aGVySXRlcmF0b3ItPmZpcnN0LCAiVGhlIG9mZnNl
dCBtdXN0IG1vdmUgZm9yd2FyZCBvciB3ZSBjb3VsZCBnZXQgc3R1Y2sgb24gdGhpcyBvcGVyYXRp
b24uIik7CisgICAgICAgICAgICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IGFjdGl2ZVNlbGZSYW5n
ZS0+Zmlyc3QgLSBvdGhlckl0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gSGVyZSwgd2Uga25vdyBib3RoIHJhbmdlcyBzdGFydCBhdCB0aGUgc2FtZSBwb2lu
dCwgd2UgbmVlZCB0byBjcmVhdGUgdGhlIHBhcnQgdGhhdCBpbnRlcnNlY3QKKyAgICAgICAgICAg
IC8vIGFuZCBtZXJnZSB0aGUgZGF0YS4KKworICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGZSYW5n
ZS0+bGFzdCA9PSBvdGhlckl0ZXJhdG9yLT5sYXN0KSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhleSBmaW5pc2ggdG9nZXRoZXIsIHRoaW5ncyBhcmUgcmVhbGx5IGVhc3k6IHdlIGp1c3QgYWRk
IEIgdG8gQS4KKyAgICAgICAgICAgICAgICBkYXRhQ29udmVydGVyLmV4dGVuZChhY3RpdmVTZWxm
UmFuZ2UtPmRhdGEsIG90aGVySXRlcmF0b3IuZGF0YSgpKTsKKworICAgICAgICAgICAgICAgIGxh
c3RTZWxmUmFuZ2VJbmRleCA9IHNlbGZSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIHNlbGZS
YW5nZUluZGV4ID0gYWN0aXZlU2VsZlJhbmdlLT5uZXh0UmFuZ2VJbmRleDsKKyAgICAgICAgICAg
ICAgICByZWFjaGVkU2VsZkVuZCA9ICFzZWxmUmFuZ2VJbmRleDsKKworICAgICAgICAgICAgICAg
ICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gMDsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGFjdGl2ZVNlbGZSYW5nZS0+bGFzdCA+IG90aGVySXRlcmF0b3ItPmxhc3QpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJZiBBIGlzIGJpZ2dlciB0aGFuIEIsIHdlIGFkZCBhIG1lcmdlZCB2ZXJz
aW9uIGFuZCBtb3ZlIEEgdG8gdGhlIHJpZ2h0LgorCisgICAgICAgICAgICAgICAgQ2hhcmFjdGVy
VHlwZSBjb21iaW5lZFBhcnRTdGFydCA9IGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3Q7CisgICAgICAg
ICAgICAgICAgYWN0aXZlU2VsZlJhbmdlLT5maXJzdCA9IG90aGVySXRlcmF0b3ItPmxhc3QgKyAx
OworCisgICAgICAgICAgICAgICAgRGF0YVR5cGUgY29tYmluZWREYXRhID0gYWN0aXZlU2VsZlJh
bmdlLT5kYXRhOworICAgICAgICAgICAgICAgIGRhdGFDb252ZXJ0ZXIuZXh0ZW5kKGNvbWJpbmVk
RGF0YSwgb3RoZXJJdGVyYXRvci5kYXRhKCkpOworICAgICAgICAgICAgICAgIGluc2VydEJldHdl
ZW4obGFzdFNlbGZSYW5nZUluZGV4LCBzZWxmUmFuZ2VJbmRleCwgY29tYmluZWRQYXJ0U3RhcnQs
IG90aGVySXRlcmF0b3ItPmxhc3QsIFdURjo6bW92ZShjb21iaW5lZERhdGEpKTsKKworICAgICAg
ICAgICAgICAgICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBvdGhlclJhbmdlT2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlLCBCIGVuZHMgYWZ0ZXIgQS4gV2UgbWVyZ2Ug
dGhlIGludGVyc2VjdGlvbiBhbmQgbW92ZSBvbi4KKyAgICAgICAgICAgIEFTU0VSVChvdGhlckl0
ZXJhdG9yLT5sYXN0ID4gYWN0aXZlU2VsZlJhbmdlLT5sYXN0KTsKKyAgICAgICAgICAgIGRhdGFD
b252ZXJ0ZXIuZXh0ZW5kKGFjdGl2ZVNlbGZSYW5nZS0+ZGF0YSwgb3RoZXJJdGVyYXRvci5kYXRh
KCkpOworCisgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gYWN0aXZlU2VsZlJhbmdlLT5s
YXN0IC0gb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyAxOworICAgICAgICAgICAgbGFzdFNlbGZSYW5n
ZUluZGV4ID0gc2VsZlJhbmdlSW5kZXg7CisgICAgICAgICAgICBzZWxmUmFuZ2VJbmRleCA9IGFj
dGl2ZVNlbGZSYW5nZS0+bmV4dFJhbmdlSW5kZXg7CisgICAgICAgICAgICByZWFjaGVkU2VsZkVu
ZCA9ICFzZWxmUmFuZ2VJbmRleDsKKyAgICAgICAgfSB3aGlsZSAoIXJlYWNoZWRTZWxmRW5kICYm
IG90aGVySXRlcmF0b3IgIT0gb3RoZXJFbmQpOworCisgICAgICAgIHdoaWxlIChvdGhlckl0ZXJh
dG9yICE9IG90aGVyRW5kKSB7CisgICAgICAgICAgICBsYXN0U2VsZlJhbmdlSW5kZXggPSBhcHBl
bmRSYW5nZShsYXN0U2VsZlJhbmdlSW5kZXgsIG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJS
YW5nZU9mZnNldCwgb3RoZXJJdGVyYXRvci0+bGFzdCwgZGF0YUNvbnZlcnRlci5jb252ZXJ0KG90
aGVySXRlcmF0b3IuZGF0YSgpKSk7CisgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gMDsK
KyAgICAgICAgICAgICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yYW5nZXMuaXNFbXB0
eSgpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9yYW5nZXMu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGRlYnVnUHJpbnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgZm9yIChjb25zdCBUeXBlZE11dGFibGVSYW5nZSYgcmFuZ2UgOiAqdGhpcykKKyAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiICAgICVkLSVkIiwgcmFuZ2UuZmlyc3QsIHJhbmdlLmxhc3Qp
OworICAgIH0KKworICAgIFZlY3RvcjxNdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZSwgRGF0YVR5
cGU+LCBpbmxpbmVDYXBhY2l0eT4gbV9yYW5nZXM7Citwcml2YXRlOgorICAgIHZvaWQgaW5zZXJ0
QmV0d2Vlbih1aW50MzJfdCYgbGVmdFJhbmdlSW5kZXgsIHVpbnQzMl90JiByaWdodFJhbmdlSW5k
ZXgsIENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCwgRGF0YVR5cGUmJiBk
YXRhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFuZ2VzW3JpZ2h0UmFuZ2VJbmRleF0uZmly
c3QgPiBsYXN0KTsKKworICAgICAgICBpZiAoIXJpZ2h0UmFuZ2VJbmRleCkgeworICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gV2UgYWx3YXlzIGtlZXAgdGhlIGZpcnN0IHJh
bmdlIGFzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICB1aW50
MzJfdCBtb3ZlZFJhbmdlSW5kZXggPSBtX3Jhbmdlcy5zaXplKCk7CisgICAgICAgICAgICBtX3Jh
bmdlcy5hcHBlbmQoV1RGOjptb3ZlKG1fcmFuZ2VzLmZpcnN0KCkpKTsKKyAgICAgICAgICAgIG1f
cmFuZ2VzWzBdID0gVHlwZWRNdXRhYmxlUmFuZ2UoV1RGOjptb3ZlKGRhdGEpLCBtb3ZlZFJhbmdl
SW5kZXgsIGZpcnN0LCBsYXN0KTsKKyAgICAgICAgICAgIGxlZnRSYW5nZUluZGV4ID0gMDsKKyAg
ICAgICAgICAgIHJpZ2h0UmFuZ2VJbmRleCA9IG1vdmVkUmFuZ2VJbmRleDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtX3Jhbmdlc1tsZWZ0UmFuZ2VJ
bmRleF0ubmV4dFJhbmdlSW5kZXggPT0gcmlnaHRSYW5nZUluZGV4KTsKKyAgICAgICAgQVNTRVJU
KG1fcmFuZ2VzW2xlZnRSYW5nZUluZGV4XS5sYXN0IDwgZmlyc3QpOworCisgICAgICAgIHVpbnQz
Ml90IG5ld1JhbmdlSW5kZXggPSBtX3Jhbmdlcy5zaXplKCk7CisgICAgICAgIG1fcmFuZ2VzLmFw
cGVuZChUeXBlZE11dGFibGVSYW5nZShXVEY6Om1vdmUoZGF0YSksIHJpZ2h0UmFuZ2VJbmRleCwg
Zmlyc3QsIGxhc3QpKTsKKyAgICAgICAgbV9yYW5nZXNbbGVmdFJhbmdlSW5kZXhdLm5leHRSYW5n
ZUluZGV4ID0gbmV3UmFuZ2VJbmRleDsKKyAgICAgICAgbGVmdFJhbmdlSW5kZXggPSBuZXdSYW5n
ZUluZGV4OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSYW5nZUl0ZXJhdG9yLCB0
eXBlbmFtZSBEYXRhQ29udmVydGVyPgorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb20oUmFuZ2VJdGVy
YXRvciBvdGhlckl0ZXJhdG9yLCBSYW5nZUl0ZXJhdG9yIG90aGVyRW5kLCBEYXRhQ29udmVydGVy
IGRhdGFDb252ZXJ0ZXIpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG90aGVy
SXRlcmF0b3IgIT0gb3RoZXJFbmQsICJXZSBzaG91bGQgbmV2ZXIgZG8gYW55dGhpbmcgd2hlbiBl
eHRlbmRpbmcgd2l0aCBhIG51bGwgcmFuZ2UuIik7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobV9yYW5nZXMuaXNFbXB0eSgpLCAiVGhpcyBjb2RlIGRvZXMgbm90IGhhbmRsZSBzcGxpdHRp
bmcsIGl0IGNhbiBvbmx5IGJlIHVzZWQgb24gZW1wdHkgUmFuZ2VMaXN0LiIpOworCisgICAgICAg
IHVpbnQzMl90IGxvb3BDb3VudGVyID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9y
YW5nZXMuYXBwZW5kKFR5cGVkTXV0YWJsZVJhbmdlKGRhdGFDb252ZXJ0ZXIuY29udmVydChvdGhl
ckl0ZXJhdG9yLmRhdGEoKSksCisgICAgICAgICAgICAgICAgbG9vcENvdW50ZXIgKyAxLAorICAg
ICAgICAgICAgICAgIG90aGVySXRlcmF0b3ItPmZpcnN0LAorICAgICAgICAgICAgICAgIG90aGVy
SXRlcmF0b3ItPmxhc3QpKTsKKyAgICAgICAgICAgICsrbG9vcENvdW50ZXI7CisgICAgICAgICAg
ICArK290aGVySXRlcmF0b3I7CisgICAgICAgIH0gd2hpbGUgKG90aGVySXRlcmF0b3IgIT0gb3Ro
ZXJFbmQpOworCisgICAgICAgIGlmICghbV9yYW5nZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9yYW5nZXMubGFzdCgpLm5leHRSYW5nZUluZGV4ID0gMDsKKyAgICB9Cit9OworCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisKKyNlbmRpZiAvLyBNdXRhYmxlUmFuZ2VMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ORkEuY3BwCmluZGV4IGIzMDE4ODQ5YWIwNDFjMDE3NGY2OTk3N2VmYmMxMmNj
NDgwZGViMTcuLmNhODViNmIzMTBhNGY3NjdmMmJkNDZiYTNhMzQ2NDIzMDhjYWI0MDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogCkBAIC0zNSwxODggKzM2LDg3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zIHsKIAotTkZBOjpORkEoKQotICAgIDogbV9yb290KGNyZWF0ZU5v
ZGUoKSkKLXsKLX0KLQotdW5zaWduZWQgTkZBOjpjcmVhdGVOb2RlKCkKLXsKLSAgICB1bnNpZ25l
ZCBuZXh0SWQgPSBtX25vZGVzLnNpemUoKTsKLSAgICBtX25vZGVzLmFwcGVuZChORkFOb2RlKCkp
OwotICAgIHJldHVybiBuZXh0SWQ7Ci19Ci0KLSNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9S
TUFOQ0VfUkVQT1JUSU5HCi1zaXplX3QgTkZBOjptZW1vcnlVc2VkKCkgY29uc3QKLXsKLSAgICBz
aXplX3Qgc2l6ZSA9IHNpemVvZihORkEpOwotICAgIGZvciAoY29uc3QgTkZBTm9kZSYgbm9kZSA6
IG1fbm9kZXMpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50
cmFuc2l0aW9ucykKLSAgICAgICAgICAgIHNpemUgKz0gdHJhbnNpdGlvbi52YWx1ZS5jYXBhY2l0
eSgpICogc2l6ZW9mKHVuc2lnbmVkKTsKLSAgICAgICAgc2l6ZSArPSBzaXplb2Yobm9kZSkKLSAg
ICAgICAgICAgICsgbm9kZS50cmFuc2l0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHN0ZDo6cGFp
cjx1aW50MTZfdCwgTkZBTm9kZUluZGV4U2V0PikKLSAgICAgICAgICAgICsgbm9kZS50cmFuc2l0
aW9uc09uQW55Q2hhcmFjdGVyLmNhcGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpCi0gICAgICAg
ICAgICArIG5vZGUuZmluYWxSdWxlSWRzLmNhcGFjaXR5KCkgKiBzaXplb2YodWludDY0X3QpOwot
ICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLSNlbmRpZgotCi12b2lkIE5GQTo6YWRkVHJhbnNp
dGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgY2hhciBjaGFyYWN0ZXIpCi17Ci0gICAg
QVNTRVJUKGZyb20gPCBtX25vZGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRvIDwgbV9ub2Rlcy5z
aXplKCkpOwotCi0gICAgTkZBTm9kZSYgZnJvbU5vZGUgPSBtX25vZGVzW2Zyb21dOwotICAgIGlm
IChmcm9tTm9kZS50cmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyLmNvbnRhaW5zKHRvKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX25vZGVzW2Zyb21dLnRyYW5zaXRp
b25zLmFkZChjaGFyYWN0ZXIsIE5GQU5vZGVJbmRleFNldCgpKTsKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFkZCh0byk7Ci19Ci0KLXZvaWQgTkZBOjphZGRFcHNpbG9uVHJhbnNpdGlv
bih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKLXsKLSAgICBBU1NFUlQoZnJvbSA8IG1fbm9k
ZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQodG8gPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbm9kZXNbZnJvbV0udHJhbnNpdGlvbnMuYWRkKGVwc2lsb25UcmFuc2l0
aW9uQ2hhcmFjdGVyLCBORkFOb2RlSW5kZXhTZXQoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hZGQodG8pOwotfQotCi12b2lkIE5GQTo6YWRkVHJhbnNpdGlvbnNPbkFueUNoYXJh
Y3Rlcih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKLXsKLSAgICBBU1NFUlQoZnJvbSA8IG1f
bm9kZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQodG8gPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBO
RkFOb2RlJiBmcm9tTm9kZSA9IG1fbm9kZXNbZnJvbV07Ci0gICAgZnJvbU5vZGUudHJhbnNpdGlv
bnNPbkFueUNoYXJhY3Rlci5hZGQodG8pOwotCi0gICAgZm9yIChhdXRvIHRyYW5zaXRpb25TbG90
IDogZnJvbU5vZGUudHJhbnNpdGlvbnMpCi0gICAgICAgIHRyYW5zaXRpb25TbG90LnZhbHVlLnJl
bW92ZSh0byk7Ci19Ci0KLXZvaWQgTkZBOjpzZXRBY3Rpb25zKHVuc2lnbmVkIG5vZGUsIGNvbnN0
IEFjdGlvbkxpc3QmIGFjdGlvbnMpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX25vZGVz
W25vZGVdLmZpbmFsUnVsZUlkcy5pc0VtcHR5KCksICJUaGUgZmluYWwgc3RhdGUgc2hvdWxkIG9u
bHkgYmUgZGVmaW5lZCBvbmNlLiIpOwotICAgIGNvcHlUb1ZlY3RvcihhY3Rpb25zLCBtX25vZGVz
W25vZGVdLmZpbmFsUnVsZUlkcyk7Ci19Ci0KLXVuc2lnbmVkIE5GQTo6Z3JhcGhTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9ub2Rlcy5zaXplKCk7Ci19Ci0KLXZvaWQgTkZBOjpyZXN0b3Jl
VG9HcmFwaFNpemUodW5zaWduZWQgc2l6ZSkKLXsKLSAgICBBU1NFUlQoc2l6ZSA+PSAxKTsKLSAg
ICBBU1NFUlQoc2l6ZSA8PSBncmFwaFNpemUoKSk7Ci0KLSAgICBtX25vZGVzLnNocmluayhzaXpl
KTsKLX0KLQotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwot
c3RhdGljIHZvaWQgcHJpbnRSYW5nZShib29sIGZpcnN0UmFuZ2UsIHVpbnQxNl90IHJhbmdlU3Rh
cnQsIHVpbnQxNl90IHJhbmdlRW5kLCB1aW50MTZfdCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rl
cikKLXsKLSAgICBpZiAoIWZpcnN0UmFuZ2UpCi0gICAgICAgIGRhdGFMb2dGKCIsICIpOwotICAg
IGlmIChyYW5nZVN0YXJ0ID09IHJhbmdlRW5kKSB7Ci0gICAgICAgIGlmIChyYW5nZVN0YXJ0ID09
IGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKQotICAgICAgICAgICAgZGF0YUxvZ0YoIsmbIik7
Ci0gICAgICAgIGVsc2UgaWYgKHJhbmdlU3RhcnQgPT0gJyInIHx8IHJhbmdlU3RhcnQgPT0gJ1xc
JykKLSAgICAgICAgICAgIGRhdGFMb2dGKCJcXCVjIiwgcmFuZ2VTdGFydCk7Ci0gICAgICAgIGVs
c2UgaWYgKHJhbmdlU3RhcnQgPj0gJyEnICYmIHJhbmdlU3RhcnQgPD0gJ34nKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVjIiwgcmFuZ2VTdGFydCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRhdGFMb2dGKCJcXFxcJWQiLCByYW5nZVN0YXJ0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAocmFuZ2VTdGFydCA9PSAxICYmIHJhbmdlRW5kID09IDEyNykKLSAgICAgICAgICAgIGRhdGFM
b2dGKCJbYW55IGlucHV0XSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nRigi
XFxcXCVkLVxcXFwlZCIsIHJhbmdlU3RhcnQsIHJhbmdlRW5kKTsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIHByaW50VHJhbnNpdGlvbnMoY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBncmFwaCwgdW5z
aWduZWQgc291cmNlTm9kZSwgdWludDE2X3QgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCi17
Ci0gICAgY29uc3QgTkZBTm9kZSYgbm9kZSA9IGdyYXBoW3NvdXJjZU5vZGVdOwotICAgIGNvbnN0
IEhhc2hNYXA8dWludDE2X3QsIE5GQU5vZGVJbmRleFNldCwgRGVmYXVsdEhhc2g8dWludDE2X3Q+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQxNl90Pj4mIHRy
YW5zaXRpb25zID0gbm9kZS50cmFuc2l0aW9uczsKLQotICAgIEhhc2hNYXA8dW5zaWduZWQsIEhh
c2hTZXQ8dWludDE2X3QsIERlZmF1bHRIYXNoPHVpbnQxNl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MTZfdD4+LCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46
Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0cmFu
c2l0aW9uc1BlclRhcmdldDsKLQotICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlvbiA6IHRy
YW5zaXRpb25zKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgdGFyZ2V0Tm9kZSA6IHRyYW5zaXRp
b24udmFsdWUpIHsKLSAgICAgICAgICAgIHRyYW5zaXRpb25zUGVyVGFyZ2V0LmFkZCh0YXJnZXRO
b2RlLCBIYXNoU2V0PHVpbnQxNl90LCBEZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2X3Q+PigpKTsKLSAgICAgICAgICAg
IHRyYW5zaXRpb25zUGVyVGFyZ2V0LmZpbmQodGFyZ2V0Tm9kZSktPnZhbHVlLmFkZCh0cmFuc2l0
aW9uLmtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5z
aXRpb25QZXJUYXJnZXQgOiB0cmFuc2l0aW9uc1BlclRhcmdldCkgewotICAgICAgICBkYXRhTG9n
RigiICAgICAgICAlZCAtPiAlZCBbbGFiZWw9XCIiLCBzb3VyY2VOb2RlLCB0cmFuc2l0aW9uUGVy
VGFyZ2V0LmtleSk7Ci0KLSAgICAgICAgVmVjdG9yPHVpbnQxNl90PiBpbmNvbW1pbmdDaGFyYWN0
ZXJzOwotICAgICAgICBjb3B5VG9WZWN0b3IodHJhbnNpdGlvblBlclRhcmdldC52YWx1ZSwgaW5j
b21taW5nQ2hhcmFjdGVycyk7Ci0gICAgICAgIHN0ZDo6c29ydChpbmNvbW1pbmdDaGFyYWN0ZXJz
LmJlZ2luKCksIGluY29tbWluZ0NoYXJhY3RlcnMuZW5kKCkpOwotCi0gICAgICAgIHVpbnQxNl90
IHJhbmdlU3RhcnQgPSBpbmNvbW1pbmdDaGFyYWN0ZXJzLmZpcnN0KCk7Ci0gICAgICAgIHVpbnQx
Nl90IHJhbmdlRW5kID0gcmFuZ2VTdGFydDsKLSAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgc29ydGVkVHJhbnNpdGlvbkluZGV4ID0gMTsgc29ydGVkVHJh
bnNpdGlvbkluZGV4IDwgaW5jb21taW5nQ2hhcmFjdGVycy5zaXplKCk7ICsrc29ydGVkVHJhbnNp
dGlvbkluZGV4KSB7Ci0gICAgICAgICAgICB1aW50MTZfdCBuZXh0Q2hhciA9IGluY29tbWluZ0No
YXJhY3RlcnNbc29ydGVkVHJhbnNpdGlvbkluZGV4XTsKLSAgICAgICAgICAgIGlmIChuZXh0Q2hh
ciA9PSByYW5nZUVuZCsxKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2VFbmQgPSBuZXh0Q2hhcjsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBy
aW50UmFuZ2UoZmlyc3QsIHJhbmdlU3RhcnQsIHJhbmdlRW5kLCBlcHNpbG9uVHJhbnNpdGlvbkNo
YXJhY3Rlcik7Ci0gICAgICAgICAgICByYW5nZVN0YXJ0ID0gcmFuZ2VFbmQgPSBuZXh0Q2hhcjsK
LSAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRSYW5n
ZShmaXJzdCwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQsIGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVy
KTsKLQotICAgICAgICBkYXRhTG9nRigiXCJdO1xuIik7Ci0gICAgfQotCi0gICAgZm9yICh1bnNp
Z25lZCB0YXJnZXRPbkFueUNoYXJhY3RlciA6IG5vZGUudHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rl
cikKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgJWQgLT4gJWQgW2xhYmVsPVwiW2FueSBpbnB1
dF1cIl07XG4iLCBzb3VyY2VOb2RlLCB0YXJnZXRPbkFueUNoYXJhY3Rlcik7Ci19Ci0KIHZvaWQg
TkZBOjpkZWJ1Z1ByaW50RG90KCkgY29uc3QKIHsKICAgICBkYXRhTG9nRigiZGlncmFwaCBORkFf
VHJhbnNpdGlvbnMge1xuIik7CiAgICAgZGF0YUxvZ0YoIiAgICByYW5rZGlyPUxSO1xuIik7CiAg
ICAgZGF0YUxvZ0YoIiAgICBub2RlIFtzaGFwZT1jaXJjbGVdO1xuIik7CiAgICAgZGF0YUxvZ0Yo
IiAgICB7XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7
ICsraSkgeworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAlZCBbbGFiZWw9PE5vZGUgJWQiLCBpLCBp
KTsKIAotICAgICAgICBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbFJ1bGVzID0gbV9ub2Rlc1tpXS5m
aW5hbFJ1bGVJZHM7Ci0gICAgICAgIGlmICghZmluYWxSdWxlcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgY29uc3QgYXV0byYgbm9kZSA9IG5vZGVzW2ldOworCisgICAgICAgIGlmIChub2RlLmFjdGlv
blN0YXJ0ICE9IG5vZGUuYWN0aW9uRW5kKSB7CiAgICAgICAgICAgICBkYXRhTG9nRigiPEJSLz4o
RmluYWw6ICIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBydWxlSW5kZXggPSAwOyBydWxl
SW5kZXggPCBmaW5hbFJ1bGVzLnNpemUoKTsgKytydWxlSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocnVsZUluZGV4KQorICAgICAgICAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYWN0aW9uSW5kZXggPSBub2RlLmFjdGlvblN0YXJ0OyBhY3Rp
b25JbmRleCA8IG5vZGUuYWN0aW9uRW5kOyArK2FjdGlvbkluZGV4KSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc0ZpcnN0KQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiJWxsdSIsIGZpbmFsUnVsZXNbcnVsZUluZGV4XSk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiVsbHUiLCBhY3Rpb25zW2FjdGlvbkluZGV4XSk7Cisg
ICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZGF0YUxvZ0YoIikiKTsKICAgICAgICAgfQotCiAgICAgICAgIGRhdGFMb2dGKCI+XSIpOwog
Ci0gICAgICAgIGlmICghZmluYWxSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIGlmIChub2RlLmFj
dGlvblN0YXJ0ICE9IG5vZGUuYWN0aW9uRW5kKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiBbc2hh
cGU9ZG91YmxlY2lyY2xlXSIpOwotCiAgICAgICAgIGRhdGFMb2dGKCI7XG4iKTsKICAgICB9CiAg
ICAgZGF0YUxvZ0YoIiAgICB9XG4iKTsKIAogICAgIGRhdGFMb2dGKCIgICAge1xuIik7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBy
aW50VHJhbnNpdGlvbnMobV9ub2RlcywgaSwgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV07CisKKyAgICAgICAgSGFzaE1hcDx1aW50MzJf
dCwgVmVjdG9yPHVpbnQzMl90PiwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gdHJhbnNpdGlvbnNQZXJUYXJn
ZXQ7CisKKyAgICAgICAgZm9yICh1aW50MzJfdCB0cmFuc2l0aW9uSW5kZXggPSBub2RlLnJhbmdl
c1N0YXJ0OyB0cmFuc2l0aW9uSW5kZXggPCBub2RlLnJhbmdlc0VuZDsgKyt0cmFuc2l0aW9uSW5k
ZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZUNoYXJSYW5nZSYgcmFuZ2UgPSB0cmFu
c2l0aW9uc1t0cmFuc2l0aW9uSW5kZXhdOworICAgICAgICAgICAgZm9yICh1aW50MzJfdCB0YXJn
ZXRJbmRleCA9IHJhbmdlLnRhcmdldFN0YXJ0OyB0YXJnZXRJbmRleCA8IHJhbmdlLnRhcmdldEVu
ZDsgKyt0YXJnZXRJbmRleCkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhcmdldCA9IHRh
cmdldHNbdGFyZ2V0SW5kZXhdOworICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gdHJh
bnNpdGlvbnNQZXJUYXJnZXQuYWRkKHRhcmdldCwgVmVjdG9yPHVpbnQzMl90PigpKTsKKyAgICAg
ICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh0cmFuc2l0aW9uSW5k
ZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBzbG90IDogdHJhbnNpdGlvbnNQZXJUYXJnZXQpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICAgICVkIC0+ICVkIFtsYWJlbD1cIiIsIGksIHNsb3Qua2V5KTsKKworICAgICAgICAgICAg
Ym9vbCBpc0ZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgcmFuZ2VJbmRl
eCA6IHNsb3QudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIsICIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgY29uc3Qg
SW1tdXRhYmxlQ2hhclJhbmdlJiByYW5nZSA9IHRyYW5zaXRpb25zW3JhbmdlSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmIChyYW5nZS5maXJzdCA9PSByYW5nZS5sYXN0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0FTQ0lJUHJpbnRhYmxlKHJhbmdlLmZpcnN0KSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiVjIiwgcmFuZ2UuZmlyc3QpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIlZCIsIHJhbmdlLmZpcnN0KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SVByaW50YWJsZShyYW5nZS5maXJzdCkgJiYgaXNBU0NJSVByaW50YWJsZShyYW5nZS5sYXN0KSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiVjLSVjIiwgcmFuZ2UuZmlyc3QsIHJhbmdl
Lmxhc3QpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIlZC0lZCIsIHJhbmdlLmZpcnN0LCByYW5nZS5sYXN0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nRigiXCJdXG4iKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAodWludDMyX3QgZXBzaWxvblRhcmdldEluZGV4ID0gbm9kZS5l
cHNpbG9uVHJhbnNpdGlvblRhcmdldHNTdGFydDsgZXBzaWxvblRhcmdldEluZGV4IDwgbm9kZS5l
cHNpbG9uVHJhbnNpdGlvblRhcmdldHNFbmQ7ICsrZXBzaWxvblRhcmdldEluZGV4KSB7CisgICAg
ICAgICAgICB1aW50MzJfdCB0YXJnZXQgPSBlcHNpbG9uVHJhbnNpdGlvbnNUYXJnZXRzW2Vwc2ls
b25UYXJnZXRJbmRleF07CisgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAlZCAtPiAlZCBb
bGFiZWw9XCLJm1wiXVxuIiwgaSwgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGRh
dGFMb2dGKCIgICAgfVxuIik7CiAgICAgZGF0YUxvZ0YoIn1cbiIpOwogfQotI2VuZGlmCiAKIH0g
Ly8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvTkZBLmgKaW5kZXggNGU0YzIyODViZmY3MTY0N2Y4YTM4ZTUxODU0NDE1NWQxZGUyYzlm
ZC4uOTE0ZWQxZWFmYWUyYzM1ZDQ3MjkwYWI0Y2QyNGY3NDAzOTZjYTY3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dp
bmcuaCIKKyNpbmNsdWRlICJJbW11dGFibGVORkFOb2RlQnVpbGRlci5oIgogI2luY2x1ZGUgIk5G
QU5vZGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTM2LDQyICszNywxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLWNs
YXNzIE5GQVRvREZBOwotCi0vLyBUaGUgTkZBIHByb3ZpZGVzIGEgd2F5IHRvIGJ1aWxkIGEgTkZB
IGdyYXBoIHdpdGggY2hhcmFjdGVycyBvciBlcHNpbG9uIGFzIHRyYW5zaXRpb25zLgotLy8gVGhl
IG5vZGVzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGFuIGlkZW50aWZpZXIuCi1jbGFzcyBORkEgewot
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIE5GQSgpOwotICAgIHVuc2lnbmVkIHJvb3QoKSBj
b25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KLSAgICB1bnNpZ25lZCBjcmVhdGVOb2RlKCk7Ci0KLSAg
ICB2b2lkIGFkZFRyYW5zaXRpb24odW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGNoYXIgY2hh
cmFjdGVyKTsKLSAgICB2b2lkIGFkZEVwc2lsb25UcmFuc2l0aW9uKHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvKTsKLSAgICB2b2lkIGFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIodW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgdG8pOwotICAgIHZvaWQgc2V0QWN0aW9ucyh1bnNpZ25lZCBub2Rl
LCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFjdGlvbnMpOwotCi0gICAgdW5zaWduZWQgZ3JhcGhT
aXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXN0b3JlVG9HcmFwaFNpemUodW5zaWduZWQpOwotCi0j
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgdm9pZCBh
ZGRSdWxlSWQodW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uTGlzdCYgcnVsZUlkcyk7Cit0eXBl
ZGVmIEltbXV0YWJsZVJhbmdlPGNoYXI+IEltbXV0YWJsZUNoYXJSYW5nZTsKK3R5cGVkZWYgSW1t
dXRhYmxlTkZBTm9kZUJ1aWxkZXI8Y2hhciwgdWludDY0X3Q+IEltbXV0YWJsZUNoYXJORkFOb2Rl
QnVpbGRlcjsKIAorc3RydWN0IE5GQSA6IHB1YmxpYyBJbW11dGFibGVORkE8Y2hhciwgdWludDY0
X3Q+IHsKICAgICB2b2lkIGRlYnVnUHJpbnREb3QoKSBjb25zdDsKLSNlbHNlCi0gICAgdm9pZCBh
ZGRSdWxlSWQodW5zaWduZWQsIHVpbnQ2NF90KSB7IH0KLSNlbmRpZgotI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKLSAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNv
bnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5GQVRvREZBOwotCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyID0gMjU2
OwotCi0gICAgVmVjdG9yPE5GQU5vZGU+IG1fbm9kZXM7Ci0gICAgdW5zaWduZWQgbV9yb290Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZB
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oCmluZGV4
IDhjZGFjMjliZmVkOWE1MzE3ZTc0NWJmMmZiMTZjNTA1NjA1Njk1NjcuLjZmNDNjMzhmNDEzNDIy
MGI1ODE5NjYyMzI2MjM2NzVjZmJiOTNmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL05GQU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ORkFOb2RlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgdHlwZWRlZiBIYXNoTWFwPHVpbnQx
Nl90LCBORkFOb2RlSW5kZXhTZXQsIERlZmF1bHRIYXNoPHVpbnQxNl90Pjo6SGFzaCwgV1RGOjpV
bnMKIAogY2xhc3MgTkZBTm9kZSB7CiBwdWJsaWM6Ci0gICAgSGFzaE1hcDx1aW50MTZfdCwgTkZB
Tm9kZUluZGV4U2V0LCBEZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2X3Q+PiB0cmFuc2l0aW9uczsKKyAgICBORkFOb2Rl
VHJhbnNpdGlvbnMgdHJhbnNpdGlvbnM7CiAgICAgTkZBTm9kZUluZGV4U2V0IHRyYW5zaXRpb25z
T25BbnlDaGFyYWN0ZXI7CiAKICAgICBBY3Rpb25MaXN0IGZpbmFsUnVsZUlkczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAppbmRleCA5NDVmNTZhMGM3
ZTBiYWJlYjZlY2M3MDc2MzY2NGJmNGJhNmE0MWJmLi42YTJiM2U0MDE5MWZjNzU1NzAyNWMzMzhj
OTJjZWFjNDkzZWUwNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ORkFUb0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
TkZBVG9ERkEuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uc0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgIkRGQU5vZGUuaCIKKyNpbmNsdWRlICJJbW11dGFi
bGVORkEuaCIKKyNpbmNsdWRlICJNdXRhYmxlUmFuZ2VMaXN0LmgiCiAjaW5jbHVkZSAiTkZBLmgi
CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAt
MzksNTMgKzQxLDQ4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zIHsKIAordHlwZWRlZiBNdXRhYmxlUmFuZ2U8Y2hhciwgTkZBTm9kZUluZGV4U2V0
PiBORkFOb2RlUmFuZ2U7Cit0eXBlZGVmIE11dGFibGVSYW5nZUxpc3Q8Y2hhciwgTkZBTm9kZUlu
ZGV4U2V0PiBORkFOb2RlUmFuZ2VMaXN0OwordHlwZWRlZiBNdXRhYmxlUmFuZ2VMaXN0PGNoYXIs
IE5GQU5vZGVJbmRleFNldCwgMTI4PiBQcmVhbGxvY2F0ZWRORkFOb2RlUmFuZ2VMaXN0OworCiAv
LyBGSVhNRTogc2V0IGEgYmV0dGVyIGluaXRpYWwgc2l6ZS4KIC8vIEZJWE1FOiBpbmNsdWRlIHRo
ZSBoYXNoIGluc2lkZSBOb2RlSWRTZXQuCiB0eXBlZGVmIE5GQU5vZGVJbmRleFNldCBOb2RlSWRT
ZXQ7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlcHNpbG9uQ2xvc3VyZUV4Y2x1ZGluZ1NlbGYoY29u
c3QgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCwgdW5zaWduZWQgbm9kZUlkLCB1bnNpZ25lZCBl
cHNpbG9uVHJhbnNpdGlvbkNoYXJhY3RlciwgVmVjdG9yPHVuc2lnbmVkPiYgb3V0cHV0KQorc3Rh
dGljIGlubGluZSB2b2lkIGVwc2lsb25DbG9zdXJlRXhjbHVkaW5nU2VsZihORkEmIG5mYSwgdW5z
aWduZWQgbm9kZUlkLCBWZWN0b3I8dW5zaWduZWQ+JiBvdXRwdXQpCiB7Ci0gICAgY29uc3QgYXV0
byYgdHJhbnNpdGlvbnMgPSBuZmFHcmFwaFtub2RlSWRdLnRyYW5zaXRpb25zOwotICAgIGF1dG8g
ZXBzaWxvblRyYW5zaXRpb25TbG90ID0gdHJhbnNpdGlvbnMuZmluZChlcHNpbG9uVHJhbnNpdGlv
bkNoYXJhY3Rlcik7Ci0KLSAgICBpZiAoZXBzaWxvblRyYW5zaXRpb25TbG90ID09IHRyYW5zaXRp
b25zLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBOb2RlSWRTZXQgY2xvc3VyZSh7IG5v
ZGVJZCB9KTsKLSAgICBWZWN0b3I8dW5zaWduZWQsIDY0PiB1bnByb2Nlc3NlZE5vZGVzOwotICAg
IGNvcHlUb1ZlY3RvcihlcHNpbG9uVHJhbnNpdGlvblNsb3QtPnZhbHVlLCB1bnByb2Nlc3NlZE5v
ZGVzKTsKLSAgICBjbG9zdXJlLmFkZCh1bnByb2Nlc3NlZE5vZGVzLmJlZ2luKCksIHVucHJvY2Vz
c2VkTm9kZXMuZW5kKCkpOwotICAgIG91dHB1dCA9IHVucHJvY2Vzc2VkTm9kZXM7CisgICAgVmVj
dG9yPHVuc2lnbmVkLCA2ND4gdW5wcm9jZXNzZWROb2Rlcyh7IG5vZGVJZCB9KTsKIAogICAgIGRv
IHsKICAgICAgICAgdW5zaWduZWQgdW5wcm9jZXNzZWROb2RlSWQgPSB1bnByb2Nlc3NlZE5vZGVz
LnRha2VMYXN0KCk7Ci0gICAgICAgIGNvbnN0IE5GQU5vZGUmIG5vZGUgPSBuZmFHcmFwaFt1bnBy
b2Nlc3NlZE5vZGVJZF07Ci0gICAgICAgIGF1dG8gZXBzaWxvblRyYW5zaXRpb25TbG90ID0gbm9k
ZS50cmFuc2l0aW9ucy5maW5kKGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKTsKLSAgICAgICAg
aWYgKGVwc2lsb25UcmFuc2l0aW9uU2xvdCAhPSBub2RlLnRyYW5zaXRpb25zLmVuZCgpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRhcmdldE5vZGVJZCA6IGVwc2lsb25UcmFuc2l0aW9u
U2xvdC0+dmFsdWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGNsb3N1cmUu
YWRkKHRhcmdldE5vZGVJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkTm9kZXMuYXBwZW5kKHRhcmdl
dE5vZGVJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodGFyZ2V0Tm9kZUlk
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBuZmEubm9k
ZXNbdW5wcm9jZXNzZWROb2RlSWRdOworCisgICAgICAgIGZvciAodWludDMyX3QgZXBzaWxvblRh
cmdldEluZGV4ID0gbm9kZS5lcHNpbG9uVHJhbnNpdGlvblRhcmdldHNTdGFydDsgZXBzaWxvblRh
cmdldEluZGV4IDwgbm9kZS5lcHNpbG9uVHJhbnNpdGlvblRhcmdldHNFbmQ7ICsrZXBzaWxvblRh
cmdldEluZGV4KSB7CisgICAgICAgICAgICB1aW50MzJfdCB0YXJnZXROb2RlSWQgPSBuZmEuZXBz
aWxvblRyYW5zaXRpb25zVGFyZ2V0c1tlcHNpbG9uVGFyZ2V0SW5kZXhdOworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBjbG9zdXJlLmFkZCh0YXJnZXROb2RlSWQpOworICAgICAgICAgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRO
b2Rlcy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KHRhcmdldE5vZGVJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IHdoaWxlICgh
dW5wcm9jZXNzZWROb2Rlcy5pc0VtcHR5KCkpOworCisgICAgb3V0cHV0LnNocmlua1RvRml0KCk7
CiB9CiAKLXN0YXRpYyB2b2lkIHJlc29sdmVFcHNpbG9uQ2xvc3VyZXMoVmVjdG9yPE5GQU5vZGU+
JiBuZmFHcmFwaCwgdW5zaWduZWQgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIsIFZlY3RvcjxW
ZWN0b3I8dW5zaWduZWQ+PiYgbmZhTm9kZUNsb3N1cmVzKQorc3RhdGljIHZvaWQgcmVzb2x2ZUVw
c2lsb25DbG9zdXJlcyhORkEmIG5mYSwgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+JiBuZmFOb2Rl
Q2xvc3VyZXMpCiB7Ci0gICAgdW5zaWduZWQgbmZhR3JhcGhTaXplID0gbmZhR3JhcGguc2l6ZSgp
OworICAgIHVuc2lnbmVkIG5mYUdyYXBoU2l6ZSA9IG5mYS5ub2Rlcy5zaXplKCk7CiAgICAgbmZh
Tm9kZUNsb3N1cmVzLnJlc2l6ZShuZmFHcmFwaFNpemUpOworCiAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSWQgPSAwOyBub2RlSWQgPCBuZmFHcmFwaFNpemU7ICsrbm9kZUlkKQotICAgICAgICBlcHNp
bG9uQ2xvc3VyZUV4Y2x1ZGluZ1NlbGYobmZhR3JhcGgsIG5vZGVJZCwgZXBzaWxvblRyYW5zaXRp
b25DaGFyYWN0ZXIsIG5mYU5vZGVDbG9zdXJlc1tub2RlSWRdKTsKKyAgICAgICAgZXBzaWxvbkNs
b3N1cmVFeGNsdWRpbmdTZWxmKG5mYSwgbm9kZUlkLCBuZmFOb2RlQ2xvc3VyZXNbbm9kZUlkXSk7
CiAKLSAgICBmb3IgKHVuc2lnbmVkIG5vZGVJZCA9IDA7IG5vZGVJZCA8IG5mYUdyYXBoU2l6ZTsg
Kytub2RlSWQpIHsKLSAgICAgICAgaWYgKCFuZmFOb2RlQ2xvc3VyZXNbbm9kZUlkXS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGJvb2wgZXBzaWxvblRyYW5zaXRpb25Jc1JlbW92ZWQgPSBuZmFH
cmFwaFtub2RlSWRdLnRyYW5zaXRpb25zLnJlbW92ZShlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVwc2lsb25UcmFuc2l0aW9uSXNSZW1vdmVk
LCBlcHNpbG9uVHJhbnNpdGlvbklzUmVtb3ZlZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8g
RXZlcnkgbm9kZXMgc3RpbGwgcG9pbnQgdG8gdGhhdCB0YWJsZSwgYnV0IHdlIHdvbid0IHVzZSBp
dCBldmVyIGFnYWluLgorICAgIC8vIENsZWFyIGl0IHRvIGdldCBiYWNrIHRoZSBtZW1vcnkuIFRo
YXQncyBub3QgcHJldHR5IGJ1dCBtZW1vcnkgaXMgaW1wb3J0YW50IGhlcmUsIHdlIGhhdmUgYm90
aAorICAgIC8vIGdyYXBocyBleGlzdGluZyBhdCB0aGUgc2FtZSB0aW1lLgorICAgIG5mYS5lcHNp
bG9uVHJhbnNpdGlvbnNUYXJnZXRzLmNsZWFyKCk7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgZXh0ZW5kU2V0V2l0aENsb3N1cmUoY29uc3QgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+
JiBuZmFOb2RlQ2xvc3VyZXMsIHVuc2lnbmVkIG5vZGVJZCwgTm9kZUlkU2V0JiBzZXQpCkBAIC0y
MTQsOSArMjExLDkgQEAgc3RydWN0IFVuaXF1ZU5vZGVJZFNldEhhc2hIYXNoVHJhaXRzIDogcHVi
bGljIFdURjo6Q3VzdG9tSGFzaFRyYWl0czxVbmlxdWVOb2RlSWQKIHR5cGVkZWYgSGFzaFNldDxz
dGQ6OnVuaXF1ZV9wdHI8VW5pcXVlTm9kZUlkU2V0PiwgVW5pcXVlTm9kZUlkU2V0SGFzaCwgVW5p
cXVlTm9kZUlkU2V0SGFzaEhhc2hUcmFpdHM+IFVuaXF1ZU5vZGVJZFNldFRhYmxlOwogCiBzdHJ1
Y3QgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UgewotICAgIE5vZGVJZFNldFRvVW5p
cXVlTm9kZUlkU2V0U291cmNlKERGQSYgZGZhLCBjb25zdCBWZWN0b3I8TkZBTm9kZT4mIG5mYUdy
YXBoLCBjb25zdCBOb2RlSWRTZXQmIG5vZGVJZFNldCkKKyAgICBOb2RlSWRTZXRUb1VuaXF1ZU5v
ZGVJZFNldFNvdXJjZShERkEmIGRmYSwgY29uc3QgTkZBJiBuZmEsIGNvbnN0IE5vZGVJZFNldCYg
bm9kZUlkU2V0KQogICAgICAgICA6IGRmYShkZmEpCi0gICAgICAgICwgbmZhR3JhcGgobmZhR3Jh
cGgpCisgICAgICAgICwgbmZhKG5mYSkKICAgICAgICAgLCBub2RlSWRTZXQobm9kZUlkU2V0KQog
ICAgIHsKICAgICAgICAgLy8gVGhlIGhhc2hpbmcgb3BlcmF0aW9uIG11c3QgYmUgaW5kZXBlbmRh
bnQgb2YgdGhlIG5vZGVJZC4KQEAgLTIyNiw3ICsyMjMsNyBAQCBzdHJ1Y3QgTm9kZUlkU2V0VG9V
bmlxdWVOb2RlSWRTZXRTb3VyY2UgewogICAgICAgICB0aGlzLT5oYXNoID0gRGVmYXVsdEhhc2g8
dW5zaWduZWQ+OjpIYXNoOjpoYXNoKGhhc2gpOwogICAgIH0KICAgICBERkEmIGRmYTsKLSAgICBj
b25zdCBWZWN0b3I8TkZBTm9kZT4mIG5mYUdyYXBoOworICAgIGNvbnN0IE5GQSYgbmZhOwogICAg
IGNvbnN0IE5vZGVJZFNldCYgbm9kZUlkU2V0OwogICAgIHVuc2lnbmVkIGhhc2g7CiB9OwpAQCAt
MjQ3LDE0ICsyNDQsMTMgQEAgc3RydWN0IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0VHJhbnNs
YXRvciB7CiAgICAgICAgIERGQU5vZGUgbmV3REZBTm9kZTsKIAogICAgICAgICBIYXNoU2V0PHVp
bnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBhY3Rpb25zOworCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbmZhTm9kZUlkIDogc291cmNlLm5vZGVJZFNldCkgewotICAgICAgICAgICAgY29uc3QgTkZB
Tm9kZSYgbmZhTm9kZSA9IHNvdXJjZS5uZmFHcmFwaFtuZmFOb2RlSWRdOwotICAgICAgICAgICAg
YWN0aW9ucy5hZGQobmZhTm9kZS5maW5hbFJ1bGVJZHMuYmVnaW4oKSwgbmZhTm9kZS5maW5hbFJ1
bGVJZHMuZW5kKCkpOwotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVH
R0lORwotICAgICAgICAgICAgbmV3REZBTm9kZS5jb3JyZXNwb25kaW5nTkZBTm9kZXMuYXBwZW5k
KG5mYU5vZGVJZCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIG5mYU5vZGUgPSBz
b3VyY2UubmZhLm5vZGVzW25mYU5vZGVJZF07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFj
dGlvbkluZGV4ID0gbmZhTm9kZS5hY3Rpb25TdGFydDsgYWN0aW9uSW5kZXggPCBuZmFOb2RlLmFj
dGlvbkVuZDsgKythY3Rpb25JbmRleCkKKyAgICAgICAgICAgICAgICBhY3Rpb25zLmFkZChzb3Vy
Y2UubmZhLmFjdGlvbnNbYWN0aW9uSW5kZXhdKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICB1bnNpZ25lZCBhY3Rpb25zU3RhcnQgPSBzb3VyY2UuZGZhLmFjdGlvbnMuc2l6ZSgpOwog
ICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IGFjdGlvbnMpCiAgICAgICAgICAgICBzb3Vy
Y2UuZGZhLmFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CkBAIC0yOTgsNDYgKzI5NCwxMTggQEAgcHJp
dmF0ZToKICAgICBOb2RlSWRTZXQgbV90YXJnZXRzWzEyOF07CiB9OwogCi1zdGF0aWMgaW5saW5l
IHZvaWQgcG9wdWxhdGVUcmFuc2l0aW9ucyhTZXRUcmFuc2l0aW9ucyYgc2V0VHJhbnNpdGlvbnMs
IE5vZGVJZFNldCYgc2V0RmFsbGJhY2tUcmFuc2l0aW9uLCBjb25zdCBVbmlxdWVOb2RlSWRTZXRJ
bXBsJiBzb3VyY2VOb2RlU2V0LCBjb25zdCBWZWN0b3I8TkZBTm9kZT4mIGdyYXBoLCBjb25zdCBW
ZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4mIG5mYU5vZGVjbG9zdXJlcykKK3N0cnVjdCBEYXRhQ29u
dmVydGVyV2l0aEVwc2lsb25DbG9zdXJlIHsKKyAgICBjb25zdCBWZWN0b3I8VmVjdG9yPHVuc2ln
bmVkPj4mIG5mYU5vZGVjbG9zdXJlczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxl
PgorICAgIE5GQU5vZGVJbmRleFNldCBjb252ZXJ0KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYWJsZSkK
KyAgICB7CisgICAgICAgIE5GQU5vZGVJbmRleFNldCByZXN1bHQ7CisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUlkIDogaXRlcmFibGUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZUlk
KTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIG5vZGVDbG9zdXJlID0gbmZh
Tm9kZWNsb3N1cmVzW25vZGVJZF07CisgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGVDbG9zdXJl
LmJlZ2luKCksIG5vZGVDbG9zdXJlLmVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIHZv
aWQgZXh0ZW5kKE5GQU5vZGVJbmRleFNldCYgZGVzdGluYXRpb24sIGNvbnN0IEl0ZXJhYmxlJiBp
dGVyYWJsZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlkIDogaXRlcmFibGUp
IHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZGVzdGluYXRpb24uYWRkKG5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBub2RlQ2xvc3VyZSA9IG5mYU5vZGVjbG9zdXJlc1tu
b2RlSWRdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChub2RlQ2xvc3VyZS5iZWdp
bigpLCBub2RlQ2xvc3VyZS5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlQ29tYmluZWRUcmFuc2l0aW9uKFByZWFs
bG9jYXRlZE5GQU5vZGVSYW5nZUxpc3QmIGNvbWJpbmVkUmFuZ2VMaXN0LCBjb25zdCBVbmlxdWVO
b2RlSWRTZXRJbXBsJiBzb3VyY2VOb2RlU2V0LCBjb25zdCBORkEmIGltbXV0YWJsZU5GQSwgY29u
c3QgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+JiBuZmFOb2RlY2xvc3VyZXMpCiB7Ci0gICAgQVNT
RVJUKCFncmFwaC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChzZXRGYWxsYmFja1RyYW5zaXRpb24u
aXNFbXB0eSgpKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgZm9yIChjb25zdCBOb2RlSWRT
ZXQmIHNldCA6IHNldFRyYW5zaXRpb25zKQotICAgICAgICBBU1NFUlQoc2V0LmlzRW1wdHkoKSk7
Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1bnNpZ25lZCwgOD4gYWxsRmFsbGJhY2tUcmFuc2l0aW9u
czsKKyAgICBjb21iaW5lZFJhbmdlTGlzdC5jbGVhcigpOworCiAgICAgY29uc3QgdW5zaWduZWQq
IGJ1ZmZlciA9IHNvdXJjZU5vZGVTZXQuYnVmZmVyKCk7CisKKyAgICBEYXRhQ29udmVydGVyV2l0
aEVwc2lsb25DbG9zdXJlIGNvbnZlcnRlciB7IG5mYU5vZGVjbG9zdXJlcyB9OwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VOb2RlU2V0Lm1fc2l6ZTsgKytpKSB7CiAgICAgICAg
IHVuc2lnbmVkIG5vZGVJZCA9IGJ1ZmZlcltpXTsKLSAgICAgICAgY29uc3QgTkZBTm9kZSYgbmZh
U291cmNlTm9kZSA9IGdyYXBoW25vZGVJZF07Ci0gICAgICAgIGZvciAodW5zaWduZWQgdGFyZ2V0
VHJhbnNpdGlvbiA6IG5mYVNvdXJjZU5vZGUudHJhbnNpdGlvbnNPbkFueUNoYXJhY3RlcikKLSAg
ICAgICAgICAgIGFsbEZhbGxiYWNrVHJhbnNpdGlvbnMuYXBwZW5kKHRhcmdldFRyYW5zaXRpb24p
OworICAgICAgICBhdXRvIHRyYW5zaXRpb25zID0gaW1tdXRhYmxlTkZBLnRyYW5zaXRpb25zRm9y
Tm9kZShub2RlSWQpOworICAgICAgICBjb21iaW5lZFJhbmdlTGlzdC5leHRlbmQodHJhbnNpdGlv
bnMuYmVnaW4oKSwgdHJhbnNpdGlvbnMuZW5kKCksIGNvbnZlcnRlcik7CiAgICAgfQotICAgIGZv
ciAodW5zaWduZWQgdGFyZ2V0Tm9kZUlkIDogYWxsRmFsbGJhY2tUcmFuc2l0aW9ucykgewotICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IHNldEZhbGxiYWNrVHJhbnNpdGlvbi5hZGQodGFyZ2V0Tm9k
ZUlkKTsKLSAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgZXh0
ZW5kU2V0V2l0aENsb3N1cmUobmZhTm9kZWNsb3N1cmVzLCB0YXJnZXROb2RlSWQsIHNldEZhbGxi
YWNrVHJhbnNpdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYWxsYmFja1Ry
YW5zaXRpb24oY29uc3QgUHJlYWxsb2NhdGVkTkZBTm9kZVJhbmdlTGlzdCYgcmFuZ2VMaXN0KQor
eworICAgIC8vIFRyYW5zaXRpb25zIGNhbiBjb250YWlucyAiMCIgaWYgdGhlIGV4cHJlc3Npb24g
aGFzIGEgZW5kLW9mLWxpbmUgbWFya2VyLgorICAgIC8vIEZhbGxiYWNrIHRyYW5zaXRpb25zIGNv
dmVyIDEtMTI3LiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGUgZmlyc3QuCisKKyAgICBh
dXRvIGl0ZXJhdG9yID0gcmFuZ2VMaXN0LmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSByYW5nZUxp
c3QuZW5kKCk7CisgICAgaWYgKGl0ZXJhdG9yID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY2hhciBsYXN0U2VlbkNoYXJhY3RlciA9IDA7CisgICAgaWYgKCFpdGVyYXRvci0+
Zmlyc3QpIHsKKyAgICAgICAgbGFzdFNlZW5DaGFyYWN0ZXIgPSBpdGVyYXRvci0+bGFzdDsKKyAg
ICAgICAgaWYgKGxhc3RTZWVuQ2hhcmFjdGVyID09IDEyNykKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICArK2l0ZXJhdG9yOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzb3VyY2VOb2RlU2V0Lm1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG5v
ZGVJZCA9IGJ1ZmZlcltpXTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uU2xv
dCA6IGdyYXBoW25vZGVJZF0udHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIE5vZGVJZFNldCYg
dGFyZ2V0U2V0ID0gc2V0VHJhbnNpdGlvbnNbdHJhbnNpdGlvblNsb3Qua2V5XTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdGFyZ2V0Tm9kSWQgOiB0cmFuc2l0aW9uU2xvdC52YWx1ZSkgewot
ICAgICAgICAgICAgICAgIHRhcmdldFNldC5hZGQodGFyZ2V0Tm9kSWQpOwotICAgICAgICAgICAg
ICAgIGV4dGVuZFNldFdpdGhDbG9zdXJlKG5mYU5vZGVjbG9zdXJlcywgdGFyZ2V0Tm9kSWQsIHRh
cmdldFNldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvblNsb3Qu
a2V5KQotICAgICAgICAgICAgICAgIHRhcmdldFNldC5hZGQoc2V0RmFsbGJhY2tUcmFuc2l0aW9u
LmJlZ2luKCksIHNldEZhbGxiYWNrVHJhbnNpdGlvbi5lbmQoKSk7CisgICAgZm9yICg7aXRlcmF0
b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+Zmlyc3Qg
PiBsYXN0U2VlbkNoYXJhY3Rlcik7CisgICAgICAgIGlmIChpdGVyYXRvci0+Zmlyc3QgIT0gbGFz
dFNlZW5DaGFyYWN0ZXIgKyAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChpdGVyYXRvci0+bGFzdCA9PSAxMjcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgbGFzdFNlZW5DaGFyYWN0ZXIgPSBpdGVyYXRvci0+bGFzdDsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGZpbmRCZXN0RmFsbGJhY2tU
YXJnZXQoY29uc3QgUHJlYWxsb2NhdGVkTkZBTm9kZVJhbmdlTGlzdCYgcmFuZ2VMaXN0LCBjb25z
dCBWZWN0b3I8dW5zaWduZWQsIDEyOD4mIHJhbmdlVG9UYXJnZXQpCit7CisgICAgQVNTRVJUKGNh
blVzZUZhbGxiYWNrVHJhbnNpdGlvbihyYW5nZUxpc3QpKTsKKworICAgIEhhc2hNYXA8dWludDMy
X3QsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBoaXN0b2dyYW07CisKKyAgICB1bnNpZ25l
ZCByYW5nZVRvVGFyZ2V0SW5kZXggPSAwOworICAgIGF1dG8gaXRlcmF0b3IgPSByYW5nZUxpc3Qu
YmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IHJhbmdlTGlzdC5lbmQoKTsKKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGl0ZXJhdG9yICE9IGVuZCwgIkFuIGVtcHR5IHJhbmdlIGxpc3QgY2Fubm90IHVz
ZSBhIGZhbGxiYWNrIHRyYW5zaXRpb24uIik7CisKKyAgICBpZiAoIWl0ZXJhdG9yLT5maXJzdCAm
JiAhaXRlcmF0b3ItPmxhc3QpIHsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICAgICAgKytyYW5n
ZVRvVGFyZ2V0SW5kZXg7CisgICAgfQorICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3Ig
IT0gZW5kLCAiQW4gZW1wdHkgcmFuZ2UgbGlzdCBtYXRjaGluZyBvbmx5IHplcm8gY2Fubm90IHVz
ZSBhIGZhbGxiYWNrIHRyYW5zaXRpb24uIik7CisKKyAgICB1aW50MzJfdCBiZXN0VGFyZ2V0ID0g
cmFuZ2VUb1RhcmdldFtyYW5nZVRvVGFyZ2V0SW5kZXhdOworICAgIHVuc2lnbmVkIGJlc3RUYXJn
ZXRTY29yZSA9ICFpdGVyYXRvci0+Zmlyc3QgPyBpdGVyYXRvci0+c2l6ZSgpIC0gMSA6IGl0ZXJh
dG9yLT5zaXplKCk7CisgICAgaGlzdG9ncmFtLmFkZChiZXN0VGFyZ2V0LCBiZXN0VGFyZ2V0U2Nv
cmUpOworICAgICsraXRlcmF0b3I7CisgICAgKytyYW5nZVRvVGFyZ2V0SW5kZXg7CisKKyAgICBm
b3IgKDtpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IsICsrcmFuZ2VUb1RhcmdldEluZGV4KSB7
CisgICAgICAgIHVuc2lnbmVkIHJhbmdlU2l6ZSA9IGl0ZXJhdG9yLT5zaXplKCk7CisgICAgICAg
IHVpbnQzMl90IHRhcmdldCA9IHJhbmdlVG9UYXJnZXRbcmFuZ2VUb1RhcmdldEluZGV4XTsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBoaXN0b2dyYW0uYWRkKHRhcmdldCwgcmFuZ2VTaXplKTsK
KyAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gcmFuZ2VTaXplOworICAgICAgICBpZiAoYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA+IGJlc3RUYXJnZXRTY29yZSkgeworICAgICAgICAgICAgYmVzdFRhcmdl
dFNjb3JlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGJlc3RUYXJn
ZXQgPSB0YXJnZXQ7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIGJlc3RUYXJnZXQ7CiB9
CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldE9yQ3JlYXRlREZBTm9kZShjb25z
dCBOb2RlSWRTZXQmIG5mYU5vZGVTZXQsIGNvbnN0IFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGgs
IERGQSYgZGZhLCBVbmlxdWVOb2RlSWRTZXRUYWJsZSYgdW5pcXVlTm9kZUlkU2V0VGFibGUsIFZl
Y3RvcjxVbmlxdWVOb2RlSWRTZXRJbXBsKj4mIHVucHJvY2Vzc2VkTm9kZXMpCitzdGF0aWMgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBnZXRPckNyZWF0ZURGQU5vZGUoY29uc3QgTm9kZUlkU2V0JiBu
ZmFOb2RlU2V0LCBjb25zdCBORkEmIG5mYSwgREZBJiBkZmEsIFVuaXF1ZU5vZGVJZFNldFRhYmxl
JiB1bmlxdWVOb2RlSWRTZXRUYWJsZSwgVmVjdG9yPFVuaXF1ZU5vZGVJZFNldEltcGwqPiYgdW5w
cm9jZXNzZWROb2RlcykKIHsKLSAgICBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSBu
b2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZShkZmEsIG5mYUdyYXBoLCBuZmFOb2RlU2V0
KTsKKyAgICBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSBub2RlSWRTZXRUb1VuaXF1
ZU5vZGVJZFNldFNvdXJjZShkZmEsIG5mYSwgbmZhTm9kZVNldCk7CiAgICAgYXV0byB1bmlxdWVO
b2RlSWRBZGRSZXN1bHQgPSB1bmlxdWVOb2RlSWRTZXRUYWJsZS5hZGQ8Tm9kZUlkU2V0VG9Vbmlx
dWVOb2RlSWRTZXRUcmFuc2xhdG9yPihub2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk7
CiAgICAgaWYgKHVuaXF1ZU5vZGVJZEFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICB1bnBy
b2Nlc3NlZE5vZGVzLmFwcGVuZCh1bmlxdWVOb2RlSWRBZGRSZXN1bHQuaXRlcmF0b3ItPmltcGwo
KSk7CkBAIC0zNDcsNjAgKzQxNSw2MyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBn
ZXRPckNyZWF0ZURGQU5vZGUoY29uc3QgTm9kZUlkU2V0JiBuZmFOb2RlU2V0LCBjbwogCiBERkEg
TkZBVG9ERkE6OmNvbnZlcnQoTkZBJiBuZmEpCiB7Ci0gICAgREZBIGRmYTsKLSAgICBWZWN0b3I8
TkZBTm9kZT4mIG5mYUdyYXBoID0gbmZhLm1fbm9kZXM7Ci0KICAgICBWZWN0b3I8VmVjdG9yPHVu
c2lnbmVkPj4gbmZhTm9kZUNsb3N1cmVzOwotICAgIHJlc29sdmVFcHNpbG9uQ2xvc3VyZXMobmZh
R3JhcGgsIE5GQTo6ZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIsIG5mYU5vZGVDbG9zdXJlcyk7
CisgICAgcmVzb2x2ZUVwc2lsb25DbG9zdXJlcyhuZmEsIG5mYU5vZGVDbG9zdXJlcyk7CisKKyAg
ICBERkEgZGZhOwogCiAgICAgTm9kZUlkU2V0IGluaXRpYWxTZXQoeyBuZmEucm9vdCgpIH0pOwog
ICAgIGV4dGVuZFNldFdpdGhDbG9zdXJlKG5mYU5vZGVDbG9zdXJlcywgbmZhLnJvb3QoKSwgaW5p
dGlhbFNldCk7CiAKICAgICBVbmlxdWVOb2RlSWRTZXRUYWJsZSB1bmlxdWVOb2RlSWRTZXRUYWJs
ZTsKIAotICAgIE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlIGluaXRpYWxOb2RlSWRT
ZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZShkZmEsIG5mYUdyYXBoLCBpbml0aWFsU2V0KTsKKyAg
ICBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSBpbml0aWFsTm9kZUlkU2V0VG9Vbmlx
dWVOb2RlSWRTZXRTb3VyY2UoZGZhLCBuZmEsIGluaXRpYWxTZXQpOwogICAgIGF1dG8gYWRkUmVz
dWx0ID0gdW5pcXVlTm9kZUlkU2V0VGFibGUuYWRkPE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0
VHJhbnNsYXRvcj4oaW5pdGlhbE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKTsKIAog
ICAgIFZlY3RvcjxVbmlxdWVOb2RlSWRTZXRJbXBsKj4gdW5wcm9jZXNzZWROb2RlczsKICAgICB1
bnByb2Nlc3NlZE5vZGVzLmFwcGVuZChhZGRSZXN1bHQuaXRlcmF0b3ItPmltcGwoKSk7CiAKLSAg
ICBTZXRUcmFuc2l0aW9ucyB0cmFuc2l0aW9uc0Zyb21DbG9zZWRTZXQ7Ci0KKyAgICBQcmVhbGxv
Y2F0ZWRORkFOb2RlUmFuZ2VMaXN0IGNvbWJpbmVkUmFuZ2VMaXN0OworICAgIFZlY3Rvcjx1bnNp
Z25lZCwgMTI4PiByYW5nZVRvVGFyZ2V0OwogICAgIGRvIHsKICAgICAgICAgVW5pcXVlTm9kZUlk
U2V0SW1wbCogdW5pcXVlTm9kZUlkU2V0SW1wbCA9IHVucHJvY2Vzc2VkTm9kZXMudGFrZUxhc3Qo
KTsKKyAgICAgICAgY3JlYXRlQ29tYmluZWRUcmFuc2l0aW9uKGNvbWJpbmVkUmFuZ2VMaXN0LCAq
dW5pcXVlTm9kZUlkU2V0SW1wbCwgbmZhLCBuZmFOb2RlQ2xvc3VyZXMpOwogCi0gICAgICAgIHVu
c2lnbmVkIGRmYU5vZGVJZCA9IHVuaXF1ZU5vZGVJZFNldEltcGwtPm1fZGZhTm9kZUlkOwotICAg
ICAgICBOb2RlSWRTZXQgc2V0RmFsbGJhY2tUcmFuc2l0aW9uOwotICAgICAgICBwb3B1bGF0ZVRy
YW5zaXRpb25zKHRyYW5zaXRpb25zRnJvbUNsb3NlZFNldCwgc2V0RmFsbGJhY2tUcmFuc2l0aW9u
LCAqdW5pcXVlTm9kZUlkU2V0SW1wbCwgbmZhR3JhcGgsIG5mYU5vZGVDbG9zdXJlcyk7CisgICAg
ICAgIHJhbmdlVG9UYXJnZXQuY2xlYXIoKTsKKyAgICAgICAgZm9yIChjb25zdCBORkFOb2RlUmFu
Z2UmIHJhbmdlIDogY29tYmluZWRSYW5nZUxpc3QpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldE5vZGVJZCA9IGdldE9yQ3JlYXRlREZBTm9kZShyYW5nZS5kYXRhLCBuZmEsIGRmYSwgdW5p
cXVlTm9kZUlkU2V0VGFibGUsIHVucHJvY2Vzc2VkTm9kZXMpOworICAgICAgICAgICAgcmFuZ2VU
b1RhcmdldC5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgfQogCi0gICAgICAgIHVuc2ln
bmVkIHRyYW5zaXRpb25zU3RhcnQgPSBkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMuc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQoZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKSA9PSBkZmEudHJh
bnNpdGlvbkRlc3RpbmF0aW9ucy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGtleSA9
IDA7IGtleSA8IHRyYW5zaXRpb25zRnJvbUNsb3NlZFNldC5zaXplKCk7ICsra2V5KSB7Ci0gICAg
ICAgICAgICBOb2RlSWRTZXQmIHRhcmdldE5vZGVTZXQgPSB0cmFuc2l0aW9uc0Zyb21DbG9zZWRT
ZXRba2V5XTsKKyAgICAgICAgYm9vbCB1c2VGYWxsYmFja1RyYW5zaXRpb24gPSBjYW5Vc2VGYWxs
YmFja1RyYW5zaXRpb24oY29tYmluZWRSYW5nZUxpc3QpOworICAgICAgICB1aW50MzJfdCBwcmVm
ZXJlZEZhbGxiYWNrVGFyZ2V0ID0gMDsKKyAgICAgICAgaWYgKHVzZUZhbGxiYWNrVHJhbnNpdGlv
bikKKyAgICAgICAgICAgIHByZWZlcmVkRmFsbGJhY2tUYXJnZXQgPSBmaW5kQmVzdEZhbGxiYWNr
VGFyZ2V0KGNvbWJpbmVkUmFuZ2VMaXN0LCByYW5nZVRvVGFyZ2V0KTsKIAotICAgICAgICAgICAg
aWYgKHRhcmdldE5vZGVTZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc1N0YXJ0ID0gZGZhLnRyYW5zaXRpb25DaGFyYWN0
ZXJzLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgcmFuZ2VUb1RhcmdldEluZGV4ID0gMDsKIAot
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0Tm9kZUlkID0gZ2V0T3JDcmVhdGVERkFOb2RlKHRh
cmdldE5vZGVTZXQsIG5mYUdyYXBoLCBkZmEsIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCB1bnByb2Nl
c3NlZE5vZGVzKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleSA8PSAxMjcpOwotICAg
ICAgICAgICAgZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLmFwcGVuZChzdGF0aWNfY2FzdDx1aW50
OF90PihrZXkpKTsKLSAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uRGVzdGluYXRpb25zLmFwcGVu
ZCh0YXJnZXROb2RlSWQpOworICAgICAgICBmb3IgKGNvbnN0IE5GQU5vZGVSYW5nZSYgcmFuZ2Ug
OiBjb21iaW5lZFJhbmdlTGlzdCkgeworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0Tm9kZUlk
ID0gcmFuZ2VUb1RhcmdldFtyYW5nZVRvVGFyZ2V0SW5kZXhdOwogCi0gICAgICAgICAgICB0YXJn
ZXROb2RlU2V0LmNsZWFyKCk7CisgICAgICAgICAgICBpZiAoISh1c2VGYWxsYmFja1RyYW5zaXRp
b24gJiYgdGFyZ2V0Tm9kZUlkID09IHByZWZlcmVkRmFsbGJhY2tUYXJnZXQpKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmFuZ2UuZmlyc3Q7IGkgPD0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJhbmdlLmxhc3QpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZGZhLnRy
YW5zaXRpb25DaGFyYWN0ZXJzLmFwcGVuZChzdGF0aWNfY2FzdDx1aW50OF90PihpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uRGVzdGluYXRpb25zLmFwcGVuZCh0YXJnZXRO
b2RlSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsr
cmFuZ2VUb1RhcmdldEluZGV4OwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIHRyYW5zaXRp
b25zRW5kID0gZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJU
KGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVycy5zaXplKCkgPT0gZGZhLnRyYW5zaXRpb25EZXN0aW5h
dGlvbnMuc2l6ZSgpKTsKICAgICAgICAgdW5zaWduZWQgdHJhbnNpdGlvbnNMZW5ndGggPSB0cmFu
c2l0aW9uc0VuZCAtIHRyYW5zaXRpb25zU3RhcnQ7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHRy
YW5zaXRpb25zTGVuZ3RoIDw9IDEyNyk7Ci0gICAgICAgIGRmYS5ub2Rlc1tkZmFOb2RlSWRdLnNl
dFRyYW5zaXRpb25zKHRyYW5zaXRpb25zU3RhcnQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRyYW5z
aXRpb25zTGVuZ3RoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNldEZhbGxiYWNrVHJhbnNp
dGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldE5vZGVJZCA9IGdl
dE9yQ3JlYXRlREZBTm9kZShzZXRGYWxsYmFja1RyYW5zaXRpb24sIG5mYUdyYXBoLCBkZmEsIHVu
aXF1ZU5vZGVJZFNldFRhYmxlLCB1bnByb2Nlc3NlZE5vZGVzKTsKLSAgICAgICAgICAgIERGQU5v
ZGUmIGRmYVNvdXJjZU5vZGUgPSBkZmEubm9kZXNbZGZhTm9kZUlkXTsKLSAgICAgICAgICAgIGRm
YVNvdXJjZU5vZGUuYWRkRmFsbGJhY2tUcmFuc2l0aW9uKGRmYSwgdGFyZ2V0Tm9kZUlkKTsKLSAg
ICAgICAgfQotICAgIH0gd2hpbGUgKCF1bnByb2Nlc3NlZE5vZGVzLmlzRW1wdHkoKSk7CisgICAg
ICAgIHVuc2lnbmVkIGRmYU5vZGVJZCA9IHVuaXF1ZU5vZGVJZFNldEltcGwtPm1fZGZhTm9kZUlk
OworICAgICAgICBERkFOb2RlJiBkZmFTb3VyY2VOb2RlID0gZGZhLm5vZGVzW2RmYU5vZGVJZF07
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodHJhbnNpdGlvbnNMZW5ndGggPCAxMjcsICJU
cmFuc2l0aW9ucyBjb3ZlcmluZyB0aGUgZW50aXJlIGFscGhhYmV0IHNob3VsZCB1c2UgYSBmYWxs
YmFjayB0cmFuc2l0aW9uIik7CisgICAgICAgIGRmYVNvdXJjZU5vZGUuc2V0VHJhbnNpdGlvbnMo
dHJhbnNpdGlvbnNTdGFydCwgc3RhdGljX2Nhc3Q8dWludDhfdD4odHJhbnNpdGlvbnNMZW5ndGgp
KTsKIAorICAgICAgICBpZiAodXNlRmFsbGJhY2tUcmFuc2l0aW9uKQorICAgICAgICAgICAgZGZh
U291cmNlTm9kZS5hZGRGYWxsYmFja1RyYW5zaXRpb24oZGZhLCBwcmVmZXJlZEZhbGxiYWNrVGFy
Z2V0KTsKKyAgICB9IHdoaWxlICghdW5wcm9jZXNzZWROb2Rlcy5pc0VtcHR5KCkpOwogICAgIHJl
dHVybiBkZmE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQVRvREZBLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RG
QS5oCmluZGV4IGQxY2IxMTlhOWM3MWIxNWFlZTk1YjVkNTdhODIyYmY2NzdlMGNmNzEuLjg4ODJm
NDJjNjY4MjAwYjM4NmEzZTcwZDlkMWM4MGI2MDc2MmRlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLWNsYXNzIE5GQTsK
K3N0cnVjdCBORkE7CiAKIC8vIE5GQVRvREZBIHByb3ZpZGVzIGEgd2F5IHRvIGJ1aWxkIGEgREZB
IGNvcnJlc3BvbmRpbmcgdG8gYSBORkEuCiBjbGFzcyBORkFUb0RGQSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKaW5kZXggOGQyMjQ2YTk4NGU4OTU2N2U2NjRkM2ZmODFj
M2EzYWQ1YjQ0ZjM2MS4uMWYxZDAxNWM4MWMzYmEzODg4OGY0NDhmYzFlZTlmNGJkODNhNDFjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaApAQCAtODYsNyArODYsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHF1YW50aWZ5KGNvbnN0IEF0b21RdWFudGlmaWVyJik7CiAK
LSAgICB1bnNpZ25lZCBnZW5lcmF0ZUdyYXBoKE5GQSYsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBB
Y3Rpb25MaXN0JiBmaW5hbEFjdGlvbnMpIGNvbnN0OworICAgIEltbXV0YWJsZUNoYXJORkFOb2Rl
QnVpbGRlciBnZW5lcmF0ZUdyYXBoKE5GQSYsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYg
c3RhcnQsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0aW9ucykgY29uc3Q7CiAKICAgICBib29s
IGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkgY29uc3Q7CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGZhbHNlIGZvciBhIGdyb3VwIGVx
dWl2YWxlbnQgdG8gYSB1bml2ZXJzYWwgdHJhbnNpdGlvbi4KICAgICBib29sIGlzVW5pdmVyc2Fs
VHJhbnNpdGlvbigpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgZ2VuZXJhdGVTdWJncmFwaEZvckF0
b20oTkZBJiwgdW5zaWduZWQgc291cmNlKSBjb25zdDsKKyAgICBJbW11dGFibGVDaGFyTkZBTm9k
ZUJ1aWxkZXIgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0OwogCiAgICAgdm9pZCBkZXN0cm95KCk7CiAKQEAgLTI4
Niw3ICsyODYsNyBAQCBpbmxpbmUgVGVybTo6VGVybShVbml2ZXJzYWxUcmFuc2l0aW9uVGFnKQog
ICAgIDogbV90ZXJtVHlwZShUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KQogewogICAgIG5ldyAoTm90
TnVsbCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJTZXQoKTsKLSAgICBmb3Ig
KFVDaGFyIGkgPSAwOyBpIDwgMTI4OyArK2kpCisgICAgZm9yIChVQ2hhciBpID0gMTsgaSA8IDEy
ODsgKytpKQogICAgICAgICBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5zZXQoaSk7CiB9CiAKQEAg
LTM5NSwxMSArMzk1LDExIEBAIGlubGluZSB2b2lkIFRlcm06OnF1YW50aWZ5KGNvbnN0IEF0b21R
dWFudGlmaWVyJiBxdWFudGlmaWVyKQogICAgIG1fcXVhbnRpZmllciA9IHF1YW50aWZpZXI7CiB9
CiAKLWlubGluZSB1bnNpZ25lZCBUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCB1
bnNpZ25lZCBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdAoraW5s
aW5lIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBUZXJtOjpnZW5lcmF0ZUdyYXBoKE5GQSYg
bmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHN0YXJ0LCBjb25zdCBBY3Rpb25MaXN0
JiBmaW5hbEFjdGlvbnMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAKLSAgICB1
bnNpZ25lZCBuZXdFbmQ7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld0VuZDsK
IAogICAgIHN3aXRjaCAobV9xdWFudGlmaWVyKSB7CiAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6
T25lOiB7CkBAIC00MDgsMzYgKzQwOCwzNiBAQCBpbmxpbmUgdW5zaWduZWQgVGVybTo6VGVybTo6
Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvbgogICAg
IH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JPbmU6IHsKICAgICAgICAgbmV3RW5k
ID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBzdGFydCk7Ci0gICAgICAgIG5mYS5hZGRF
cHNpbG9uVHJhbnNpdGlvbihzdGFydCwgbmV3RW5kKTsKKyAgICAgICAgc3RhcnQuYWRkRXBzaWxv
blRyYW5zaXRpb24obmV3RW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXRv
bVF1YW50aWZpZXI6Olplcm9Pck1vcmU6IHsKLSAgICAgICAgdW5zaWduZWQgcmVwZWF0U3RhcnQg
PSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3Rh
cnQsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJl
cGVhdFN0YXJ0KG5mYSk7CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVh
dFN0YXJ0KTsKIAotICAgICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBo
Rm9yQXRvbShuZmEsIHJlcGVhdFN0YXJ0KTsKLSAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0
aW9uKHJlcGVhdEVuZCwgcmVwZWF0U3RhcnQpOworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9k
ZUJ1aWxkZXIgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRT
dGFydCk7CisgICAgICAgIHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFy
dCk7CiAKLSAgICAgICAgdW5zaWduZWQga2xlZW5FbmQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAg
ICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBrbGVlbkVuZCk7Ci0gICAg
ICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihzdGFydCwga2xlZW5FbmQpOwotICAgICAgICBu
ZXdFbmQgPSBrbGVlbkVuZDsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGts
ZWVuRW5kKG5mYSk7CisgICAgICAgIHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihrbGVl
bkVuZCk7CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKGtsZWVuRW5kKTsKKyAg
ICAgICAgbmV3RW5kID0gV1RGOjptb3ZlKGtsZWVuRW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZU9yTW9yZTogewotICAgICAgICB1bnNpZ25l
ZCByZXBlYXRTdGFydCA9IG5mYS5jcmVhdGVOb2RlKCk7Ci0gICAgICAgIG5mYS5hZGRFcHNpbG9u
VHJhbnNpdGlvbihzdGFydCwgcmVwZWF0U3RhcnQpOworICAgICAgICBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXIgcmVwZWF0U3RhcnQobmZhKTsKKyAgICAgICAgc3RhcnQuYWRkRXBzaWxvblRy
YW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAgICAgIHVuc2lnbmVkIHJlcGVhdEVuZCA9IGdl
bmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgcmVwZWF0U3RhcnQpOwotICAgICAgICBuZmEuYWRk
RXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCByZXBlYXRTdGFydCk7CisgICAgICAgIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRv
bShuZmEsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0
aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAgICAgICB1bnNpZ25lZCBhZnRlclJlcGVhdCA9IG5mYS5j
cmVhdGVOb2RlKCk7Ci0gICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQs
IGFmdGVyUmVwZWF0KTsKLSAgICAgICAgbmV3RW5kID0gYWZ0ZXJSZXBlYXQ7CisgICAgICAgIElt
bXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBhZnRlclJlcGVhdChuZmEpOworICAgICAgICByZXBl
YXRFbmQuYWRkRXBzaWxvblRyYW5zaXRpb24oYWZ0ZXJSZXBlYXQpOworICAgICAgICBuZXdFbmQg
PSBXVEY6Om1vdmUoYWZ0ZXJSZXBlYXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQot
ICAgIG5mYS5zZXRBY3Rpb25zKG5ld0VuZCwgZmluYWxBY3Rpb25zKTsKKyAgICBuZXdFbmQuc2V0
QWN0aW9ucyhmaW5hbEFjdGlvbnMuYmVnaW4oKSwgZmluYWxBY3Rpb25zLmVuZCgpKTsKICAgICBy
ZXR1cm4gbmV3RW5kOwogfQogCkBAIC02MTIsMzYgKzYxMiw1OSBAQCBpbmxpbmUgYm9vbCBUZXJt
Ojppc1VuaXZlcnNhbFRyYW5zaXRpb24oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
aW5saW5lIHVuc2lnbmVkIFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZhLCB1
bnNpZ25lZCBzb3VyY2UpIGNvbnN0CitpbmxpbmUgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVy
IFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXImIHNvdXJjZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsK
ICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKICAgICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICByZXR1cm4gSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyKCk7CiAgICAgY2FzZSBUZXJtVHlw
ZTo6Q2hhcmFjdGVyU2V0OiB7Ci0gICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG5mYS5jcmVhdGVO
b2RlKCk7Ci0gICAgICAgIGlmIChpc1VuaXZlcnNhbFRyYW5zaXRpb24oKSkKLSAgICAgICAgICAg
IG5mYS5hZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKHNvdXJjZSwgdGFyZ2V0KTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVy
dGVkKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKFVDaGFyIGkgPSAwOyBpIDwgMTI4OyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5mYS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFy
Z2V0LCBzdGF0aWNfY2FzdDxjaGFyPihpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKFVDaGFyIGkgPSAxOyBpIDwgMTI4OyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5n
ZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbihzb3VyY2Us
IHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oaSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgaWYg
KCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCgpKSB7CisgICAgICAgICAgICBVQ2hh
ciBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgd2hp
bGUgKGkgPCAxMjggJiYgIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKKyAgICAgICAg
ICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIGlmIChpID09IDEyOCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBVQ2hhciBzdGFydCA9IGk7Cisg
ICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMTI4ICYmIG1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKKyAgICAgICAgICAgICAgICAgICAgKytpOwor
ICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0YXJ0LCBpIC0gMSwgbmV3Tm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBVQ2hhciBp
ID0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgd2hpbGUg
KGkgPCAxMjggJiYgbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuZ2V0KGkpKQorICAgICAgICAgICAg
ICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gMTI4KQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIFVDaGFyIHN0YXJ0ID0gaTsKKyAgICAg
ICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCAxMjggJiYgIW1fYXRv
bURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKKyAgICAgICAgICAgICAgICAgICAgKytpOworICAg
ICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0YXJ0LCBpIC0gMSwgbmV3Tm9kZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAg
ICAgcmV0dXJuIG5ld05vZGU7CiAgICAgfQogICAgIGNhc2UgVGVybVR5cGU6Okdyb3VwOiB7Ci0g
ICAgICAgIHVuc2lnbmVkIGxhc3RUYXJnZXQgPSBzb3VyY2U7Ci0gICAgICAgIGZvciAoY29uc3Qg
VGVybSYgdGVybSA6IG1fYXRvbURhdGEuZ3JvdXAudGVybXMpCi0gICAgICAgICAgICBsYXN0VGFy
Z2V0ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgQWN0aW9uTGlzdCgpKTsK
KyAgICAgICAgaWYgKG1fYXRvbURhdGEuZ3JvdXAudGVybXMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZShuZmEpOworICAgICAgICAg
ICAgc291cmNlLmFkZEVwc2lsb25UcmFuc2l0aW9uKG5ld05vZGUpOworICAgICAgICAgICAgcmV0
dXJuIG5ld05vZGU7CisgICAgICAgIH0KKworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1
aWxkZXIgbGFzdFRhcmdldCA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXMuZmlyc3QoKS5nZW5lcmF0
ZUdyYXBoKG5mYSwgc291cmNlLCBBY3Rpb25MaXN0KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUgPSBtX2F0b21EYXRhLmdy
b3VwLnRlcm1zW2ldLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0VGFyZ2V0LCBBY3Rpb25MaXN0KCkp
OworICAgICAgICAgICAgbGFzdFRhcmdldCA9IFdURjo6bW92ZShuZXdOb2RlKTsKKyAgICAgICAg
fQorCiAgICAgICAgIHJldHVybiBsYXN0VGFyZ2V0OwogICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255737</attachid>
            <date>2015-06-28 23:17:39 -0700</date>
            <delta_ts>2015-06-29 10:36:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146338-20150628231648.patch</filename>
            <type>text/plain</type>
            <size>140859</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjIwZTRmYjM4MGNhNjZk
MDZiNzU1ZjU0OTgxODNhODc0ZmRiNjczNS4uNTU2ODA0NTc5ZjkxYTk3MDlhZGNhYTlkMTQ3ZjRl
MjNjZjBkYWUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAxNS0wNi0yOCAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUg
TkZBIHRyYW5zaXRpb25zIHJhbmdlLWJhc2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYzMzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgdGhlIE5GQSB0byB1c2UgcmFuZ2UgYmFzZWQgdHJh
bnNpdGlvbiBmb3IgYW55IGtpbmQgb2YgdHJhbnNpdGlvbi4KKyAgICAgICAgVGhlIGZhbGxiYWNr
IHRyYW5zaXRpb24gaXMgYWxzbyBhYnNvcmJlZCBhcyByYW5nZXMuCisKKyAgICAgICAgUHJldmlv
dXNseSwgdGhlIE5GQSB3b3VsZCBvbmx5IGhhdmUgc2luZ2xlIHRyYW5zaXRpb25zIGFuZCBhIGZh
bGxiYWNrCisgICAgICAgIHRyYW5zaXRpb24gZm9yIGFsbCBjYXNlcyBub3QgY292ZXJlZCBieSBz
aW5nbGUgdHJhbnNpdGlvbnMuCisKKyAgICAgICAgVGhlIHByb2JsZW0gd2l0aCB0aGF0IGRlc2ln
biB3YXMgdGhhdCBjaGFyYWN0ZXIgcmFuZ2VzIChlLmcuIFthLXpdKSB3ZXJlCisgICAgICAgIGV4
dGVuZGVkIGFzIGluZGl2aWR1YWwgdHJhbnNpdGlvbnMuIFNvbWV0aGluZyBsaWtlIFteYV0gd291
bGQgY292ZXIKKyAgICAgICAgbW9zdCBvZiB0aGUgYWxwaGFiZXQgd2l0aCB0cmFuc2l0aW9ucy4K
KyAgICAgICAgV2hlbiBjb252ZXJ0aW5nIHRoZSBORkEgdG8gREZBLCB0aGUgdGltZSBpcyBwcm9w
b3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBzdGF0ZXMKKyAgICAgICAgbXVsdGlwbGllZCBieSB0
aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zLiBXaXRoIG1hbnkgaW5kaXZpZHVhbCB0cmFuc2l0aW9u
cywKKyAgICAgICAgdGhlIHJ1biB0aW1lIHdhcyBhbiBvcmRlciBvZiBtYWduaXR1ZGUgaGlnaGVy
IHRoYW4gd2hhdCB3ZSB3YW50LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgTkZB
IHRvIG9ubHkgaGFuZGxlIHJhbmdlcyBvZiBjaGFyYWN0ZXJzLiBBIHNpbmdsZSB0cmFuc2l0aW9u
CisgICAgICAgIGJlY29tZXMgYSByYW5nZSB3aXRoIHRoZSBjaGFyYWN0ZXIgYXMgZmlyc3QgYW5k
IGxhc3QgY2hhcmFjdGVyIGluIHRoZSByYW5nZQorICAgICAgICAoJ2EnIGJlY29tZXMgJ2EnIHRv
ICdhJykuCisgICAgICAgIFJhbmdlcyBvZiBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGRpcmVjbHR5
IChlLmcuIFthLXpdIGJlY29tZXMgYSBzaW5nbGUgJ2EnIHRvICd6JyB0cmFuc2l0aW9uKS4KKwor
ICAgICAgICBJbiB0aGUgY29udGV4dCBvZiB0aGUgc3RhdGUgbWFjaGluZXMsIHJhbmdlcyBoYXZl
IGlkZW50aWZpZXMgKHRoZSB0YXJnZXQgb2YgdGhlIHRyYW5zaXRpb25zKS4KKyAgICAgICAgV2hl
biB0d28gcmFuZ2VzIGNvbGxpZGUsIHRoZXkgaGF2ZSB0byBiZSBzcGxpdCBzdWNoIHRoYXQgZWFj
aCBwYXJ0IHJldGFpbiBpdHMgdGFyZ2V0CisgICAgICAgIGV4Y2VwdCB0aGUgaW50ZXJzZWN0aW9u
IHRoYXQgZ2V0cyB0aGUgdW5pb24gb2YgdGhlIHRhcmdldHMuCisKKyAgICAgICAgSGFuZGxpbmcg
dGhlIHVuaW9uIG9mIHJhbmdlcyBlZmZpY2llbnRseSBpcyBjcml0aWNhbCBiZWNhdXNlIHdlIGhh
dmUgdG8gZG8KKyAgICAgICAgaXQgZm9yIGV2ZXJ5IE5GQSBub2RlIGluIGFueSBzdWJzZXQgd2hl
biBidWlsZGluZyB0aGUgREZBLiBUaGUgaGVscGVyCisgICAgICAgIGNsYXNzIHRoYXQgZG9lcyB0
aGF0IGlzIE11dGFibGVSYW5nZS4KKworICAgICAgICBUaGUgdW5pb24gb2YgcmFuZ2VzIGlzIGRv
bmUgZWZmaWNpZW50bHkgYmVjYXVzZSBvZiBwcmVjb25kaXRpb25zIG9uIG91ciBsaXN0IG9mIHJh
bmdlczoKKyAgICAgICAgLVRoZSByYW5nZXMgbXVzdCBiZSBzb3J0ZWQuCisgICAgICAgIC1ObyBy
YW5nZSBpbiBhIGxpc3QgY2FuIGludGVyc2VjdCBhbnkgb3RoZXIgcmFuZ2UgaW4gdGhlIHNhbWUg
bGlzdC4KKworICAgICAgICBUbyBtZXJnZSB0d28gcmFuZ2VzLCB3ZSBjYW4gZ28gb3ZlciB0aGVt
IGluIG9yZGVyIGFuZCBzcGxpdCB0aGVtIHBhcnQgYnkgcGFydC4KKyAgICAgICAgSXQgaXMgZWFz
eSB0byBmaW5kIHdoYXQgZ29lcyB3aGVyZSBiZWNhdXNlIHRoZXkgYXJlIGJvdGggc29ydGVkIGFu
ZCB3ZSBjYW4KKyAgICAgICAgY29tcGFyZSB0aGUgY2hhcmFjdGVycyBvZiBlYWNoIHRvIGtub3cg
aG93IHRvIG1vdmUgZm9yd2FyZC4KKyAgICAgICAgVGhlIHRpbWUgdG8gbWVyZ2UgMiByYW5nZSBs
aXN0IGlzIHByb3BvcnRpb25hbCB0byBPKG4rbSkgd2hlcmUgJ24nIGFuZCAnbScgYXJlCisgICAg
ICAgIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGluIGVhY2ggbGlzdC4KKworICAgICAgICBTaW5jZSB0
YWtpbmcgdGhlIHVuaW9uIG9mIHR3byBsaXN0cyB1c3VhbGx5IGNyZWF0ZSBuZXcgcmFuZ2VzLCB3
ZSBoYXZlIHRvIGFsbG9jYXRlCisgICAgICAgIHRob3NlIHNvbWV3aGVyZSBlZmZpY2llbnRseS4g
VG8gZG8gdGhhdCwgTXV0YWJsZVJhbmdlIHN1cHBvcnQgYW4gaW5saW5lIGNhcGFjaXR5LAorICAg
ICAgICB3aGljaCBpcyB1c2VkIGZvciB0aGUgTkZBVG9ERkEgQ29udmVydGlvbi4KKworICAgICAg
ICAtLS0KKworICAgICAgICBXaXRoIHJhbmdlcywgdGhlIE5GQS10by1ERkEgY29udmVyc2lvbiBj
aGFuZ2VzIHZlcnkgbGl0dGxlOgorICAgICAgICAtRWFjaCBORkEgbm9kZXMgY29udGFpbnMgYSBs
aXN0IG9mIHJhbmdlcyBhbmQgZWFjaCByYW5nZSBoYXMgYSBsaXN0IG9mIHRhcmdldHMuCisgICAg
ICAgIC1UaGUgc3Vic2V0IGNvbnN0cnVjdGlvbiBzZWxlY3QgYW55IG51bWJlciBvZiBORkEgbm9k
ZXMgY29ycmVzcG9uZGluZyB0bworICAgICAgICAgYSBzaW5nbGUgZGV0ZXJtaW5pc3RpYyBzdGF0
ZS4KKyAgICAgICAgLUZvciB0aGUgc3Vic2V0LCB3ZSBjYW4gdXNlIE11dGFibGVSYW5nZSB0byBt
ZXJnZSB0aGUgcmFuZ2VzIG9mIGV2ZXJ5CisgICAgICAgICBORkEgbm9kZSBpbiB0aGUgc2V0LiBU
aGUgcmVzdWx0aW5nIGxpc3QgaGFzIHJhbmdlaXMgd2l0aCB0YXJnZXRzIGNvcnJlc3BvbmRpbmcK
KyAgICAgICAgIHRvIHRoZSB1bmlvbiBvZiBhbGwgdGhlIHRyYW5zaXRpb25zLgorICAgICAgICAt
V2UgZ28gb3ZlciBhbGwgdGhlIHJhbmdlcyB0aGUgc2FtZSB3YXkgd2UgdXNlZCB0byBnbyBvdmVy
IHRoZSB0cmFuc2l0aW9ucy4KKyAgICAgICAgIFNpbmNlIHRoZSBERkEgZG9lcyBub3Qgc3VwcG9y
dCByYW5nZXMsIHRoZSByYW5nZXMgYXJlIHNwcmVhZCBhcyBpbmRpdmlkdWFsCisgICAgICAgICB0
cmFuc2l0aW9ucyArIGZhbGxiYWNrIHRyYW5zaXRpb24uCisKKyAgICAgICAgLS0tCisKKyAgICAg
ICAgV2l0aCB0aGUgZWZmaWNpZW50IG1lcmdpbmcgc29sdmVkLCB3ZSBzdGlsbCBuZWVkIHRoZSBh
Y3R1YWwgTkZBIHRvIHVzZSByYW5nZXMKKyAgICAgICAgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHRy
YW5zaXRpb25zLgorCisgICAgICAgIEkgY291bGQgaGF2ZSB1c2VkIE11dGFibGVSYW5nZSBmb3Ig
dGhhdCBidXQgaXQgaXMgbm90IHRoZSBtb3N0IGNvbXBhY3QKKyAgICAgICAgd2F5IHRvIHJlcHJl
c2VudCByYW5nZXMgdGhhdCBkbyBub3QgbmVlZCBtZXJnaW5nLgorCisgICAgICAgIEluc3RlYWQs
IHRoZSBORkEgdXNlcyBhIGN1c3RvbSBzdHJ1Y3R1cmU6IEltbXV0YWJsZU5GQS4gSXQgaXMgYmFz
aWNhbGx5CisgICAgICAgIHRoZSBzYW1lIHRoaW5nLCBidXQgaW4gdGhhdCBvbmUgeW91IGNhbm5v
dCBjaGFuZ2UgYSBsaXN0IG9mIHJhbmdlCisgICAgICAgIGFmdGVyIGNyZWF0aW5nIGl0LgorCisg
ICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNvcnRlZCByYW5nZXMgaW4gSW1tdXRhYmxlTkZBIGFy
ZSBhbHNvIHN1YnNlcXVlbnQKKyAgICAgICAgaW4gbWVtb3J5LCB3aGljaCBpcyByZWFsbHkgbmlj
ZSB0byBnbyBvdmVyIHRoZW0gZWZmaWNpZW50bHkKKyAgICAgICAgd2hlbiBtZXJnaW5nIHJhbmdl
cyBpbiB0aGUgTkZBLXRvLURGQSBjb252ZXJzaW9uLiA6KQorCisgICAgICAgIFdoZW4gYnVpbGRp
bmcgdGhlIE5GQSwgd2UgZG9uJ3Qga25vdyBhbGwgdGhlIHRyYW5zaXRpb25zIHdoZW4gY3JlYXRp
bmcKKyAgICAgICAgZWFjaCBub2RlLCBCVVQgd2Uga25vdyB0aGF0IHdlIGhhdmUgdmVyeSBmZXcg
bm9kZSAidW5maW5pc2hlZCIgYXQgYW55CisgICAgICAgIHRpbWUuIFNpbmNlIHdlIGJ1aWxkIGJ5
IGdvaW5nIGRlcHRoLWZpcnN0IGluIHRoZSBwcmVmaXgtdHJlZSwgd2Ugb25seQorICAgICAgICBo
YXZlIHRoZSBtYXgtZGVwdGggb2YgbGl2ZSBub2RlcyBpbiB0aGUgd29yc3QgY2FzZS4KKworICAg
ICAgICBUbyBoZWxwIGJ1aWxkaW5nIHRoZSBORkEgb3V0IG9mIHRoZSBwcmVmaXggdHJlZSwgd2Ug
aGF2ZQorICAgICAgICBJbW11dGFibGVORkFOb2RlQnVpbGRlci4gSXQga2VlcHMgYWxsIHRoZSBp
bmZvcm1hdGlvbnMgYWJvdXQgYSBORkEgbm9kZSwKKyAgICAgICAgYnV0IGluIGEgbm9uLWNvbXBh
Y3QsIG11dGFibGUgZm9ybS4gV2hlbiBhIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyCisgICAgICAg
IGlzIGRlc3Ryb3llZCwgaXQgc2VyaWFsaXplIHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbW11
dGFibGUgTkZBLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0cmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5lZFVSTEZpbHRl
cnM6OnByb2Nlc3NORkFzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkE6OmVtcHR5KToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9JbW11dGFibGVORkEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRhcmdldEl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RUYXJn
ZXRJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRhcmdldEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0VGFy
Z2V0SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RUYXJnZXRJdGVyYXRvcjo6b3BlcmF0b3IrKyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpJdGVyYWJs
ZUNvbnN0VGFyZ2V0czo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkltbXV0YWJsZU5GQTo6SXRlcmFibGVDb25zdFRhcmdldHM6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1t
dXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RSYW5nZUl0ZXJhdG9y
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11
dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6
Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0
YWJsZU5GQTo6Q29uc3RSYW5nZUl0ZXJhdG9yOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6Okl0ZXJhYmxlQ29uc3RSYW5nZTo6YmVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6SXRl
cmFibGVDb25zdFJhbmdlOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkltbXV0YWJsZU5GQTo6SXRlcmFibGVDb25zdFJhbmdlOjpkZWJ1Z1ByaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OnRyYW5zaXRpb25z
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxl
TkZBOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFi
bGVORkE6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJ
bW11dGFibGVORkE6Om1lbW9yeVVzZWQpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0lt
bXV0YWJsZU5GQU5vZGVCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjpJbW11dGFibGVORkFOb2RlQnVp
bGRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZB
Tm9kZUJ1aWxkZXI6On5JbW11dGFibGVORkFOb2RlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmFkZFRyYW5zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyOjphZGRFcHNpbG9uVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OnNldEFjdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVy
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0
YWJsZU5GQU5vZGVCdWlsZGVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OnNpbmtBY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6
c2lua1RyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJ
bW11dGFibGVORkFOb2RlQnVpbGRlcjo6c2lua0Vwc2lsb25UcmFuc2l0aW9ucyk6CisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdlLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZTo6TXV0YWJsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2U6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlOjpz
aXplKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2VMaXN0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZUxp
c3Q6OkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3ItPik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6
Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6Q29u
c3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZUxpc3Q6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6YXBwZW5kUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZUxpc3Q6OmV4dGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJh
bmdlTGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11
dGFibGVSYW5nZUxpc3Q6OmRlYnVnUHJpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6Ok11dGFibGVSYW5nZUxpc3Q6Omluc2VydEJldHdlZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZUxpc3Q6OmluaXRpYWxpemVGcm9t
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6ZGVidWdQcmludERvdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpORkEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6Y3JlYXRlTm9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjptZW1vcnlVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OmFkZFRyYW5zaXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6
YWRkRXBzaWxvblRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Ok5GQTo6YWRkVHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpzZXRBY3Rpb25zKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OmdyYXBo
U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZB
OjpyZXN0b3JlVG9HcmFwaFNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OnByaW50UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OnByaW50VHJhbnNpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6Ok5GQTo6cm9vdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6TkZBOjphZGRSdWxlSWQpOiBEZWxldGVkLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL05GQU5vZGUuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6ZXBzaWxvbkNsb3N1cmVFeGNs
dWRpbmdTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpyZXNvbHZl
RXBzaWxvbkNsb3N1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpO
b2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZTo6Tm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRT
ZXRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5vZGVJZFNl
dFRvVW5pcXVlTm9kZUlkU2V0VHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpEYXRhQ29udmVydGVyV2l0aEVwc2lsb25DbG9zdXJlOjpj
b252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpEYXRhQ29udmVy
dGVyV2l0aEVwc2lsb25DbG9zdXJlOjpleHRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OmNyZWF0ZUNvbWJpbmVkVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Y2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpmaW5kQmVzdEZhbGxiYWNrVGFyZ2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZXRPckNyZWF0ZURGQU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQVRvREZBOjpjb252ZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpwb3B1bGF0ZVRyYW5zaXRpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5oOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1Rlcm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpUZXJtOjpUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpUZXJtOjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6VGVybTo6Z2VuZXJhdGVHcmFwaCk6IERlbGV0
ZWQuCisKIDIwMTUtMDYtMjcgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdh
bGlhLmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4K
IAogICAgICAgICBbU3RyZWFtcyBBUEldIEltcGxlbWVudCBSZWFkYWJsZVN0cmVhbUNvbnRyb2xs
ZXIuZGVzaXJlZFNpemUgcHJvcGVydHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZThhMjUxYzAxNjQ0ZDk5OTllM2VmNmU1NTI5
MWMzZjZiMzhhZmQzLi41OGJiMmYyMTk2OTQ3NDhkYzY3ZDIzZmMxNmZhYTQwNGE3MDRlZDQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDQwLDYgKzEwNDAsMTAgQEAKIAkJMjZGMEM4OUYxQTJFQzNCRTAwMjc5NEY4IC8qIENv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5RDFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLmNwcCAqLzsgfTsKIAkJMjZGMEM4QTAxQTJFQzNCRTAwMjc5NEY4IC8qIENv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjZGMEM4OUUxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNp
b25zQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTI2RjQwRDRBMTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY0MEQ0OTE0OTA0QTYz
MDBDQTY3QzQgLyogRXZlbnRMb29wSU9TLm1tICovOyB9OworCQkyNkY3NTZCMDFCM0I2NUFDMDAw
NURENzkgLyogTXV0YWJsZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNkY3NTZBRTFCM0I2NUFDMDAwNURENzkgLyogTXV0YWJsZVJhbmdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjZGNzU2
QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Rjc1NkFGMUIzQjY1QUMwMDA1REQ3OSAv
KiBNdXRhYmxlUmFuZ2VMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGNzU2QjIx
QjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJ
bW11dGFibGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjZGNzU2QjQxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMjZGOUE4MzgxOEEwNDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY5QTgz
NjE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKIAkJ
MjZGOUE4MzkxOEEwNDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGOUE4MzcxOEEwNDZB
QzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2RkFFNENDMTg1MkUzQTUwMDRDOEM0NiAv
KiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RkFFNEM4MTg1MkUzQTUwMDRDOEM0
NiAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLzsgfTsKQEAg
LTgxODIsNiArODE4NiwxMCBAQAogCQkyNkYwQzg5RDFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI2RjBDODlFMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjQwRDQ5MTQ5MDRBNjMw
MENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBFdmVudExvb3BJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTI2Rjc1NkFFMUIzQjY1QUMwMDA1REQ3OSAvKiBNdXRhYmxlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YWJsZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI2Rjc1NkFGMUIzQjY1QUMwMDA1REQ3OSAvKiBNdXRhYmxlUmFuZ2VMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGFibGVSYW5nZUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZGNzU2QjIxQjNCNjZGNzAwMDVERDc5IC8qIElt
bXV0YWJsZU5GQS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbW11dGFibGVO
RkEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZGNzU2QjQxQjNCNjhGMjAwMDVE
RDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI2RjlBODM2MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRDb25m
aWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGOUE4MzcxOEEw
NDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjZGQUU0QzgxODUyRTNBNTAwNEM4QzQ2IC8qIFJlc291cmNlSGFuZGxl
Q0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY5MCw2ICsxNTY5OCwxMCBAQAogCQkJCTI2QTUx
N0ZCMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuY3BwICovLAogCQkJCTI2QTUxN0ZD
MUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuaCAqLywKIAkJCQkyNjc3MjVGOTFBNUIz
QUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAorCQkJCTI2Rjc1NkIyMUIzQjY2RjcwMDA1REQ3
OSAvKiBJbW11dGFibGVORkEuaCAqLywKKwkJCQkyNkY3NTZCNDFCM0I2OEYyMDAwNURENzkgLyog
SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaCAqLywKKwkJCQkyNkY3NTZBRTFCM0I2NUFDMDAwNURE
NzkgLyogTXV0YWJsZVJhbmdlLmggKi8sCisJCQkJMjZGNzU2QUYxQjNCNjVBQzAwMDVERDc5IC8q
IE11dGFibGVSYW5nZUxpc3QuaCAqLywKIAkJCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyog
TkZBLmNwcCAqLywKIAkJCQkyNjkzOTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8sCiAJ
CQkJMjY5Mzk3MjAxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCAqLywKQEAgLTI0MjQzLDYg
KzI0MjU1LDcgQEAKIAkJCQk2MkNEMzI1QTExNTdFNTdDMDA2M0IwQTcgLyogQ3VzdG9tRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0I0MTNFMEU4NjMzRkQwMDMyQzRGMCAvKiBEYXNoQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDBCMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNo
Ym9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2Rjc1NkIwMUIzQjY1QUMwMDA1REQ3
OSAvKiBNdXRhYmxlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTIxMTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjQxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUx
NkNGRDQxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDQwNCw2ICsyNDQxNyw3IEBACiAJCQkJODU5MDlDRTQwQUNDN0E3RTAwREYwMUYxIC8q
IERPTUNTU1Vua25vd25SdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OEMzODFD
MEFBOEUyOTYwMEIxODdBNCAvKiBET01DU1NWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVC
NDk4RjMwQURCMzM2QTAwOTI1Q0JCIC8qIERPTUNTU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg1OEMzODNDMEFBOEVEODIwMEIxODdBNCAvKiBET01DU1NWYWx1ZUxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OTA5RDJCMEFDQzdENTUwMERGMDFGMSAvKiBET01D
U1NWYWx1ZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjlDQ0MwQjc0N0E0
NDAwM0VEODkwIC8qIERPTUN1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNjIzOCw2ICsyNjI1Miw3IEBACiAJCQkJQkNFQTQ4NkUwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDMwMjc1NEEx
MkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRldGFpbHNNYXJrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NkU1RjdGMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkyNkY3NTZCNTFCM0I2OEYyMDAwNURENzkgLyogSW1tdXRhYmxl
TkZBTm9kZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlCMzJDREE5MTNERjdGQTkwMEYz
NEQxMyAvKiBSZW5kZXJlZFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDNBMDIzQjE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2ODYyLDYgKzI2ODc3LDcgQEAKIAkJCQlCMjIyN0E4MTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzZDOUU2MTFERjZB
MEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA4NEEwODI5MTI4RDc4NjcwMDJEQjFGMSAvKiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZGNzU2QjExQjNCNjVBQzAwMDVERDc5IC8qIE11dGFi
bGVSYW5nZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QjZCOTc4MTIwRjEzRTUwMEI4RUZB
RiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMUQ0MzUx
NzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdNb3ZldG9BYnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzQzFENDM2MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTW92ZXRvUmVsLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbWJpbmVkVVJMRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCmluZGV4IGMxM2Q3NzViNDhmMzRjZGQwN2NkMmQ0YTY5
ZTgxZTM0OWYxOTQxOTEuLmI2ZTRiMGFhMDE0OGY0M2ZhZGY3ODRhMWIxM2VjNzJjMzQwMzZmMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJM
RmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmlu
ZWRVUkxGaWx0ZXJzLmNwcApAQCAtMTkzLDI1ICsxOTMsMjUgQEAgdm9pZCBDb21iaW5lZFVSTEZp
bHRlcnM6OmFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQsIGNvbnN0IFZlY3RvcjxUZXJtPiYg
cGF0dGUKICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uSWQpOwogfQogCi1zdGF0aWMgdm9p
ZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIHVuc2lnbmVkIG5mYVJvb3RJZCwgUHJl
Zml4VHJlZVZlcnRleCYgcm9vdCwgc2l6ZV90IG1heE5GQVNpemUpCitzdGF0aWMgdm9pZCBnZW5l
cmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYm
IHN1YnRyZWVSb290LCBQcmVmaXhUcmVlVmVydGV4JiByb290LCBzaXplX3QgbWF4TkZBU2l6ZSkK
IHsKICAgICAvLyBUaGlzIHJlY3Vyc2VzIHRoZSBzdWJ0cmVlIG9mIHRoZSBwcmVmaXggdHJlZS4K
ICAgICAvLyBGb3IgZWFjaCBlZGdlIHRoYXQgaGFzIGZpeGVkIGxlbmd0aCAobm8gcXVhbnRpZmll
cnMgbGlrZSA/LCAqLCBvciArKSBpdCBnZW5lcmF0ZXMgdGhlIG5mYSBncmFwaCwKICAgICAvLyBy
ZWN1cnNlcyBpbnRvIGNoaWxkcmVuLCBhbmQgZGVsZXRlcyBhbnkgcHJvY2Vzc2VkIGxlYWYgbm9k
ZXMuCiAgICAgc3RydWN0IEFjdGl2ZVN1YnRyZWUgewotICAgICAgICBBY3RpdmVTdWJ0cmVlKFBy
ZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleCwgdW5zaWduZWQgbmZhTm9kZUlkLCB1bnNpZ25lZCBlZGdl
SW5kZXgpCisgICAgICAgIEFjdGl2ZVN1YnRyZWUoUHJlZml4VHJlZVZlcnRleCYgdmVydGV4LCBJ
bW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImJiBuZmFOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgp
CiAgICAgICAgICAgICA6IHZlcnRleCh2ZXJ0ZXgpCi0gICAgICAgICAgICAsIG5mYU5vZGVJZChu
ZmFOb2RlSWQpCisgICAgICAgICAgICAsIG5mYU5vZGUoV1RGOjptb3ZlKG5mYU5vZGUpKQogICAg
ICAgICAgICAgLCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgICAgICB7CiAgICAgICAgIH0KICAg
ICAgICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4OwotICAgICAgICB1bnNpZ25lZCBuZmFOb2Rl
SWQ7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZmFOb2RlOwogICAgICAg
ICB1bnNpZ25lZCBlZGdlSW5kZXg7CiAgICAgfTsKICAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4g
c3RhY2s7CiAgICAgaWYgKCFyb290LmVkZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgc3RhY2suYXBw
ZW5kKEFjdGl2ZVN1YnRyZWUocm9vdCwgbmZhUm9vdElkLCAwKSk7CisgICAgICAgIHN0YWNrLmFw
cGVuZChBY3RpdmVTdWJ0cmVlKHJvb3QsIFdURjo6bW92ZShzdWJ0cmVlUm9vdCksIDApKTsKICAg
ICBib29sIG5mYVRvb0JpZyA9IGZhbHNlOwogICAgIAogICAgIC8vIEdlbmVyYXRlIGdyYXBocyBm
b3IgZWFjaCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcXVhbnRpZmllcnMuCkBA
IC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYg
bmZhLCB1bnNpZ25lZCBuZmFSb290SWQsIFByZWZpeFRyZWVWZXJ0ZXgKICAgICAgICAgY29uc3Qg
dW5zaWduZWQgZWRnZUluZGV4ID0gc3RhY2subGFzdCgpLmVkZ2VJbmRleDsKICAgICAgICAgCiAg
ICAgICAgIC8vIE9ubHkgc3RvcCBnZW5lcmF0aW5nIGFuIE5GQSBhdCBhIGxlYWYgdG8gZW5zdXJl
IHdlIGhhdmUgYSBjb3JyZWN0IE5GQS4gV2UgY291bGQgZ28gc2xpZ2h0bHkgb3ZlciB0aGUgbWF4
TkZBU2l6ZS4KLSAgICAgICAgaWYgKHZlcnRleC5lZGdlcy5pc0VtcHR5KCkgJiYgbmZhLmdyYXBo
U2l6ZSgpID4gbWF4TkZBU2l6ZSkKKyAgICAgICAgaWYgKHZlcnRleC5lZGdlcy5pc0VtcHR5KCkg
JiYgbmZhLm5vZGVzLnNpemUoKSA+IG1heE5GQVNpemUpCiAgICAgICAgICAgICBuZmFUb29CaWcg
PSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2VJbmRleCA8IHZlcnRleC5lZGdlcy5z
aXplKCkpIHsKQEAgLTIzNywxMCArMjM3LDEwIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9y
U3VidHJlZShORkEmIG5mYSwgdW5zaWduZWQgbmZhUm9vdElkLCBQcmVmaXhUcmVlVmVydGV4CiAg
ICAgICAgICAgICAgICAgc3RhY2subGFzdCgpLmVkZ2VJbmRleCsrOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNp
Z25lZCBzdWJ0cmVlUm9vdElkID0gZWRnZS50ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBzdGFjay5s
YXN0KCkubmZhTm9kZUlkLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOworCisgICAgICAgICAg
ICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGVkZ2UudGVybS5nZW5lcmF0
ZUdyYXBoKG5mYSwgc3RhY2subGFzdCgpLm5mYU5vZGUsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9u
cyk7CiAgICAgICAgICAgICBBU1NFUlQoZWRnZS5jaGlsZC5nZXQoKSk7Ci0gICAgICAgICAgICBz
dGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSgqZWRnZS5jaGlsZC5nZXQoKSwgc3VidHJlZVJvb3RJ
ZCwgMCkpOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoKmVkZ2UuY2hp
bGQuZ2V0KCksIFdURjo6bW92ZShuZXdOb2RlKSwgMCkpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKGVkZ2VJbmRleCA9PSB2ZXJ0ZXguZWRnZXMuc2l6ZSgpKTsKICAgICAg
ICAgICAgIHZlcnRleC5lZGdlcy5yZW1vdmVBbGxNYXRjaGluZyhbXShQcmVmaXhUcmVlRWRnZSYg
ZWRnZSkKQEAgLTI4NiwyMiArMjg2LDI2IEBAIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjpwcm9j
ZXNzTkZBcyhzaXplX3QgbWF4TkZBU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmCiAgICAg
ICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghc3RhY2suaXNFbXB0eSgpLCAiQXQgbGVhc3QgdGhlIHJvb3Qgc2hvdWxkIGJl
IGluIHRoZSBzdGFjayIpOwotICAgICAgICAKKwogICAgICAgICAvLyBNYWtlIGFuIE5GQSB3aXRo
IHRoZSBzdWJ0cmVlcyBmb3Igd2hvbSB0aGlzIGlzIGFsc28gdGhlIGxhc3QgcXVhbnRpZmllciAo
b3Igd2hvIGFsc28gaGF2ZSBubyBxdWFudGlmaWVyKS4KICAgICAgICAgTkZBIG5mYTsKLSAgICAg
ICAgLy8gUHV0IHRoZSBwcmVmaXggaW50byB0aGUgTkZBLgotICAgICAgICB1bnNpZ25lZCBwcmVm
aXhFbmQgPSBuZmEucm9vdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
Y2suc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXN0YWNrW2ldLT5lZGdl
cy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgY29uc3QgUHJlZml4VHJlZUVkZ2UmIGVkZ2UgPSBz
dGFja1tpXS0+ZWRnZXMubGFzdCgpOwotICAgICAgICAgICAgcHJlZml4RW5kID0gZWRnZS50ZXJt
LmdlbmVyYXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGUgcHJlZml4IGludG8gdGhlIE5GQS4K
KyAgICAgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBsYXN0Tm9kZShuZmEpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKSAtIDE7ICsr
aSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFByZWZpeFRyZWVFZGdlJiBlZGdlID0gc3RhY2tb
aV0tPmVkZ2VzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1
aWxkZXIgbmV3Tm9kZSA9IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgbGFzdE5vZGUsIGVk
Z2UuY2hpbGQtPmZpbmFsQWN0aW9ucyk7CisgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBXVEY6
Om1vdmUobmV3Tm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFB1dCB0aGUg
bm9uLXF1YW50aWZpZWQgdmVydGljZXMgaW4gdGhlIHN1YnRyZWUgaW50byB0aGUgTkZBIGFuZCBk
ZWxldGUgdGhlbS4KKyAgICAgICAgICAgIEFTU0VSVChzdGFjay5sYXN0KCkpOworICAgICAgICAg
ICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwgV1RGOjptb3ZlKGxhc3ROb2RlKSwgKnN0YWNr
Lmxhc3QoKSwgbWF4TkZBU2l6ZSk7CiAgICAgICAgIH0KLSAgICAgICAgLy8gUHV0IHRoZSBub24t
cXVhbnRpZmllZCB2ZXJ0aWNlcyBpbiB0aGUgc3VidHJlZSBpbnRvIHRoZSBORkEgYW5kIGRlbGV0
ZSB0aGVtLgotICAgICAgICBBU1NFUlQoc3RhY2subGFzdCgpKTsKLSAgICAgICAgZ2VuZXJhdGVO
RkFGb3JTdWJ0cmVlKG5mYSwgcHJlZml4RW5kLCAqc3RhY2subGFzdCgpLCBtYXhORkFTaXplKTsK
LSAgICAgICAgCisgICAgICAgIG5mYS5maW5hbGl6ZSgpOworCiAgICAgICAgIGhhbmRsZXIoV1RG
Ojptb3ZlKG5mYSkpOwotICAgICAgICAKKwogICAgICAgICAvLyBDbGVhbiB1cCBhbnkgcHJvY2Vz
c2VkIGxlYWYgbm9kZXMuCiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBpZiAo
c3RhY2suc2l6ZSgpID4gMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKaW5kZXggMzI1Zjcz
ZDEyNTYyYjk3OTY1YTBlNmUwZTA3ZDFlNmE2OTc1YzBjOS4uOTgzMGU0ZjNkMmQwZWIxMTY3NWRk
ZWNkM2ZmOTkwODJkNjg4OTJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCkBAIC0zMDks
OSArMzA5LDcgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5z
aW9uQ29tcGlsYXRpb25DbGllbnQmIGNsaWVudCwgU3RyaW4KICAgICAgICAgLy8gT3VyIGJ5dGVj
b2RlIGludGVycHJldGVyIGV4cGVjdHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgREZBLCBzbyBpZiB3
ZSBoYXZlbid0IHNlZW4gYW55CiAgICAgICAgIC8vIGNyZWF0ZSBhIGR1bW15IG9uZSBhbmQgYWRk
IGFueSB1bml2ZXJzYWwgYWN0aW9ucy4KIAotICAgICAgICBORkEgZHVtbXlORkE7Ci0gICAgICAg
IERGQSBkdW1teURGQSA9IE5GQVRvREZBOjpjb252ZXJ0KGR1bW15TkZBKTsKLQorICAgICAgICBE
RkEgZHVtbXlERkEgPSBERkE6OmVtcHR5KCk7CiAgICAgICAgIGFkZFVuaXZlcnNhbEFjdGlvbnNU
b0RGQShkdW1teURGQSwgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKTsKIAogICAgICAg
ICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwpAQCAtMzc2LDEwICszNzQsOCBAQCBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNs
aWVudCYgY2xpZW50LCBTdHJpbgogICAgIGlmICghZmlyc3RORkFXaXRoRG9tYWluc1NlZW4pIHsK
ICAgICAgICAgLy8gT3VyIGJ5dGVjb2RlIGludGVycHJldGVyIGV4cGVjdHMgdG8gaGF2ZSBhdCBs
ZWFzdCBvbmUgREZBLCBzbyBpZiB3ZSBoYXZlbid0IHNlZW4gYW55CiAgICAgICAgIC8vIGNyZWF0
ZSBhIGR1bW15IG9uZSBhbmQgYWRkIGFueSB1bml2ZXJzYWwgYWN0aW9ucy4KLSAgICAgICAgCi0g
ICAgICAgIE5GQSBkdW1teU5GQTsKLSAgICAgICAgREZBIGR1bW15REZBID0gTkZBVG9ERkE6OmNv
bnZlcnQoZHVtbXlORkEpOwotICAgICAgICAKKworICAgICAgICBERkEgZHVtbXlERkEgPSBERkE6
OmVtcHR5KCk7CiAgICAgICAgIGFkZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkdW1teURGQSwgdW5p
dmVyc2FsQWN0aW9uc1dpdGhEb21haW5zKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxERkFC
eXRlY29kZT4gYnl0ZWNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkEuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNw
cAppbmRleCA1YzNkMzY1MTY5M2I1OTZhYzhjMDMxNDVjMmZkNDhlZDUxMGYyM2MxLi4wZWUwNGQ5
YzJjYmNjOWQ0Y2IzMGFjMzJhYTgxZDM1MzJlMzkyNGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQS5jcHAKQEAgLTM1LDYgKzM1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAorREZBIERGQTo6ZW1wdHkoKQor
eworICAgIERGQSBuZXdERkE7CisgICAgbmV3REZBLm5vZGVzLmFwcGVuZChERkFOb2RlKCkpOwor
ICAgIHJldHVybiBuZXdERkE7Cit9CisKIHNpemVfdCBERkE6Om1lbW9yeVVzZWQoKSBjb25zdAog
ewogICAgIHJldHVybiBzaXplb2YoREZBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkEuaAppbmRleCAzZWJjYTcxNjAxZTI0M2E5OGYxMmU0Nzk5ODhhOGFhYzk5OWRmMjUxLi4xODhk
ZmI0OWEwNmRhNzdhNjg0MmUyNTg3MmMxOTA3NmE5Njg2NmFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkEuaApAQCAtMzgsNiArMzgsOCBAQCBuYW1lc3BhY2UgQ29udGVudEV4
dGVuc2lvbnMgewogCiAvLyBUaGUgREZBIGFic3RyYWN0IGEgcGFydGlhbCBERkEgZ3JhcGggaW4g
YSBjb21wYWN0IGZvcm0uCiBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgREZBIHsKKyAgICBzdGF0aWMg
REZBIGVtcHR5KCk7CisKICAgICB2b2lkIG1pbmltaXplKCk7CiAgICAgdW5zaWduZWQgZ3JhcGhT
aXplKCkgY29uc3Q7CiAgICAgc2l6ZV90IG1lbW9yeVVzZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQS5oIGIvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYy
Y2U2ZDk0MzljNWNkZjA3Y2JhNTdhMzY3YjgxYTIzMmJiM2I4YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQS5oCkBAIC0wLDAg
KzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbW11dGFibGVORkFfaAorI2RlZmluZSBJ
bW11dGFibGVORkFfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
cnVjdCBJbW11dGFibGVSYW5nZSB7CisgICAgdWludDMyX3QgdGFyZ2V0U3RhcnQ7CisgICAgdWlu
dDMyX3QgdGFyZ2V0RW5kOworICAgIENoYXJhY3RlclR5cGUgZmlyc3Q7CisgICAgQ2hhcmFjdGVy
VHlwZSBsYXN0OworfTsKKworc3RydWN0IEltbXV0YWJsZU5GQU5vZGUgeworICAgIHVpbnQzMl90
IHJhbmdlc1N0YXJ0IHsgMCB9OworICAgIHVpbnQzMl90IHJhbmdlc0VuZCB7IDAgfTsKKyAgICB1
aW50MzJfdCBlcHNpbG9uVHJhbnNpdGlvblRhcmdldHNTdGFydCB7IDAgfTsKKyAgICB1aW50MzJf
dCBlcHNpbG9uVHJhbnNpdGlvblRhcmdldHNFbmQgeyAwIH07CisgICAgdWludDMyX3QgYWN0aW9u
U3RhcnQgeyAwIH07CisgICAgdWludDMyX3QgYWN0aW9uRW5kIHsgMCB9OworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CitzdHJ1Y3Qg
SW1tdXRhYmxlTkZBIHsKKyAgICBWZWN0b3I8SW1tdXRhYmxlTkZBTm9kZT4gbm9kZXM7CisgICAg
VmVjdG9yPEltbXV0YWJsZVJhbmdlPENoYXJhY3RlclR5cGU+PiB0cmFuc2l0aW9uczsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IHRhcmdldHM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBlcHNpbG9uVHJh
bnNpdGlvbnNUYXJnZXRzOworICAgIFZlY3RvcjxBY3Rpb25UeXBlPiBhY3Rpb25zOworCisgICAg
c3RydWN0IENvbnN0VGFyZ2V0SXRlcmF0b3IgeworICAgICAgICBjb25zdCBJbW11dGFibGVORkEm
IGltbXV0YWJsZU5GQTsKKyAgICAgICAgdWludDMyX3QgcG9zaXRpb247CisKKyAgICAgICAgY29u
c3QgdWludDMyX3QmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIGltbXV0YWJsZU5GQS50YXJn
ZXRzW3Bvc2l0aW9uXTsgfQorICAgICAgICBjb25zdCB1aW50MzJfdCogb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICZpbW11dGFibGVORkEudGFyZ2V0c1twb3NpdGlvbl07IH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RUYXJnZXRJdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgmaW1tdXRhYmxlTkZBID09ICZvdGhlci5p
bW11dGFibGVORkEpOworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uID09IG90aGVyLnBvc2l0
aW9uOworICAgICAgICB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb25zdFRhcmdl
dEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKwor
ICAgICAgICBDb25zdFRhcmdldEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgKytwb3NpdGlvbjsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBzdHJ1Y3QgSXRlcmFibGVDb25zdFRhcmdldHMgeworICAgICAgICBj
b25zdCBJbW11dGFibGVORkEmIGltbXV0YWJsZU5GQTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0
U3RhcnQ7CisgICAgICAgIHVpbnQzMl90IHRhcmdldEVuZDsKKworICAgICAgICBDb25zdFRhcmdl
dEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyBpbW11dGFibGVORkEsIHRhcmdldFN0
YXJ0IH07IH0KKyAgICAgICAgQ29uc3RUYXJnZXRJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biB7IGltbXV0YWJsZU5GQSwgdGFyZ2V0RW5kIH07IH0KKyAgICB9OworCisgICAgc3RydWN0IENv
bnN0UmFuZ2VJdGVyYXRvciB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZU5GQSYgaW1tdXRhYmxl
TkZBOworICAgICAgICB1aW50MzJfdCBwb3NpdGlvbjsKKworICAgICAgICBjb25zdCBJbW11dGFi
bGVSYW5nZTxDaGFyYWN0ZXJUeXBlPiYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gaW1tdXRh
YmxlTkZBLnRyYW5zaXRpb25zW3Bvc2l0aW9uXTsgfQorICAgICAgICBjb25zdCBJbW11dGFibGVS
YW5nZTxDaGFyYWN0ZXJUeXBlPiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZpbW11dGFi
bGVORkEudHJhbnNpdGlvbnNbcG9zaXRpb25dOyB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbnN0UmFuZ2VJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCgmaW1tdXRhYmxlTkZBID09ICZvdGhlci5pbW11dGFibGVORkEpOworICAg
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uOworICAgICAgICB9Cisg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb25zdFJhbmdlSXRlcmF0b3ImIG90aGVyKSBj
b25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgICAgIENvbnN0UmFuZ2VJ
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrcG9zaXRpb247
CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBJdGVyYWJs
ZUNvbnN0VGFyZ2V0cyBkYXRhKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
SW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4mIHJhbmdlID0gaW1tdXRhYmxlTkZBLnRyYW5z
aXRpb25zW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIHJldHVybiB7IGltbXV0YWJsZU5GQSwgcmFu
Z2UudGFyZ2V0U3RhcnQsIHJhbmdlLnRhcmdldEVuZCB9OworICAgICAgICB9OworICAgIH07CisK
KyAgICBzdHJ1Y3QgSXRlcmFibGVDb25zdFJhbmdlIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxl
TkZBJiBpbW11dGFibGVORkE7CisgICAgICAgIHVpbnQzMl90IHJhbmdlc1N0YXJ0OworICAgICAg
ICB1aW50MzJfdCByYW5nZXNFbmQ7CisKKyAgICAgICAgQ29uc3RSYW5nZUl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4geyBpbW11dGFibGVORkEsIHJhbmdlc1N0YXJ0IH07IH0KKyAgICAg
ICAgQ29uc3RSYW5nZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHsgaW1tdXRhYmxlTkZB
LCByYW5nZXNFbmQgfTsgfQorCisgICAgICAgIHZvaWQgZGVidWdQcmludCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiAqdGhpcykKKyAgICAg
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIiAgICAlZC0lZCIsIHJhbmdlLmZpcnN0LCByYW5nZS5s
YXN0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBJdGVyYWJsZUNvbnN0UmFuZ2UgdHJhbnNp
dGlvbnNGb3JOb2RlKHVpbnQzMl90IG5vZGVJZCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZU5GQU5vZGUmIG5vZGUgPSBub2Rlc1tub2RlSWRdOworICAgICAgICByZXR1cm4g
eyAqdGhpcywgbm9kZS5yYW5nZXNTdGFydCwgbm9kZS5yYW5nZXNFbmQgfTsKKyAgICB9OworCisg
ICAgdWludDMyX3Qgcm9vdCgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bm9kZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdm9pZCBm
aW5hbGl6ZSgpCisgICAgeworICAgICAgICBub2Rlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB0
cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB0YXJnZXRzLnNocmlua1RvRml0KCk7
CisgICAgICAgIGVwc2lsb25UcmFuc2l0aW9uc1RhcmdldHMuc2hyaW5rVG9GaXQoKTsKKyAgICAg
ICAgYWN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgIH0KKworICAgIHNpemVfdCBtZW1vcnlVc2Vk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBub2Rlcy5jYXBhY2l0eSgpICogc2l6ZW9m
KEltbXV0YWJsZU5GQU5vZGUpCisgICAgICAgICAgICArIHRyYW5zaXRpb25zLmNhcGFjaXR5KCkg
KiBzaXplb2YoSW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4pCisgICAgICAgICAgICArIHRh
cmdldHMuY2FwYWNpdHkoKSAqIHNpemVvZih1aW50MzJfdCkKKyAgICAgICAgICAgICsgZXBzaWxv
blRyYW5zaXRpb25zVGFyZ2V0cy5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQzMl90KQorICAgICAg
ICAgICAgKyBhY3Rpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoQWN0aW9uVHlwZSk7CisgICAgfQor
fTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gSW1tdXRhYmxlTkZBX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9JbW11dGFibGVORkFOb2RlQnVp
bGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg5ZjRmMDdhM2Q3ZTIzY2ZlZDE4YjkzNzRiOGYzZTIwMjY2MzYw
MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9J
bW11dGFibGVORkFOb2RlQnVpbGRlci5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJbW11dGFibGVORkFOb2RlQnVpbGRlcl9oCisjZGVmaW5lIEltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyX2gKKworI2luY2x1ZGUgIkltbXV0YWJsZU5GQS5oIgorI2luY2x1ZGUgIk11dGFi
bGVSYW5nZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgeworCisvLyBBIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyIGxldCB5b3Ug
YnVpbGQgYSBORkEgbm9kZSBieSBhZGRpbmcgc3RhdGVzIGFuZCBsaW5raW5nIHdpdGggb3RoZXIg
bm9kZXMuCisvLyBXaGUgYSBidWlsZGVyIGlzIGRlc3RydWN0ZWQsIGFsbCBpdHMgcHJvcGVydGll
cyBhcmUgZmluYWxpemVkIGludG8gdGhlIE5GQS4gVXNpbmcgdGhlIE5BIHdpdGggYSBsaXZlCisv
LyBidWlsZGVyIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9ycy4KK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorY2xhc3MgSW1tdXRhYmxl
TkZBTm9kZUJ1aWxkZXIgeworICAgIHR5cGVkZWYgSW1tdXRhYmxlTkZBPENoYXJhY3RlclR5cGUs
IEFjdGlvblR5cGU+IFR5cGVkSW1tdXRhYmxlTkZBOworICAgIHR5cGVkZWYgSGFzaFNldDx1aW50
MzJfdCwgRGVmYXVsdEhhc2g8dWludDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gVGFyZ2V0U2V0OworcHVibGljOgorICAgIEltbXV0YWJs
ZU5GQU5vZGVCdWlsZGVyKCkgeyB9CisKKyAgICBJbW11dGFibGVORkFOb2RlQnVpbGRlcihUeXBl
ZEltbXV0YWJsZU5GQSYgaW1tdXRhYmxlTkZBKQorICAgICAgICA6IG1faW1tdXRhYmxlTkZBKCZp
bW11dGFibGVORkEpCisgICAgICAgICwgbV9maW5hbGl6ZWQoZmFsc2UpCisgICAgeworICAgICAg
ICBtX25vZGVJZCA9IG1faW1tdXRhYmxlTkZBLT5ub2Rlcy5zaXplKCk7CisgICAgICAgIG1faW1t
dXRhYmxlTkZBLT5ub2Rlcy5hcHBlbmQoSW1tdXRhYmxlTkZBTm9kZSgpKTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIG1faXNEaXNjb25uZWN0ZWQgPSB0cnVlOworI2VuZGlmCisgICAg
fQorCisgICAgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIoSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIm
JiBvdGhlcikKKyAgICAgICAgOiBtX2ltbXV0YWJsZU5GQShvdGhlci5tX2ltbXV0YWJsZU5GQSkK
KyAgICAgICAgLCBtX3JhbmdlcyhXVEY6Om1vdmUob3RoZXIubV9yYW5nZXMpKQorICAgICAgICAs
IG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzKFdURjo6bW92ZShtX2Vwc2lsb25UcmFuc2l0aW9u
VGFyZ2V0cykpCisgICAgICAgICwgbV9hY3Rpb25zKFdURjo6bW92ZShvdGhlci5tX2FjdGlvbnMp
KQorICAgICAgICAsIG1fbm9kZUlkKG90aGVyLm1fbm9kZUlkKQorICAgICAgICAsIG1fZmluYWxp
emVkKG90aGVyLm1fZmluYWxpemVkKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBt
X2lzRGlzY29ubmVjdGVkKG90aGVyLm1faXNEaXNjb25uZWN0ZWQpCisjZW5kaWYKKyAgICB7Cisg
ICAgICAgIG90aGVyLm1faW1tdXRhYmxlTkZBID0gbnVsbHB0cjsKKyAgICAgICAgb3RoZXIubV9m
aW5hbGl6ZWQgPSB0cnVlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgb3RoZXIubV9p
c0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOworI2VuZGlmCisgICAgfQorCisgICAgfkltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faXNE
aXNjb25uZWN0ZWQsICJUaGlzIG5vZGVzIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55dGhpbmcgYW5k
IGlzIG5vdCByZWFjaGVkIGJ5IGFueSBvdGhlciBub2RlLiIpOworCisgICAgICAgIGlmICghbV9m
aW5hbGl6ZWQpCisgICAgICAgICAgICBmaW5hbGl6ZSgpOworICAgIH0KKworICAgIHZvaWQgYWRk
VHJhbnNpdGlvbihDaGFyYWN0ZXJUeXBlIGZpcnN0LCBDaGFyYWN0ZXJUeXBlIGxhc3QsIGNvbnN0
IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0YXJnZXQpCisgICAgeworICAgICAgICBBU1NFUlQo
IW1fZmluYWxpemVkKTsKKyAgICAgICAgQVNTRVJUKG1faW1tdXRhYmxlTkZBKTsKKyAgICAgICAg
QVNTRVJUKG1faW1tdXRhYmxlTkZBID09IHRhcmdldC5tX2ltbXV0YWJsZU5GQSk7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7CisgICAgICAg
IHRhcmdldC5tX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgc3RydWN0
IFRyaXZpYWxSYW5nZSB7CisgICAgICAgICAgICBDaGFyYWN0ZXJUeXBlIGZpcnN0OworICAgICAg
ICAgICAgQ2hhcmFjdGVyVHlwZSBsYXN0OworICAgICAgICB9OworICAgICAgICBzdHJ1Y3QgRmFr
ZVJhbmdlSXRlcmF0b3IgeworICAgICAgICAgICAgY29uc3QgVHJpdmlhbFJhbmdlJiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiByYW5nZTsgfQorICAgICAgICAgICAgY29uc3QgVHJpdmlhbFJh
bmdlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJnJhbmdlOyB9CisgICAgICAgICAgICB1
aW50MzJfdCBkYXRhKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0SWQ7IH0KKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGYWtlUmFuZ2VJdGVyYXRvciYgb3RoZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmlzRW5kID09IG90aGVyLmlzRW5kOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZha2VSYW5n
ZUl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAg
ICAgIEZha2VSYW5nZUl0ZXJhdG9yIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlzRW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRyaXZpYWxSYW5nZSByYW5nZTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IHRhcmdldElkOworICAgICAgICAgICAgYm9vbCBpc0VuZDsKKyAgICAgICAg
fTsKKworICAgICAgICBzdHJ1Y3QgQ29udmVydGVyIHsKKyAgICAgICAgICAgIFRhcmdldFNldCBj
b252ZXJ0KHVpbnQzMl90IHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVGFyZ2V0U2V0KHsgdGFyZ2V0IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dm9pZCBleHRlbmQoVGFyZ2V0U2V0JiBleGlzdGluZ1RhcmdldHMsIHVpbnQzMl90IHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RhcmdldHMuYWRkKHRhcmdl
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgQ29udmVydGVyIGNvbnZl
cnRlcjsKKyAgICAgICAgbV9yYW5nZXMuZXh0ZW5kKEZha2VSYW5nZUl0ZXJhdG9yIHsgeyBmaXJz
dCwgbGFzdCB9LCB0YXJnZXQubV9ub2RlSWQsIGZhbHNlIH0sIEZha2VSYW5nZUl0ZXJhdG9yIHsg
eyAwLCAwIH0sIHRhcmdldC5tX25vZGVJZCwgdHJ1ZSB9LCBjb252ZXJ0ZXIpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24oY29uc3QgSW1tdXRhYmxlTkZBTm9kZUJ1aWxk
ZXImIHRhcmdldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9maW5hbGl6ZWQpOworICAgICAg
ICBBU1NFUlQobV9pbW11dGFibGVORkEpOworICAgICAgICBBU1NFUlQobV9pbW11dGFibGVORkEg
PT0gdGFyZ2V0Lm1faW1tdXRhYmxlTkZBKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAg
IG1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGFyZ2V0Lm1faXNEaXNjb25uZWN0
ZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0cy5h
ZGQodGFyZ2V0Lm1fbm9kZUlkKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY3Rp
b25JdGVyYXRvcj4KKyAgICB2b2lkIHNldEFjdGlvbnMoQWN0aW9uSXRlcmF0b3IgYmVnaW4sIEFj
dGlvbkl0ZXJhdG9yIGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9maW5hbGl6ZWQpOwor
ICAgICAgICBBU1NFUlQobV9pbW11dGFibGVORkEpOworCisgICAgICAgIG1fYWN0aW9ucy5hZGQo
YmVnaW4sIGVuZCk7CisgICAgfQorCisgICAgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXImIG9wZXJh
dG9yPShJbW11dGFibGVORkFOb2RlQnVpbGRlciYmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2ZpbmFsaXplZCkKKyAgICAgICAgICAgIGZpbmFsaXplKCk7CisKKyAgICAgICAgbV9pbW11
dGFibGVORkEgPSBvdGhlci5tX2ltbXV0YWJsZU5GQTsKKyAgICAgICAgbV9yYW5nZXMgPSBXVEY6
Om1vdmUob3RoZXIubV9yYW5nZXMpOworICAgICAgICBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0
cyA9IFdURjo6bW92ZShvdGhlci5tX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0cyk7CisgICAgICAg
IG1fYWN0aW9ucyA9IFdURjo6bW92ZShvdGhlci5tX2FjdGlvbnMpOworICAgICAgICBtX25vZGVJ
ZCA9IG90aGVyLm1fbm9kZUlkOworICAgICAgICBtX2ZpbmFsaXplZCA9IG90aGVyLm1fZmluYWxp
emVkOworCisgICAgICAgIG90aGVyLm1faW1tdXRhYmxlTkZBID0gbnVsbHB0cjsKKyAgICAgICAg
b3RoZXIubV9maW5hbGl6ZWQgPSB0cnVlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
bV9pc0Rpc2Nvbm5lY3RlZCA9IG90aGVyLm1faXNEaXNjb25uZWN0ZWQ7CisgICAgICAgIG90aGVy
Lm1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghbV9maW5hbGl6ZWQsICJUaGUgQVBJIGNvbnRyYWN0IGlzIHRo
YXQgdGhlIGJ1aWxkZXIgY2FuIG9ubHkgYmUgZmluYWxpemVkIG9uY2UuIik7CisgICAgICAgIG1f
ZmluYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgSW1tdXRhYmxlTkZBTm9kZSYgaW1tdXRhYmxlTkZB
Tm9kZSA9IG1faW1tdXRhYmxlTkZBLT5ub2Rlc1ttX25vZGVJZF07CisgICAgICAgIHNpbmtBY3Rp
b25zKGltbXV0YWJsZU5GQU5vZGUpOworICAgICAgICBzaW5rRXBzaWxvblRyYW5zaXRpb25zKGlt
bXV0YWJsZU5GQU5vZGUpOworICAgICAgICBzaW5rVHJhbnNpdGlvbnMoaW1tdXRhYmxlTkZBTm9k
ZSk7CisgICAgfQorCisgICAgdm9pZCBzaW5rQWN0aW9ucyhJbW11dGFibGVORkFOb2RlJiBpbW11
dGFibGVORkFOb2RlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYWN0aW9uU3RhcnQgPSBtX2lt
bXV0YWJsZU5GQS0+YWN0aW9ucy5zaXplKCk7CisgICAgICAgIGZvciAoY29uc3QgQWN0aW9uVHlw
ZSYgYWN0aW9uIDogbV9hY3Rpb25zKQorICAgICAgICAgICAgbV9pbW11dGFibGVORkEtPmFjdGlv
bnMuYXBwZW5kKGFjdGlvbik7CisgICAgICAgIHVuc2lnbmVkIGFjdGlvbkVuZCA9IG1faW1tdXRh
YmxlTkZBLT5hY3Rpb25zLnNpemUoKTsKKyAgICAgICAgaW1tdXRhYmxlTkZBTm9kZS5hY3Rpb25T
dGFydCA9IGFjdGlvblN0YXJ0OworICAgICAgICBpbW11dGFibGVORkFOb2RlLmFjdGlvbkVuZCA9
IGFjdGlvbkVuZDsKKyAgICB9CisKKyAgICB2b2lkIHNpbmtUcmFuc2l0aW9ucyhJbW11dGFibGVO
RkFOb2RlJiBpbW11dGFibGVORkFOb2RlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgdHJhbnNp
dGlvbnNTdGFydCA9IG1faW1tdXRhYmxlTkZBLT50cmFuc2l0aW9ucy5zaXplKCk7CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiBtX3JhbmdlcykgeworICAgICAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0c1N0YXJ0ID0gbV9pbW11dGFibGVORkEtPnRhcmdldHMuc2l6ZSgpOworICAgICAg
ICAgICAgZm9yICh1aW50MzJfdCB0YXJnZXQgOiByYW5nZS5kYXRhKQorICAgICAgICAgICAgICAg
IG1faW1tdXRhYmxlTkZBLT50YXJnZXRzLmFwcGVuZCh0YXJnZXQpOworICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0c0VuZCA9IG1faW1tdXRhYmxlTkZBLT50YXJnZXRzLnNpemUoKTsKKworICAg
ICAgICAgICAgbV9pbW11dGFibGVORkEtPnRyYW5zaXRpb25zLmFwcGVuZChJbW11dGFibGVSYW5n
ZTxDaGFyYWN0ZXJUeXBlPiB7IHRhcmdldHNTdGFydCwgdGFyZ2V0c0VuZCwgcmFuZ2UuZmlyc3Qs
IHJhbmdlLmxhc3QgfSk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgdHJhbnNpdGlvbnNF
bmQgPSBtX2ltbXV0YWJsZU5GQS0+dHJhbnNpdGlvbnMuc2l6ZSgpOworCisgICAgICAgIGltbXV0
YWJsZU5GQU5vZGUucmFuZ2VzU3RhcnQgPSB0cmFuc2l0aW9uc1N0YXJ0OworICAgICAgICBpbW11
dGFibGVORkFOb2RlLnJhbmdlc0VuZCA9IHRyYW5zaXRpb25zRW5kOworICAgIH0KKworICAgIHZv
aWQgc2lua0Vwc2lsb25UcmFuc2l0aW9ucyhJbW11dGFibGVORkFOb2RlJiBpbW11dGFibGVORkFO
b2RlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBtX2ltbXV0YWJsZU5GQS0+ZXBz
aWxvblRyYW5zaXRpb25zVGFyZ2V0cy5zaXplKCk7CisgICAgICAgIGZvciAodWludDMyX3QgdGFy
Z2V0IDogbV9lcHNpbG9uVHJhbnNpdGlvblRhcmdldHMpCisgICAgICAgICAgICBtX2ltbXV0YWJs
ZU5GQS0+ZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0cy5hcHBlbmQodGFyZ2V0KTsKKyAgICAgICAg
dW5zaWduZWQgZW5kID0gbV9pbW11dGFibGVORkEtPmVwc2lsb25UcmFuc2l0aW9uc1RhcmdldHMu
c2l6ZSgpOworCisgICAgICAgIGltbXV0YWJsZU5GQU5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJn
ZXRzU3RhcnQgPSBzdGFydDsKKyAgICAgICAgaW1tdXRhYmxlTkZBTm9kZS5lcHNpbG9uVHJhbnNp
dGlvblRhcmdldHNFbmQgPSBlbmQ7CisgICAgfQorCisgICAgVHlwZWRJbW11dGFibGVORkEqIG1f
aW1tdXRhYmxlTkZBIHsgbnVsbHB0ciB9OworICAgIE11dGFibGVSYW5nZUxpc3Q8Q2hhcmFjdGVy
VHlwZSwgVGFyZ2V0U2V0PiBtX3JhbmdlczsKKyAgICBUYXJnZXRTZXQgbV9lcHNpbG9uVHJhbnNp
dGlvblRhcmdldHM7CisgICAgSGFzaFNldDxBY3Rpb25UeXBlLCBXVEY6OkludEhhc2g8QWN0aW9u
VHlwZT4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8QWN0aW9uVHlwZT4+IG1f
YWN0aW9uczsKKyAgICB1aW50MzJfdCBtX25vZGVJZDsKKyAgICBib29sIG1fZmluYWxpemVkIHsg
dHJ1ZSB9OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtdXRhYmxlIGJvb2wgbV9pc0Rpc2Nv
bm5lY3RlZCB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8v
IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL011dGFibGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvTXV0YWJsZVJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVkMTQyYmI4MWI1MjNlOTBiNDA3
MWFlMTBlNjAyMjVkYmJlNTkyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL011dGFibGVSYW5nZS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBNdXRhYmxlUmFuZ2VfaAorI2RlZmluZSBNdXRhYmxlUmFuZ2VfaAorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hbWUgRGF0YVR5cGU+CitjbGFzcyBNdXRhYmxlUmFuZ2UgeworICAgIHR5
cGVkZWYgTXV0YWJsZVJhbmdlPENoYXJhY3RlclR5cGUsIERhdGFUeXBlPiBUeXBlZE11dGFibGVS
YW5nZTsKK3B1YmxpYzoKKyAgICBNdXRhYmxlUmFuZ2UodWludDMyX3QgbmV4dFJhbmdlSW5kZXgs
IENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCkKKyAgICAgICAgOiBuZXh0
UmFuZ2VJbmRleChuZXh0UmFuZ2VJbmRleCkKKyAgICAgICAgLCBmaXJzdChmaXJzdCkKKyAgICAg
ICAgLCBsYXN0KGxhc3QpCisgICAgeworICAgICAgICBBU1NFUlQoZmlyc3QgPD0gbGFzdCk7Cisg
ICAgfQorCisgICAgTXV0YWJsZVJhbmdlKGNvbnN0IERhdGFUeXBlJiBkYXRhLCB1aW50MzJfdCBu
ZXh0UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0KQor
ICAgICAgICA6IGRhdGEoZGF0YSkKKyAgICAgICAgLCBuZXh0UmFuZ2VJbmRleChuZXh0UmFuZ2VJ
bmRleCkKKyAgICAgICAgLCBmaXJzdChmaXJzdCkKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoZmlyc3QgPD0gbGFzdCk7CisgICAgfQorCisgICAgTXV0YWJsZVJh
bmdlKERhdGFUeXBlJiYgZGF0YSwgdWludDMyX3QgbmV4dFJhbmdlSW5kZXgsIENoYXJhY3RlclR5
cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCkKKyAgICAgICAgOiBkYXRhKFdURjo6bW92ZShk
YXRhKSkKKyAgICAgICAgLCBuZXh0UmFuZ2VJbmRleChuZXh0UmFuZ2VJbmRleCkKKyAgICAgICAg
LCBmaXJzdChmaXJzdCkKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoZmlyc3QgPD0gbGFzdCk7CisgICAgfQorCisgICAgTXV0YWJsZVJhbmdlKE11dGFibGVSYW5n
ZSYmIG90aGVyKQorICAgICAgICA6IGRhdGEoV1RGOjptb3ZlKG90aGVyLmRhdGEpKQorICAgICAg
ICAsIG5leHRSYW5nZUluZGV4KG90aGVyLm5leHRSYW5nZUluZGV4KQorICAgICAgICAsIGZpcnN0
KG90aGVyLmZpcnN0KQorICAgICAgICAsIGxhc3Qob3RoZXIubGFzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChmaXJzdCA8PSBsYXN0KTsKKyAgICB9CisKKyAgICBUeXBlZE11dGFibGVSYW5nZSYg
b3BlcmF0b3I9KFR5cGVkTXV0YWJsZVJhbmdlJiYgb3RoZXIpCisgICAgeworICAgICAgICBkYXRh
ID0gV1RGOjptb3ZlKG90aGVyLmRhdGEpOworICAgICAgICBuZXh0UmFuZ2VJbmRleCA9IFdURjo6
bW92ZShvdGhlci5uZXh0UmFuZ2VJbmRleCk7CisgICAgICAgIGZpcnN0ID0gV1RGOjptb3ZlKG90
aGVyLmZpcnN0KTsKKyAgICAgICAgbGFzdCA9IFdURjo6bW92ZShvdGhlci5sYXN0KTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIERhdGFUeXBlIGRhdGE7CisKKyAgICAvLyBX
ZSB1c2UgYSBmdW5ueSBjb252ZW50aW9uOiBpZiB0aGVyZSBhcmUgbm8gbmV4dFJhbmdlLCB0aGUg
bmV4dFJhbmdlSW5kZXggaXMgemVyby4KKyAgICAvLyBUaGlzIGlzIGZhc3RlciB0byBjaGVjayB0
aGFuIGEgc3BlY2lhbCB2YWx1ZSBpbiBtYW55IGNhc2VzLgorICAgIC8vIFdlIGNhbiB1c2UgemVy
byBiZWNhdXNlIHJhbmdlcyBjYW4gb25seSBmb3JtIGEgY2hhaW4sIGFuZCB0aGUgZmlyc3QgcmFu
Z2UgaXMgYWx3YXlzIHplcm8gYnkgY29udmVudGlvbi4KKyAgICAvLyBXaGVuIHdlIGluc2VydCBz
b21ldGhpbmcgaW4gZnJvbSBvZiB0aGUgZmlyc3QgcmFuZ2UsIHdlIHN3YXAgdGhlIHZhbHVlcy4K
KyAgICB1aW50MzJfdCBuZXh0UmFuZ2VJbmRleDsKKyAgICBDaGFyYWN0ZXJUeXBlIGZpcnN0Owor
ICAgIENoYXJhY3RlclR5cGUgbGFzdDsKKworICAgIENoYXJhY3RlclR5cGUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIGxhc3QgLSBmaXJzdDsgfQorfTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8g
TXV0YWJsZVJhbmdlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL011dGFibGVSYW5nZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L011dGFibGVSYW5nZUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWY5MDdlZWFlNGVhMzFmZWI4MTc2ZWQ5
MTMxYTZkNmY2MWEzY2RkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvTXV0YWJsZVJhbmdlTGlzdC5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBNdXRhYmxlUmFuZ2VMaXN0X2gKKyNkZWZpbmUgTXV0YWJsZVJhbmdlTGlz
dF9oCisKKyNpbmNsdWRlICJNdXRhYmxlUmFuZ2UuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zIHsKKworLy8gQSByYW5nZSBsaXN0IGtlZXBzIHJhbmdlcyBzb3J0ZWQuIFJhbmdlcyBh
cmUgbm90IHNvcnRlZCBpbiB0aGUgdmVjdG9yLCBidXQKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmFtZSBEYXRhVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAw
PgorY2xhc3MgTXV0YWJsZVJhbmdlTGlzdCB7CisgICAgdHlwZWRlZiBNdXRhYmxlUmFuZ2U8Q2hh
cmFjdGVyVHlwZSwgRGF0YVR5cGU+IFR5cGVkTXV0YWJsZVJhbmdlOworcHVibGljOgorICAgIGNs
YXNzIENvbnN0SXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgTXV0YWJsZVJh
bmdlTGlzdCYgcmFuZ2VMaXN0OworICAgICAgICB1aW50MzJfdCBpbmRleDsKKyAgICAgICAgYm9v
bCBhdEVuZDsKKworICAgICAgICBjb25zdCBUeXBlZE11dGFibGVSYW5nZSYgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gcmFuZ2VMaXN0Lm1fcmFuZ2VzW2luZGV4XTsgfQorICAgICAgICBjb25z
dCBUeXBlZE11dGFibGVSYW5nZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZyYW5nZUxp
c3QubV9yYW5nZXNbaW5kZXhdOyB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
JnJhbmdlTGlzdCA9PSAmb3RoZXIucmFuZ2VMaXN0KTsKKyAgICAgICAgICAgIGlmIChhdEVuZCB8
fCBvdGhlci5hdEVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXRFbmQgPT0gb3RoZXIuYXRF
bmQ7CisgICAgICAgICAgICByZXR1cm4gaW5kZXggPT0gb3RoZXIuaW5kZXg7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgICAgIENvbnN0SXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWF0RW5kKTsKKyAg
ICAgICAgICAgIGluZGV4ID0gcmFuZ2VMaXN0Lm1fcmFuZ2VzW2luZGV4XS5uZXh0UmFuZ2VJbmRl
eDsKKyAgICAgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICAgICAgYXRFbmQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgfTsKKworICAgIENv
bnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yIHsgKnRoaXMs
IDAsIG1fcmFuZ2VzLmlzRW1wdHkoKSB9OyB9CisgICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBDb25zdEl0ZXJhdG9yIHsgKnRoaXMsIDAsIHRydWUgfTsgfQorCisgICAgdWlu
dDMyX3QgYXBwZW5kUmFuZ2UodWludDMyX3QgbGFzdFJhbmdlSW5kZXgsIENoYXJhY3RlclR5cGUg
Zmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCwgY29uc3QgRGF0YVR5cGUmIGRhdGEpCisgICAgewor
ICAgICAgICB1aW50MzJfdCBuZXdSYW5nZUluZGV4ID0gbV9yYW5nZXMuc2l6ZSgpOworICAgICAg
ICBtX3Jhbmdlcy5hcHBlbmQoVHlwZWRNdXRhYmxlUmFuZ2UoZGF0YSwgMCwgZmlyc3QsIGxhc3Qp
KTsKKyAgICAgICAgaWYgKCFuZXdSYW5nZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAgICAgQVNTRVJUKCFtX3Jhbmdlc1tsYXN0UmFuZ2VJbmRleF0ubmV4dFJhbmdlSW5kZXgp
OworICAgICAgICBBU1NFUlQobV9yYW5nZXNbbGFzdFJhbmdlSW5kZXhdLmxhc3QgPCBmaXJzdCk7
CisKKyAgICAgICAgbV9yYW5nZXNbbGFzdFJhbmdlSW5kZXhdLm5leHRSYW5nZUluZGV4ID0gbmV3
UmFuZ2VJbmRleDsKKyAgICAgICAgcmV0dXJuIG5ld1JhbmdlSW5kZXg7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlSXRlcmF0b3IsIHR5cGVuYW1lIERhdGFDb252ZXJ0ZXI+
CisgICAgdm9pZCBleHRlbmQoUmFuZ2VJdGVyYXRvciBvdGhlckl0ZXJhdG9yLCBSYW5nZUl0ZXJh
dG9yIG90aGVyRW5kLCBEYXRhQ29udmVydGVyIGRhdGFDb252ZXJ0ZXIpCisgICAgeworICAgICAg
ICBpZiAob3RoZXJJdGVyYXRvciA9PSBvdGhlckVuZCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAobV9yYW5nZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbml0aWFsaXpl
RnJvbShvdGhlckl0ZXJhdG9yLCBvdGhlckVuZCwgZGF0YUNvbnZlcnRlcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlYWNoZWRTZWxmRW5kID0gZmFs
c2U7CisgICAgICAgIHVpbnQzMl90IGxhc3RTZWxmUmFuZ2VJbmRleCA9IDA7CisgICAgICAgIHVp
bnQzMl90IHNlbGZSYW5nZUluZGV4ID0gMDsKKworICAgICAgICBhdXRvIG90aGVyUmFuZ2VPZmZz
ZXQgPSBvdGhlckl0ZXJhdG9yLT5maXJzdDsgLy8gVG8gZ2V0IHRoZSByaWdodCB0eXBlIDopCisg
ICAgICAgIG90aGVyUmFuZ2VPZmZzZXQgPSAwOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IFR5cGVkTXV0YWJsZVJhbmdlKiBhY3RpdmVTZWxmUmFuZ2UgPSAmbV9yYW5nZXNbc2VsZlJhbmdl
SW5kZXhdOworCisgICAgICAgICAgICAvLyBGaXJzdCwgd2UgbW92ZSBmb3J3YXJkIHVudGlsIHdl
IGZpbmQgc29tZXRoaW5nIGludGVyZXN0aW5nLgorICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGZS
YW5nZS0+bGFzdCA8IG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJSYW5nZU9mZnNldCkgewor
ICAgICAgICAgICAgICAgIGxhc3RTZWxmUmFuZ2VJbmRleCA9IHNlbGZSYW5nZUluZGV4OworICAg
ICAgICAgICAgICAgIHNlbGZSYW5nZUluZGV4ID0gYWN0aXZlU2VsZlJhbmdlLT5uZXh0UmFuZ2VJ
bmRleDsKKyAgICAgICAgICAgICAgICByZWFjaGVkU2VsZkVuZCA9ICFzZWxmUmFuZ2VJbmRleDsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChvdGhlckl0ZXJhdG9yLT5sYXN0IDwgYWN0aXZlU2VsZlJhbmdlLT5maXJzdCkgeworICAgICAg
ICAgICAgICAgIGluc2VydEJldHdlZW4obGFzdFNlbGZSYW5nZUluZGV4LCBzZWxmUmFuZ2VJbmRl
eCwgb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyBvdGhlclJhbmdlT2Zmc2V0LCBvdGhlckl0ZXJhdG9y
LT5sYXN0LCBkYXRhQ29udmVydGVyLmNvbnZlcnQob3RoZXJJdGVyYXRvci5kYXRhKCkpKTsKKwor
ICAgICAgICAgICAgICAgICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBvdGhlclJh
bmdlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlLCB3ZSBoYXZlOgorICAgICAgICAg
ICAgLy8gMSkgYWN0aXZlUmFuZ2VBLT5sYXN0ID49IGFjdGl2ZVJhbmdlQi0+Zmlyc3QuCisgICAg
ICAgICAgICAvLyAyKSBhY3RpdmVSYW5nZUEtPmZpcnN0IDw9IGFjdGl2ZVJhbmdlQi0+bGFzdC4K
KyAgICAgICAgICAgIC8vIEJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0aGV5IGNvbGxpZGUuCisKKyAg
ICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSBwYXJ0IG9uIHRoZSBsZWZ0PyBDcmVhdGUgYSBuZXcg
cmFuZ2UgZm9yIGl0LgorICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3QgPCBv
dGhlckl0ZXJhdG9yLT5maXJzdCArIG90aGVyUmFuZ2VPZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICBEYXRhVHlwZSBjb3BpZWREYXRhID0gYWN0aXZlU2VsZlJhbmdlLT5kYXRhOworICAgICAgICAg
ICAgICAgIENoYXJhY3RlclR5cGUgbmV3UmFuZ2VGaXJzdENoYXJhY3RlciA9IGFjdGl2ZVNlbGZS
YW5nZS0+Zmlyc3Q7CisgICAgICAgICAgICAgICAgYWN0aXZlU2VsZlJhbmdlLT5maXJzdCA9IG90
aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJSYW5nZU9mZnNldDsKKyAgICAgICAgICAgICAgICBp
bnNlcnRCZXR3ZWVuKGxhc3RTZWxmUmFuZ2VJbmRleCwgc2VsZlJhbmdlSW5kZXgsIG5ld1Jhbmdl
Rmlyc3RDaGFyYWN0ZXIsIG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJSYW5nZU9mZnNldCAt
IDEsIFdURjo6bW92ZShjb3BpZWREYXRhKSk7CisgICAgICAgICAgICAgICAgYWN0aXZlU2VsZlJh
bmdlID0gJm1fcmFuZ2VzW3NlbGZSYW5nZUluZGV4XTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
b3RoZXJJdGVyYXRvci0+Zmlyc3QgKyBvdGhlclJhbmdlT2Zmc2V0IDwgYWN0aXZlU2VsZlJhbmdl
LT5maXJzdCkgeworICAgICAgICAgICAgICAgIGluc2VydEJldHdlZW4obGFzdFNlbGZSYW5nZUlu
ZGV4LCBzZWxmUmFuZ2VJbmRleCwgb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyBvdGhlclJhbmdlT2Zm
c2V0LCBhY3RpdmVTZWxmUmFuZ2UtPmZpcnN0IC0gMSwgZGF0YUNvbnZlcnRlci5jb252ZXJ0KG90
aGVySXRlcmF0b3IuZGF0YSgpKSk7CisKKyAgICAgICAgICAgICAgICBhY3RpdmVTZWxmUmFuZ2Ug
PSAmbV9yYW5nZXNbc2VsZlJhbmdlSW5kZXhdOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0Uob3RoZXJSYW5nZU9mZnNldCA8IGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3QgLSBvdGhl
ckl0ZXJhdG9yLT5maXJzdCwgIlRoZSBvZmZzZXQgbXVzdCBtb3ZlIGZvcndhcmQgb3Igd2UgY291
bGQgZ2V0IHN0dWNrIG9uIHRoaXMgb3BlcmF0aW9uLiIpOworICAgICAgICAgICAgICAgIG90aGVy
UmFuZ2VPZmZzZXQgPSBhY3RpdmVTZWxmUmFuZ2UtPmZpcnN0IC0gb3RoZXJJdGVyYXRvci0+Zmly
c3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhlcmUsIHdlIGtub3cgYm90aCBy
YW5nZXMgc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQsIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBwYXJ0
IHRoYXQgaW50ZXJzZWN0CisgICAgICAgICAgICAvLyBhbmQgbWVyZ2UgdGhlIGRhdGEuCisKKyAg
ICAgICAgICAgIGlmIChhY3RpdmVTZWxmUmFuZ2UtPmxhc3QgPT0gb3RoZXJJdGVyYXRvci0+bGFz
dCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZXkgZmluaXNoIHRvZ2V0aGVyLCB0aGluZ3Mg
YXJlIHJlYWxseSBlYXN5OiB3ZSBqdXN0IGFkZCBCIHRvIEEuCisgICAgICAgICAgICAgICAgZGF0
YUNvbnZlcnRlci5leHRlbmQoYWN0aXZlU2VsZlJhbmdlLT5kYXRhLCBvdGhlckl0ZXJhdG9yLmRh
dGEoKSk7CisKKyAgICAgICAgICAgICAgICBsYXN0U2VsZlJhbmdlSW5kZXggPSBzZWxmUmFuZ2VJ
bmRleDsKKyAgICAgICAgICAgICAgICBzZWxmUmFuZ2VJbmRleCA9IGFjdGl2ZVNlbGZSYW5nZS0+
bmV4dFJhbmdlSW5kZXg7CisgICAgICAgICAgICAgICAgcmVhY2hlZFNlbGZFbmQgPSAhc2VsZlJh
bmdlSW5kZXg7CisKKyAgICAgICAgICAgICAgICArK290aGVySXRlcmF0b3I7CisgICAgICAgICAg
ICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhY3RpdmVTZWxmUmFuZ2UtPmxhc3QgPiBv
dGhlckl0ZXJhdG9yLT5sYXN0KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgQSBpcyBiaWdnZXIg
dGhhbiBCLCB3ZSBhZGQgYSBtZXJnZWQgdmVyc2lvbiBhbmQgbW92ZSBBIHRvIHRoZSByaWdodC4K
KworICAgICAgICAgICAgICAgIENoYXJhY3RlclR5cGUgY29tYmluZWRQYXJ0U3RhcnQgPSBhY3Rp
dmVTZWxmUmFuZ2UtPmZpcnN0OworICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGZSYW5nZS0+Zmly
c3QgPSBvdGhlckl0ZXJhdG9yLT5sYXN0ICsgMTsKKworICAgICAgICAgICAgICAgIERhdGFUeXBl
IGNvbWJpbmVkRGF0YSA9IGFjdGl2ZVNlbGZSYW5nZS0+ZGF0YTsKKyAgICAgICAgICAgICAgICBk
YXRhQ29udmVydGVyLmV4dGVuZChjb21iaW5lZERhdGEsIG90aGVySXRlcmF0b3IuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRCZXR3ZWVuKGxhc3RTZWxmUmFuZ2VJbmRleCwgc2VsZlJh
bmdlSW5kZXgsIGNvbWJpbmVkUGFydFN0YXJ0LCBvdGhlckl0ZXJhdG9yLT5sYXN0LCBXVEY6Om1v
dmUoY29tYmluZWREYXRhKSk7CisKKyAgICAgICAgICAgICAgICArK290aGVySXRlcmF0b3I7Cisg
ICAgICAgICAgICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgaGVy
ZSwgQiBlbmRzIGFmdGVyIEEuIFdlIG1lcmdlIHRoZSBpbnRlcnNlY3Rpb24gYW5kIG1vdmUgb24u
CisgICAgICAgICAgICBBU1NFUlQob3RoZXJJdGVyYXRvci0+bGFzdCA+IGFjdGl2ZVNlbGZSYW5n
ZS0+bGFzdCk7CisgICAgICAgICAgICBkYXRhQ29udmVydGVyLmV4dGVuZChhY3RpdmVTZWxmUmFu
Z2UtPmRhdGEsIG90aGVySXRlcmF0b3IuZGF0YSgpKTsKKworICAgICAgICAgICAgb3RoZXJSYW5n
ZU9mZnNldCA9IGFjdGl2ZVNlbGZSYW5nZS0+bGFzdCAtIG90aGVySXRlcmF0b3ItPmZpcnN0ICsg
MTsKKyAgICAgICAgICAgIGxhc3RTZWxmUmFuZ2VJbmRleCA9IHNlbGZSYW5nZUluZGV4OworICAg
ICAgICAgICAgc2VsZlJhbmdlSW5kZXggPSBhY3RpdmVTZWxmUmFuZ2UtPm5leHRSYW5nZUluZGV4
OworICAgICAgICAgICAgcmVhY2hlZFNlbGZFbmQgPSAhc2VsZlJhbmdlSW5kZXg7CisgICAgICAg
IH0gd2hpbGUgKCFyZWFjaGVkU2VsZkVuZCAmJiBvdGhlckl0ZXJhdG9yICE9IG90aGVyRW5kKTsK
KworICAgICAgICB3aGlsZSAob3RoZXJJdGVyYXRvciAhPSBvdGhlckVuZCkgeworICAgICAgICAg
ICAgbGFzdFNlbGZSYW5nZUluZGV4ID0gYXBwZW5kUmFuZ2UobGFzdFNlbGZSYW5nZUluZGV4LCBv
dGhlckl0ZXJhdG9yLT5maXJzdCArIG90aGVyUmFuZ2VPZmZzZXQsIG90aGVySXRlcmF0b3ItPmxh
c3QsIGRhdGFDb252ZXJ0ZXIuY29udmVydChvdGhlckl0ZXJhdG9yLmRhdGEoKSkpOworICAgICAg
ICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IDA7CisgICAgICAgICAgICArK290aGVySXRlcmF0b3I7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcmFuZ2VzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
KCkKKyAgICB7CisgICAgICAgIG1fcmFuZ2VzLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBk
ZWJ1Z1ByaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgVHlwZWRNdXRhYmxl
UmFuZ2UmIHJhbmdlIDogKnRoaXMpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIiAgICAlZC0l
ZCIsIHJhbmdlLmZpcnN0LCByYW5nZS5sYXN0KTsKKyAgICB9CisKKyAgICBWZWN0b3I8TXV0YWJs
ZVJhbmdlPENoYXJhY3RlclR5cGUsIERhdGFUeXBlPiwgaW5saW5lQ2FwYWNpdHk+IG1fcmFuZ2Vz
OworcHJpdmF0ZToKKyAgICB2b2lkIGluc2VydEJldHdlZW4odWludDMyX3QmIGxlZnRSYW5nZUlu
ZGV4LCB1aW50MzJfdCYgcmlnaHRSYW5nZUluZGV4LCBDaGFyYWN0ZXJUeXBlIGZpcnN0LCBDaGFy
YWN0ZXJUeXBlIGxhc3QsIERhdGFUeXBlJiYgZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3Jhbmdlc1tyaWdodFJhbmdlSW5kZXhdLmZpcnN0ID4gbGFzdCk7CisKKyAgICAgICAgaWYgKCFy
aWdodFJhbmdlSW5kZXgpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Uu
IFdlIGFsd2F5cyBrZWVwIHRoZSBmaXJzdCByYW5nZSBhcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0
aGUgdmVjdG9yLgorICAgICAgICAgICAgdWludDMyX3QgbW92ZWRSYW5nZUluZGV4ID0gbV9yYW5n
ZXMuc2l6ZSgpOworICAgICAgICAgICAgbV9yYW5nZXMuYXBwZW5kKFdURjo6bW92ZShtX3Jhbmdl
cy5maXJzdCgpKSk7CisgICAgICAgICAgICBtX3Jhbmdlc1swXSA9IFR5cGVkTXV0YWJsZVJhbmdl
KFdURjo6bW92ZShkYXRhKSwgbW92ZWRSYW5nZUluZGV4LCBmaXJzdCwgbGFzdCk7CisgICAgICAg
ICAgICBsZWZ0UmFuZ2VJbmRleCA9IDA7CisgICAgICAgICAgICByaWdodFJhbmdlSW5kZXggPSBt
b3ZlZFJhbmdlSW5kZXg7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQobV9yYW5nZXNbbGVmdFJhbmdlSW5kZXhdLm5leHRSYW5nZUluZGV4ID09IHJpZ2h0
UmFuZ2VJbmRleCk7CisgICAgICAgIEFTU0VSVChtX3Jhbmdlc1tsZWZ0UmFuZ2VJbmRleF0ubGFz
dCA8IGZpcnN0KTsKKworICAgICAgICB1aW50MzJfdCBuZXdSYW5nZUluZGV4ID0gbV9yYW5nZXMu
c2l6ZSgpOworICAgICAgICBtX3Jhbmdlcy5hcHBlbmQoVHlwZWRNdXRhYmxlUmFuZ2UoV1RGOjpt
b3ZlKGRhdGEpLCByaWdodFJhbmdlSW5kZXgsIGZpcnN0LCBsYXN0KSk7CisgICAgICAgIG1fcmFu
Z2VzW2xlZnRSYW5nZUluZGV4XS5uZXh0UmFuZ2VJbmRleCA9IG5ld1JhbmdlSW5kZXg7CisgICAg
ICAgIGxlZnRSYW5nZUluZGV4ID0gbmV3UmFuZ2VJbmRleDsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgUmFuZ2VJdGVyYXRvciwgdHlwZW5hbWUgRGF0YUNvbnZlcnRlcj4KKyAgICB2
b2lkIGluaXRpYWxpemVGcm9tKFJhbmdlSXRlcmF0b3Igb3RoZXJJdGVyYXRvciwgUmFuZ2VJdGVy
YXRvciBvdGhlckVuZCwgRGF0YUNvbnZlcnRlciBkYXRhQ29udmVydGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvdGhlckl0ZXJhdG9yICE9IG90aGVyRW5kLCAiV2Ugc2hv
dWxkIG5ldmVyIGRvIGFueXRoaW5nIHdoZW4gZXh0ZW5kaW5nIHdpdGggYSBudWxsIHJhbmdlLiIp
OworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmFuZ2VzLmlzRW1wdHkoKSwgIlRoaXMg
Y29kZSBkb2VzIG5vdCBoYW5kbGUgc3BsaXR0aW5nLCBpdCBjYW4gb25seSBiZSB1c2VkIG9uIGVt
cHR5IFJhbmdlTGlzdC4iKTsKKworICAgICAgICB1aW50MzJfdCBsb29wQ291bnRlciA9IDA7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChUeXBlZE11dGFibGVSYW5n
ZShkYXRhQ29udmVydGVyLmNvbnZlcnQob3RoZXJJdGVyYXRvci5kYXRhKCkpLAorICAgICAgICAg
ICAgICAgIGxvb3BDb3VudGVyICsgMSwKKyAgICAgICAgICAgICAgICBvdGhlckl0ZXJhdG9yLT5m
aXJzdCwKKyAgICAgICAgICAgICAgICBvdGhlckl0ZXJhdG9yLT5sYXN0KSk7CisgICAgICAgICAg
ICArK2xvb3BDb3VudGVyOworICAgICAgICAgICAgKytvdGhlckl0ZXJhdG9yOworICAgICAgICB9
IHdoaWxlIChvdGhlckl0ZXJhdG9yICE9IG90aGVyRW5kKTsKKworICAgICAgICBpZiAoIW1fcmFu
Z2VzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fcmFuZ2VzLmxhc3QoKS5uZXh0UmFuZ2VJbmRl
eCA9IDA7CisgICAgfQorfTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gTXV0YWJsZVJhbmdl
TGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAppbmRleCBiMzAx
ODg0OWFiMDQxYzAxNzRmNjk5NzdlZmJjMTJjYzQ4MGRlYjE3Li5jYTg1YjZiMzEwYTRmNzY3ZjJi
ZDQ2YmEzYTM0NjQyMzA4Y2FiNDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ORkEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L05GQS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIApAQCAtMzUsMTg4ICszNiw4NyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLU5GQTo6
TkZBKCkKLSAgICA6IG1fcm9vdChjcmVhdGVOb2RlKCkpCi17Ci19Ci0KLXVuc2lnbmVkIE5GQTo6
Y3JlYXRlTm9kZSgpCi17Ci0gICAgdW5zaWduZWQgbmV4dElkID0gbV9ub2Rlcy5zaXplKCk7Ci0g
ICAgbV9ub2Rlcy5hcHBlbmQoTkZBTm9kZSgpKTsKLSAgICByZXR1cm4gbmV4dElkOwotfQotCi0j
aWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwotc2l6ZV90IE5GQTo6
bWVtb3J5VXNlZCgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IHNpemUgPSBzaXplb2YoTkZBKTsKLSAg
ICBmb3IgKGNvbnN0IE5GQU5vZGUmIG5vZGUgOiBtX25vZGVzKSB7Ci0gICAgICAgIGZvciAoY29u
c3QgYXV0byYgdHJhbnNpdGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCi0gICAgICAgICAgICBzaXpl
ICs9IHRyYW5zaXRpb24udmFsdWUuY2FwYWNpdHkoKSAqIHNpemVvZih1bnNpZ25lZCk7Ci0gICAg
ICAgIHNpemUgKz0gc2l6ZW9mKG5vZGUpCi0gICAgICAgICAgICArIG5vZGUudHJhbnNpdGlvbnMu
Y2FwYWNpdHkoKSAqIHNpemVvZihzdGQ6OnBhaXI8dWludDE2X3QsIE5GQU5vZGVJbmRleFNldD4p
Ci0gICAgICAgICAgICArIG5vZGUudHJhbnNpdGlvbnNPbkFueUNoYXJhY3Rlci5jYXBhY2l0eSgp
ICogc2l6ZW9mKHVuc2lnbmVkKQotICAgICAgICAgICAgKyBub2RlLmZpbmFsUnVsZUlkcy5jYXBh
Y2l0eSgpICogc2l6ZW9mKHVpbnQ2NF90KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBORkE6OmFkZFRyYW5zaXRpb24odW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8sIGNoYXIgY2hhcmFjdGVyKQotewotICAgIEFTU0VSVChmcm9tIDwgbV9ub2Rlcy5zaXplKCkp
OwotICAgIEFTU0VSVCh0byA8IG1fbm9kZXMuc2l6ZSgpKTsKLQotICAgIE5GQU5vZGUmIGZyb21O
b2RlID0gbV9ub2Rlc1tmcm9tXTsKLSAgICBpZiAoZnJvbU5vZGUudHJhbnNpdGlvbnNPbkFueUNo
YXJhY3Rlci5jb250YWlucyh0bykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9ub2Rlc1tmcm9tXS50cmFuc2l0aW9ucy5hZGQoY2hhcmFjdGVyLCBORkFOb2RlSW5k
ZXhTZXQoKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hZGQodG8pOwotfQotCi12
b2lkIE5GQTo6YWRkRXBzaWxvblRyYW5zaXRpb24odW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
Ci17Ci0gICAgQVNTRVJUKGZyb20gPCBtX25vZGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRvIDwg
bV9ub2Rlcy5zaXplKCkpOwotCi0gICAgYXV0byBhZGRSZXN1bHQgPSBtX25vZGVzW2Zyb21dLnRy
YW5zaXRpb25zLmFkZChlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3RlciwgTkZBTm9kZUluZGV4U2V0
KCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYWRkKHRvKTsKLX0KLQotdm9pZCBO
RkE6OmFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIodW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pCi17Ci0gICAgQVNTRVJUKGZyb20gPCBtX25vZGVzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHRv
IDwgbV9ub2Rlcy5zaXplKCkpOwotCi0gICAgTkZBTm9kZSYgZnJvbU5vZGUgPSBtX25vZGVzW2Zy
b21dOwotICAgIGZyb21Ob2RlLnRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIuYWRkKHRvKTsKLQot
ICAgIGZvciAoYXV0byB0cmFuc2l0aW9uU2xvdCA6IGZyb21Ob2RlLnRyYW5zaXRpb25zKQotICAg
ICAgICB0cmFuc2l0aW9uU2xvdC52YWx1ZS5yZW1vdmUodG8pOwotfQotCi12b2lkIE5GQTo6c2V0
QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25MaXN0JiBhY3Rpb25zKQotewotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9ub2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMuaXNFbXB0eSgp
LCAiVGhlIGZpbmFsIHN0YXRlIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgb25jZS4iKTsKLSAgICBj
b3B5VG9WZWN0b3IoYWN0aW9ucywgbV9ub2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMpOwotfQotCi11
bnNpZ25lZCBORkE6OmdyYXBoU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZXMuc2l6
ZSgpOwotfQotCi12b2lkIE5GQTo6cmVzdG9yZVRvR3JhcGhTaXplKHVuc2lnbmVkIHNpemUpCi17
Ci0gICAgQVNTRVJUKHNpemUgPj0gMSk7Ci0gICAgQVNTRVJUKHNpemUgPD0gZ3JhcGhTaXplKCkp
OwotCi0gICAgbV9ub2Rlcy5zaHJpbmsoc2l6ZSk7Ci19Ci0KLSNpZiBDT05URU5UX0VYVEVOU0lP
TlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLXN0YXRpYyB2b2lkIHByaW50UmFuZ2UoYm9vbCBm
aXJzdFJhbmdlLCB1aW50MTZfdCByYW5nZVN0YXJ0LCB1aW50MTZfdCByYW5nZUVuZCwgdWludDE2
X3QgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCi17Ci0gICAgaWYgKCFmaXJzdFJhbmdlKQot
ICAgICAgICBkYXRhTG9nRigiLCAiKTsKLSAgICBpZiAocmFuZ2VTdGFydCA9PSByYW5nZUVuZCkg
ewotICAgICAgICBpZiAocmFuZ2VTdGFydCA9PSBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3RlcikK
LSAgICAgICAgICAgIGRhdGFMb2dGKCLJmyIpOwotICAgICAgICBlbHNlIGlmIChyYW5nZVN0YXJ0
ID09ICciJyB8fCByYW5nZVN0YXJ0ID09ICdcXCcpCi0gICAgICAgICAgICBkYXRhTG9nRigiXFwl
YyIsIHJhbmdlU3RhcnQpOwotICAgICAgICBlbHNlIGlmIChyYW5nZVN0YXJ0ID49ICchJyAmJiBy
YW5nZVN0YXJ0IDw9ICd+JykKLSAgICAgICAgICAgIGRhdGFMb2dGKCIlYyIsIHJhbmdlU3RhcnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nRigiXFxcXCVkIiwgcmFuZ2VTdGFy
dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJhbmdlU3RhcnQgPT0gMSAmJiByYW5nZUVu
ZCA9PSAxMjcpCi0gICAgICAgICAgICBkYXRhTG9nRigiW2FueSBpbnB1dF0iKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZGF0YUxvZ0YoIlxcXFwlZC1cXFxcJWQiLCByYW5nZVN0YXJ0LCBy
YW5nZUVuZCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBwcmludFRyYW5zaXRpb25zKGNvbnN0
IFZlY3RvcjxORkFOb2RlPiYgZ3JhcGgsIHVuc2lnbmVkIHNvdXJjZU5vZGUsIHVpbnQxNl90IGVw
c2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKQotewotICAgIGNvbnN0IE5GQU5vZGUmIG5vZGUgPSBn
cmFwaFtzb3VyY2VOb2RlXTsKLSAgICBjb25zdCBIYXNoTWFwPHVpbnQxNl90LCBORkFOb2RlSW5k
ZXhTZXQsIERlZmF1bHRIYXNoPHVpbnQxNl90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50MTZfdD4+JiB0cmFuc2l0aW9ucyA9IG5vZGUudHJhbnNpdGlvbnM7
Ci0KLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBIYXNoU2V0PHVpbnQxNl90LCBEZWZhdWx0SGFzaDx1
aW50MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2
X3Q+PiwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gdHJhbnNpdGlvbnNQZXJUYXJnZXQ7Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiB0cmFuc2l0aW9ucykgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIHRhcmdldE5vZGUgOiB0cmFuc2l0aW9uLnZhbHVlKSB7Ci0gICAgICAgICAgICB0cmFu
c2l0aW9uc1BlclRhcmdldC5hZGQodGFyZ2V0Tm9kZSwgSGFzaFNldDx1aW50MTZfdCwgRGVmYXVs
dEhhc2g8dWludDE2X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQxNl90Pj4oKSk7Ci0gICAgICAgICAgICB0cmFuc2l0aW9uc1BlclRhcmdldC5maW5kKHRh
cmdldE5vZGUpLT52YWx1ZS5hZGQodHJhbnNpdGlvbi5rZXkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uUGVyVGFyZ2V0IDogdHJhbnNpdGlvbnNQ
ZXJUYXJnZXQpIHsKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgJWQgLT4gJWQgW2xhYmVsPVwi
Iiwgc291cmNlTm9kZSwgdHJhbnNpdGlvblBlclRhcmdldC5rZXkpOwotCi0gICAgICAgIFZlY3Rv
cjx1aW50MTZfdD4gaW5jb21taW5nQ2hhcmFjdGVyczsKLSAgICAgICAgY29weVRvVmVjdG9yKHRy
YW5zaXRpb25QZXJUYXJnZXQudmFsdWUsIGluY29tbWluZ0NoYXJhY3RlcnMpOwotICAgICAgICBz
dGQ6OnNvcnQoaW5jb21taW5nQ2hhcmFjdGVycy5iZWdpbigpLCBpbmNvbW1pbmdDaGFyYWN0ZXJz
LmVuZCgpKTsKLQotICAgICAgICB1aW50MTZfdCByYW5nZVN0YXJ0ID0gaW5jb21taW5nQ2hhcmFj
dGVycy5maXJzdCgpOwotICAgICAgICB1aW50MTZfdCByYW5nZUVuZCA9IHJhbmdlU3RhcnQ7Ci0g
ICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHNvcnRlZFRy
YW5zaXRpb25JbmRleCA9IDE7IHNvcnRlZFRyYW5zaXRpb25JbmRleCA8IGluY29tbWluZ0NoYXJh
Y3RlcnMuc2l6ZSgpOyArK3NvcnRlZFRyYW5zaXRpb25JbmRleCkgewotICAgICAgICAgICAgdWlu
dDE2X3QgbmV4dENoYXIgPSBpbmNvbW1pbmdDaGFyYWN0ZXJzW3NvcnRlZFRyYW5zaXRpb25JbmRl
eF07Ci0gICAgICAgICAgICBpZiAobmV4dENoYXIgPT0gcmFuZ2VFbmQrMSkgewotICAgICAgICAg
ICAgICAgIHJhbmdlRW5kID0gbmV4dENoYXI7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludFJhbmdlKGZpcnN0LCByYW5nZVN0YXJ0LCBy
YW5nZUVuZCwgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpOwotICAgICAgICAgICAgcmFuZ2VT
dGFydCA9IHJhbmdlRW5kID0gbmV4dENoYXI7Ci0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIHByaW50UmFuZ2UoZmlyc3QsIHJhbmdlU3RhcnQsIHJhbmdlRW5k
LCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rlcik7Ci0KLSAgICAgICAgZGF0YUxvZ0YoIlwiXTtc
biIpOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgdGFyZ2V0T25BbnlDaGFyYWN0ZXIgOiBu
b2RlLnRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAg
ICVkIC0+ICVkIFtsYWJlbD1cIlthbnkgaW5wdXRdXCJdO1xuIiwgc291cmNlTm9kZSwgdGFyZ2V0
T25BbnlDaGFyYWN0ZXIpOwotfQotCiB2b2lkIE5GQTo6ZGVidWdQcmludERvdCgpIGNvbnN0CiB7
CiAgICAgZGF0YUxvZ0YoImRpZ3JhcGggTkZBX1RyYW5zaXRpb25zIHtcbiIpOwogICAgIGRhdGFM
b2dGKCIgICAgcmFua2Rpcj1MUjtcbiIpOwogICAgIGRhdGFMb2dGKCIgICAgbm9kZSBbc2hhcGU9
Y2lyY2xlXTtcbiIpOwogICAgIGRhdGFMb2dGKCIgICAge1xuIik7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgpOyArK2kpIHsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkYXRhTG9nRigiICAgICAg
ICAgJWQgW2xhYmVsPTxOb2RlICVkIiwgaSwgaSk7CiAKLSAgICAgICAgY29uc3QgQWN0aW9uTGlz
dCYgZmluYWxSdWxlcyA9IG1fbm9kZXNbaV0uZmluYWxSdWxlSWRzOwotICAgICAgICBpZiAoIWZp
bmFsUnVsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBub2Rlc1tp
XTsKKworICAgICAgICBpZiAobm9kZS5hY3Rpb25TdGFydCAhPSBub2RlLmFjdGlvbkVuZCkgewog
ICAgICAgICAgICAgZGF0YUxvZ0YoIjxCUi8+KEZpbmFsOiAiKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgcnVsZUluZGV4ID0gMDsgcnVsZUluZGV4IDwgZmluYWxSdWxlcy5zaXplKCk7ICsr
cnVsZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1bGVJbmRleCkKKyAgICAgICAgICAg
IGJvb2wgaXNGaXJzdCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFjdGlvbklu
ZGV4ID0gbm9kZS5hY3Rpb25TdGFydDsgYWN0aW9uSW5kZXggPCBub2RlLmFjdGlvbkVuZDsgKyth
Y3Rpb25JbmRleCkgeworICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdCkKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiwgIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiVsbHUi
LCBmaW5hbFJ1bGVzW3J1bGVJbmRleF0pOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIlbGx1
IiwgYWN0aW9uc1thY3Rpb25JbmRleF0pOworICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxz
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRhdGFMb2dGKCIpIik7CiAgICAgICAgIH0K
LQogICAgICAgICBkYXRhTG9nRigiPl0iKTsKIAotICAgICAgICBpZiAoIWZpbmFsUnVsZXMuaXNF
bXB0eSgpKQorICAgICAgICBpZiAobm9kZS5hY3Rpb25TdGFydCAhPSBub2RlLmFjdGlvbkVuZCkK
ICAgICAgICAgICAgIGRhdGFMb2dGKCIgW3NoYXBlPWRvdWJsZWNpcmNsZV0iKTsKLQogICAgICAg
ICBkYXRhTG9nRigiO1xuIik7CiAgICAgfQogICAgIGRhdGFMb2dGKCIgICAgfVxuIik7CiAKICAg
ICBkYXRhTG9nRigiICAgIHtcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25v
ZGVzLnNpemUoKTsgKytpKQotICAgICAgICBwcmludFRyYW5zaXRpb25zKG1fbm9kZXMsIGksIGVw
c2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgYXV0byYgbm9kZSA9IG5vZGVzW2ld
OworCisgICAgICAgIEhhc2hNYXA8dWludDMyX3QsIFZlY3Rvcjx1aW50MzJfdD4sIERlZmF1bHRI
YXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
bnNpZ25lZD4+IHRyYW5zaXRpb25zUGVyVGFyZ2V0OworCisgICAgICAgIGZvciAodWludDMyX3Qg
dHJhbnNpdGlvbkluZGV4ID0gbm9kZS5yYW5nZXNTdGFydDsgdHJhbnNpdGlvbkluZGV4IDwgbm9k
ZS5yYW5nZXNFbmQ7ICsrdHJhbnNpdGlvbkluZGV4KSB7CisgICAgICAgICAgICBjb25zdCBJbW11
dGFibGVDaGFyUmFuZ2UmIHJhbmdlID0gdHJhbnNpdGlvbnNbdHJhbnNpdGlvbkluZGV4XTsKKyAg
ICAgICAgICAgIGZvciAodWludDMyX3QgdGFyZ2V0SW5kZXggPSByYW5nZS50YXJnZXRTdGFydDsg
dGFyZ2V0SW5kZXggPCByYW5nZS50YXJnZXRFbmQ7ICsrdGFyZ2V0SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICB1aW50MzJfdCB0YXJnZXQgPSB0YXJnZXRzW3RhcmdldEluZGV4XTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IHRyYW5zaXRpb25zUGVyVGFyZ2V0LmFkZCh0YXJnZXQs
IFZlY3Rvcjx1aW50MzJfdD4oKSk7CisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQodHJhbnNpdGlvbkluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc2xvdCA6IHRyYW5zaXRpb25zUGVyVGFyZ2V0
KSB7CisgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAlZCAtPiAlZCBbbGFiZWw9XCIiLCBp
LCBzbG90LmtleSk7CisKKyAgICAgICAgICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CisgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IHJhbmdlSW5kZXggOiBzbG90LnZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc0ZpcnN0KQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiLCAiKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZUNoYXJSYW5nZSYgcmFuZ2UgPSB0
cmFuc2l0aW9uc1tyYW5nZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZmlyc3Qg
PT0gcmFuZ2UubGFzdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSVByaW50YWJs
ZShyYW5nZS5maXJzdCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIlYyIsIHJhbmdl
LmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiJWQiLCByYW5nZS5maXJzdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlQcmludGFibGUocmFuZ2UuZmlyc3QpICYmIGlz
QVNDSUlQcmludGFibGUocmFuZ2UubGFzdCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIlYy0lYyIsIHJhbmdlLmZpcnN0LCByYW5nZS5sYXN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQtJWQiLCByYW5nZS5maXJzdCwg
cmFuZ2UubGFzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGF0YUxvZ0YoIlwiXVxuIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQzMl90
IGVwc2lsb25UYXJnZXRJbmRleCA9IG5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzU3RhcnQ7
IGVwc2lsb25UYXJnZXRJbmRleCA8IG5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzRW5kOyAr
K2Vwc2lsb25UYXJnZXRJbmRleCkgeworICAgICAgICAgICAgdWludDMyX3QgdGFyZ2V0ID0gZXBz
aWxvblRyYW5zaXRpb25zVGFyZ2V0c1tlcHNpbG9uVGFyZ2V0SW5kZXhdOworICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgJWQgLT4gJWQgW2xhYmVsPVwiyZtcIl1cbiIsIGksIHRhcmdldCk7
CisgICAgICAgIH0KKyAgICB9CisKICAgICBkYXRhTG9nRigiICAgIH1cbiIpOwogICAgIGRhdGFM
b2dGKCJ9XG4iKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaCBi
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCmluZGV4IDRlNGMyMjg1YmZm
NzE2NDdmOGEzOGU1MTg1NDQxNTVkMWRlMmM5ZmQuLjkxNGVkMWVhZmFlMmMzNWQ0NzI5MGFiNGNk
MjRmNzQwMzk2Y2E2NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1
ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlTkZB
Tm9kZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJORkFOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC0zNiw0MiArMzcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3Bh
Y2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1jbGFzcyBORkFUb0RGQTsKLQotLy8gVGhlIE5GQSBw
cm92aWRlcyBhIHdheSB0byBidWlsZCBhIE5GQSBncmFwaCB3aXRoIGNoYXJhY3RlcnMgb3IgZXBz
aWxvbiBhcyB0cmFuc2l0aW9ucy4KLS8vIFRoZSBub2RlcyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBh
biBpZGVudGlmaWVyLgotY2xhc3MgTkZBIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBO
RkEoKTsKLSAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAg
dW5zaWduZWQgY3JlYXRlTm9kZSgpOwotCi0gICAgdm9pZCBhZGRUcmFuc2l0aW9uKHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvLCBjaGFyIGNoYXJhY3Rlcik7Ci0gICAgdm9pZCBhZGRFcHNpbG9u
VHJhbnNpdGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7Ci0gICAgdm9pZCBhZGRUcmFu
c2l0aW9uc09uQW55Q2hhcmFjdGVyKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLSAgICB2
b2lkIHNldEFjdGlvbnModW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rp
b25zKTsKLQotICAgIHVuc2lnbmVkIGdyYXBoU2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgcmVzdG9y
ZVRvR3JhcGhTaXplKHVuc2lnbmVkKTsKLQotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9N
QUNISU5FX0RFQlVHR0lORwotICAgIHZvaWQgYWRkUnVsZUlkKHVuc2lnbmVkIG5vZGUsIGNvbnN0
IEFjdGlvbkxpc3QmIHJ1bGVJZHMpOwordHlwZWRlZiBJbW11dGFibGVSYW5nZTxjaGFyPiBJbW11
dGFibGVDaGFyUmFuZ2U7Cit0eXBlZGVmIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyPGNoYXIsIHVp
bnQ2NF90PiBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXI7CiAKK3N0cnVjdCBORkEgOiBwdWJs
aWMgSW1tdXRhYmxlTkZBPGNoYXIsIHVpbnQ2NF90PiB7CiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90
KCkgY29uc3Q7Ci0jZWxzZQotICAgIHZvaWQgYWRkUnVsZUlkKHVuc2lnbmVkLCB1aW50NjRfdCkg
eyB9Ci0jZW5kaWYKLSNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5H
Ci0gICAgc2l6ZV90IG1lbW9yeVVzZWQoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBORkFUb0RGQTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlcHNp
bG9uVHJhbnNpdGlvbkNoYXJhY3RlciA9IDI1NjsKLQotICAgIFZlY3RvcjxORkFOb2RlPiBtX25v
ZGVzOwotICAgIHVuc2lnbmVkIG1fcm9vdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL05GQU5vZGUuaAppbmRleCA4Y2RhYzI5YmZlZDlhNTMxN2U3NDViZjJmYjE2
YzUwNTYwNTY5NTY3Li42ZjQzYzM4ZjQxMzQyMjBiNTgxOTY2MjMyNjIzNjc1Y2ZiYjkzZmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oCkBAIC00NSw3ICs0
NSw3IEBAIHR5cGVkZWYgSGFzaE1hcDx1aW50MTZfdCwgTkZBTm9kZUluZGV4U2V0LCBEZWZhdWx0
SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5zCiAKIGNsYXNzIE5GQU5vZGUgewogcHVibGlj
OgotICAgIEhhc2hNYXA8dWludDE2X3QsIE5GQU5vZGVJbmRleFNldCwgRGVmYXVsdEhhc2g8dWlu
dDE2X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQxNl90
Pj4gdHJhbnNpdGlvbnM7CisgICAgTkZBTm9kZVRyYW5zaXRpb25zIHRyYW5zaXRpb25zOwogICAg
IE5GQU5vZGVJbmRleFNldCB0cmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyOwogCiAgICAgQWN0aW9u
TGlzdCBmaW5hbFJ1bGVJZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ORkFUb0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9O
RkFUb0RGQS5jcHAKaW5kZXggOTQ1ZjU2YTBjN2UwYmFiZWI2ZWNjNzA3NjM2NjRiZjRiYTZhNDFi
Zi4uNmEyYjNlNDAxOTFmYzc1NTcwMjVjMzM4YzkyY2VhYzQ5M2VlMDZiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcApAQCAtMzAsNiArMzAsOCBA
QAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKICNpbmNsdWRlICJE
RkFOb2RlLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxlTkZBLmgiCisjaW5jbHVkZSAiTXV0YWJsZVJh
bmdlTGlzdC5oIgogI2luY2x1ZGUgIk5GQS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM5LDUzICs0MSw0OCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKK3R5cGVkZWYgTXV0YWJs
ZVJhbmdlPGNoYXIsIE5GQU5vZGVJbmRleFNldD4gTkZBTm9kZVJhbmdlOwordHlwZWRlZiBNdXRh
YmxlUmFuZ2VMaXN0PGNoYXIsIE5GQU5vZGVJbmRleFNldD4gTkZBTm9kZVJhbmdlTGlzdDsKK3R5
cGVkZWYgTXV0YWJsZVJhbmdlTGlzdDxjaGFyLCBORkFOb2RlSW5kZXhTZXQsIDEyOD4gUHJlYWxs
b2NhdGVkTkZBTm9kZVJhbmdlTGlzdDsKKwogLy8gRklYTUU6IHNldCBhIGJldHRlciBpbml0aWFs
IHNpemUuCiAvLyBGSVhNRTogaW5jbHVkZSB0aGUgaGFzaCBpbnNpZGUgTm9kZUlkU2V0LgogdHlw
ZWRlZiBORkFOb2RlSW5kZXhTZXQgTm9kZUlkU2V0OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZXBz
aWxvbkNsb3N1cmVFeGNsdWRpbmdTZWxmKGNvbnN0IFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGgs
IHVuc2lnbmVkIG5vZGVJZCwgdW5zaWduZWQgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIsIFZl
Y3Rvcjx1bnNpZ25lZD4mIG91dHB1dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcHNpbG9uQ2xvc3Vy
ZUV4Y2x1ZGluZ1NlbGYoTkZBJiBuZmEsIHVuc2lnbmVkIG5vZGVJZCwgVmVjdG9yPHVuc2lnbmVk
PiYgb3V0cHV0KQogewotICAgIGNvbnN0IGF1dG8mIHRyYW5zaXRpb25zID0gbmZhR3JhcGhbbm9k
ZUlkXS50cmFuc2l0aW9uczsKLSAgICBhdXRvIGVwc2lsb25UcmFuc2l0aW9uU2xvdCA9IHRyYW5z
aXRpb25zLmZpbmQoZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpOwotCi0gICAgaWYgKGVwc2ls
b25UcmFuc2l0aW9uU2xvdCA9PSB0cmFuc2l0aW9ucy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgTm9kZUlkU2V0IGNsb3N1cmUoeyBub2RlSWQgfSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVk
LCA2ND4gdW5wcm9jZXNzZWROb2RlczsKLSAgICBjb3B5VG9WZWN0b3IoZXBzaWxvblRyYW5zaXRp
b25TbG90LT52YWx1ZSwgdW5wcm9jZXNzZWROb2Rlcyk7Ci0gICAgY2xvc3VyZS5hZGQodW5wcm9j
ZXNzZWROb2Rlcy5iZWdpbigpLCB1bnByb2Nlc3NlZE5vZGVzLmVuZCgpKTsKLSAgICBvdXRwdXQg
PSB1bnByb2Nlc3NlZE5vZGVzOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgNjQ+IHVucHJvY2Vzc2Vk
Tm9kZXMoeyBub2RlSWQgfSk7CiAKICAgICBkbyB7CiAgICAgICAgIHVuc2lnbmVkIHVucHJvY2Vz
c2VkTm9kZUlkID0gdW5wcm9jZXNzZWROb2Rlcy50YWtlTGFzdCgpOwotICAgICAgICBjb25zdCBO
RkFOb2RlJiBub2RlID0gbmZhR3JhcGhbdW5wcm9jZXNzZWROb2RlSWRdOwotICAgICAgICBhdXRv
IGVwc2lsb25UcmFuc2l0aW9uU2xvdCA9IG5vZGUudHJhbnNpdGlvbnMuZmluZChlcHNpbG9uVHJh
bnNpdGlvbkNoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChlcHNpbG9uVHJhbnNpdGlvblNsb3QgIT0g
bm9kZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0YXJn
ZXROb2RlSWQgOiBlcHNpbG9uVHJhbnNpdGlvblNsb3QtPnZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBjbG9zdXJlLmFkZCh0YXJnZXROb2RlSWQpOwotICAgICAgICAg
ICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICB1
bnByb2Nlc3NlZE5vZGVzLmFwcGVuZCh0YXJnZXROb2RlSWQpOwotICAgICAgICAgICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKHRhcmdldE5vZGVJZCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICBjb25zdCBhdXRvJiBub2RlID0gbmZhLm5vZGVzW3VucHJvY2Vzc2VkTm9kZUlkXTsKKworICAg
ICAgICBmb3IgKHVpbnQzMl90IGVwc2lsb25UYXJnZXRJbmRleCA9IG5vZGUuZXBzaWxvblRyYW5z
aXRpb25UYXJnZXRzU3RhcnQ7IGVwc2lsb25UYXJnZXRJbmRleCA8IG5vZGUuZXBzaWxvblRyYW5z
aXRpb25UYXJnZXRzRW5kOyArK2Vwc2lsb25UYXJnZXRJbmRleCkgeworICAgICAgICAgICAgdWlu
dDMyX3QgdGFyZ2V0Tm9kZUlkID0gbmZhLmVwc2lsb25UcmFuc2l0aW9uc1RhcmdldHNbZXBzaWxv
blRhcmdldEluZGV4XTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gY2xvc3VyZS5hZGQo
dGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewor
ICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkTm9kZXMuYXBwZW5kKHRhcmdldE5vZGVJZCk7Cisg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh0YXJnZXROb2RlSWQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfSB3aGlsZSAoIXVucHJvY2Vzc2VkTm9kZXMuaXNFbXB0eSgpKTsK
KworICAgIG91dHB1dC5zaHJpbmtUb0ZpdCgpOwogfQogCi1zdGF0aWMgdm9pZCByZXNvbHZlRXBz
aWxvbkNsb3N1cmVzKFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGgsIHVuc2lnbmVkIGVwc2lsb25U
cmFuc2l0aW9uQ2hhcmFjdGVyLCBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4mIG5mYU5vZGVDbG9z
dXJlcykKK3N0YXRpYyB2b2lkIHJlc29sdmVFcHNpbG9uQ2xvc3VyZXMoTkZBJiBuZmEsIFZlY3Rv
cjxWZWN0b3I8dW5zaWduZWQ+PiYgbmZhTm9kZUNsb3N1cmVzKQogewotICAgIHVuc2lnbmVkIG5m
YUdyYXBoU2l6ZSA9IG5mYUdyYXBoLnNpemUoKTsKKyAgICB1bnNpZ25lZCBuZmFHcmFwaFNpemUg
PSBuZmEubm9kZXMuc2l6ZSgpOwogICAgIG5mYU5vZGVDbG9zdXJlcy5yZXNpemUobmZhR3JhcGhT
aXplKTsKKwogICAgIGZvciAodW5zaWduZWQgbm9kZUlkID0gMDsgbm9kZUlkIDwgbmZhR3JhcGhT
aXplOyArK25vZGVJZCkKLSAgICAgICAgZXBzaWxvbkNsb3N1cmVFeGNsdWRpbmdTZWxmKG5mYUdy
YXBoLCBub2RlSWQsIGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyLCBuZmFOb2RlQ2xvc3VyZXNb
bm9kZUlkXSk7CisgICAgICAgIGVwc2lsb25DbG9zdXJlRXhjbHVkaW5nU2VsZihuZmEsIG5vZGVJ
ZCwgbmZhTm9kZUNsb3N1cmVzW25vZGVJZF0pOwogCi0gICAgZm9yICh1bnNpZ25lZCBub2RlSWQg
PSAwOyBub2RlSWQgPCBuZmFHcmFwaFNpemU7ICsrbm9kZUlkKSB7Ci0gICAgICAgIGlmICghbmZh
Tm9kZUNsb3N1cmVzW25vZGVJZF0uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBib29sIGVwc2ls
b25UcmFuc2l0aW9uSXNSZW1vdmVkID0gbmZhR3JhcGhbbm9kZUlkXS50cmFuc2l0aW9ucy5yZW1v
dmUoZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChlcHNpbG9uVHJhbnNpdGlvbklzUmVtb3ZlZCwgZXBzaWxvblRyYW5zaXRpb25Jc1JlbW92ZWQp
OwotICAgICAgICB9Ci0gICAgfQorICAgIC8vIEV2ZXJ5IG5vZGVzIHN0aWxsIHBvaW50IHRvIHRo
YXQgdGFibGUsIGJ1dCB3ZSB3b24ndCB1c2UgaXQgZXZlciBhZ2Fpbi4KKyAgICAvLyBDbGVhciBp
dCB0byBnZXQgYmFjayB0aGUgbWVtb3J5LiBUaGF0J3Mgbm90IHByZXR0eSBidXQgbWVtb3J5IGlz
IGltcG9ydGFudCBoZXJlLCB3ZSBoYXZlIGJvdGgKKyAgICAvLyBncmFwaHMgZXhpc3RpbmcgYXQg
dGhlIHNhbWUgdGltZS4KKyAgICBuZmEuZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0cy5jbGVhcigp
OwogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGV4dGVuZFNldFdpdGhDbG9zdXJlKGNv
bnN0IFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiYgbmZhTm9kZUNsb3N1cmVzLCB1bnNpZ25lZCBu
b2RlSWQsIE5vZGVJZFNldCYgc2V0KQpAQCAtMjE0LDkgKzIxMSw5IEBAIHN0cnVjdCBVbmlxdWVO
b2RlSWRTZXRIYXNoSGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OkN1c3RvbUhhc2hUcmFpdHM8VW5p
cXVlTm9kZUlkCiB0eXBlZGVmIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPFVuaXF1ZU5vZGVJZFNl
dD4sIFVuaXF1ZU5vZGVJZFNldEhhc2gsIFVuaXF1ZU5vZGVJZFNldEhhc2hIYXNoVHJhaXRzPiBV
bmlxdWVOb2RlSWRTZXRUYWJsZTsKIAogc3RydWN0IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0
U291cmNlIHsKLSAgICBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZShERkEmIGRmYSwg
Y29uc3QgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCwgY29uc3QgTm9kZUlkU2V0JiBub2RlSWRT
ZXQpCisgICAgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UoREZBJiBkZmEsIGNvbnN0
IE5GQSYgbmZhLCBjb25zdCBOb2RlSWRTZXQmIG5vZGVJZFNldCkKICAgICAgICAgOiBkZmEoZGZh
KQotICAgICAgICAsIG5mYUdyYXBoKG5mYUdyYXBoKQorICAgICAgICAsIG5mYShuZmEpCiAgICAg
ICAgICwgbm9kZUlkU2V0KG5vZGVJZFNldCkKICAgICB7CiAgICAgICAgIC8vIFRoZSBoYXNoaW5n
IG9wZXJhdGlvbiBtdXN0IGJlIGluZGVwZW5kYW50IG9mIHRoZSBub2RlSWQuCkBAIC0yMjYsNyAr
MjIzLDcgQEAgc3RydWN0IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlIHsKICAgICAg
ICAgdGhpcy0+aGFzaCA9IERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaDo6aGFzaChoYXNoKTsK
ICAgICB9CiAgICAgREZBJiBkZmE7Ci0gICAgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFw
aDsKKyAgICBjb25zdCBORkEmIG5mYTsKICAgICBjb25zdCBOb2RlSWRTZXQmIG5vZGVJZFNldDsK
ICAgICB1bnNpZ25lZCBoYXNoOwogfTsKQEAgLTI0NywxNCArMjQ0LDEzIEBAIHN0cnVjdCBOb2Rl
SWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3IgewogICAgICAgICBERkFOb2RlIG5ld0RG
QU5vZGU7CiAKICAgICAgICAgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8dWludDY0X3Q+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4gYWN0
aW9uczsKKwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5mYU5vZGVJZCA6IHNvdXJjZS5ub2RlSWRT
ZXQpIHsKLSAgICAgICAgICAgIGNvbnN0IE5GQU5vZGUmIG5mYU5vZGUgPSBzb3VyY2UubmZhR3Jh
cGhbbmZhTm9kZUlkXTsKLSAgICAgICAgICAgIGFjdGlvbnMuYWRkKG5mYU5vZGUuZmluYWxSdWxl
SWRzLmJlZ2luKCksIG5mYU5vZGUuZmluYWxSdWxlSWRzLmVuZCgpKTsKLSNpZiBDT05URU5UX0VY
VEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLSAgICAgICAgICAgIG5ld0RGQU5vZGUu
Y29ycmVzcG9uZGluZ05GQU5vZGVzLmFwcGVuZChuZmFOb2RlSWQpOwotI2VuZGlmCisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBuZmFOb2RlID0gc291cmNlLm5mYS5ub2Rlc1tuZmFOb2RlSWRdOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhY3Rpb25JbmRleCA9IG5mYU5vZGUuYWN0aW9uU3Rh
cnQ7IGFjdGlvbkluZGV4IDwgbmZhTm9kZS5hY3Rpb25FbmQ7ICsrYWN0aW9uSW5kZXgpCisgICAg
ICAgICAgICAgICAgYWN0aW9ucy5hZGQoc291cmNlLm5mYS5hY3Rpb25zW2FjdGlvbkluZGV4XSk7
CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgYWN0aW9uc1N0YXJ0ID0g
c291cmNlLmRmYS5hY3Rpb25zLnNpemUoKTsKICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24g
OiBhY3Rpb25zKQogICAgICAgICAgICAgc291cmNlLmRmYS5hY3Rpb25zLmFwcGVuZChhY3Rpb24p
OwpAQCAtMjk4LDQ2ICsyOTQsMTE4IEBAIHByaXZhdGU6CiAgICAgTm9kZUlkU2V0IG1fdGFyZ2V0
c1sxMjhdOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIHBvcHVsYXRlVHJhbnNpdGlvbnMoU2V0
VHJhbnNpdGlvbnMmIHNldFRyYW5zaXRpb25zLCBOb2RlSWRTZXQmIHNldEZhbGxiYWNrVHJhbnNp
dGlvbiwgY29uc3QgVW5pcXVlTm9kZUlkU2V0SW1wbCYgc291cmNlTm9kZVNldCwgY29uc3QgVmVj
dG9yPE5GQU5vZGU+JiBncmFwaCwgY29uc3QgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+JiBuZmFO
b2RlY2xvc3VyZXMpCitzdHJ1Y3QgRGF0YUNvbnZlcnRlcldpdGhFcHNpbG9uQ2xvc3VyZSB7Cisg
ICAgY29uc3QgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+JiBuZmFOb2RlY2xvc3VyZXM7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICBORkFOb2RlSW5kZXhTZXQgY29udmVy
dChjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBORkFOb2RlSW5kZXhT
ZXQgcmVzdWx0OworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJZCA6IGl0ZXJhYmxlKSB7Cisg
ICAgICAgICAgICByZXN1bHQuYWRkKG5vZGVJZCk7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8
dW5zaWduZWQ+JiBub2RlQ2xvc3VyZSA9IG5mYU5vZGVjbG9zdXJlc1tub2RlSWRdOworICAgICAg
ICAgICAgcmVzdWx0LmFkZChub2RlQ2xvc3VyZS5iZWdpbigpLCBub2RlQ2xvc3VyZS5lbmQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICB2b2lkIGV4dGVuZChORkFOb2RlSW5kZXhTZXQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJdGVyYWJsZSYgaXRlcmFibGUpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJZCA6IGl0ZXJhYmxlKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGRlc3RpbmF0aW9uLmFkZChub2RlSWQpOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgbm9k
ZUNsb3N1cmUgPSBuZmFOb2RlY2xvc3VyZXNbbm9kZUlkXTsKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvbi5hZGQobm9kZUNsb3N1cmUuYmVnaW4oKSwgbm9kZUNsb3N1cmUuZW5kKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNy
ZWF0ZUNvbWJpbmVkVHJhbnNpdGlvbihQcmVhbGxvY2F0ZWRORkFOb2RlUmFuZ2VMaXN0JiBjb21i
aW5lZFJhbmdlTGlzdCwgY29uc3QgVW5pcXVlTm9kZUlkU2V0SW1wbCYgc291cmNlTm9kZVNldCwg
Y29uc3QgTkZBJiBpbW11dGFibGVORkEsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiYg
bmZhTm9kZWNsb3N1cmVzKQogewotICAgIEFTU0VSVCghZ3JhcGguaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQoc2V0RmFsbGJhY2tUcmFuc2l0aW9uLmlzRW1wdHkoKSk7Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGZvciAoY29uc3QgTm9kZUlkU2V0JiBzZXQgOiBzZXRUcmFuc2l0aW9ucykKLSAg
ICAgICAgQVNTRVJUKHNldC5pc0VtcHR5KCkpOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dW5zaWdu
ZWQsIDg+IGFsbEZhbGxiYWNrVHJhbnNpdGlvbnM7CisgICAgY29tYmluZWRSYW5nZUxpc3QuY2xl
YXIoKTsKKwogICAgIGNvbnN0IHVuc2lnbmVkKiBidWZmZXIgPSBzb3VyY2VOb2RlU2V0LmJ1ZmZl
cigpOworCisgICAgRGF0YUNvbnZlcnRlcldpdGhFcHNpbG9uQ2xvc3VyZSBjb252ZXJ0ZXIgeyBu
ZmFOb2RlY2xvc3VyZXMgfTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTm9k
ZVNldC5tX3NpemU7ICsraSkgewogICAgICAgICB1bnNpZ25lZCBub2RlSWQgPSBidWZmZXJbaV07
Ci0gICAgICAgIGNvbnN0IE5GQU5vZGUmIG5mYVNvdXJjZU5vZGUgPSBncmFwaFtub2RlSWRdOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRhcmdldFRyYW5zaXRpb24gOiBuZmFTb3VyY2VOb2RlLnRy
YW5zaXRpb25zT25BbnlDaGFyYWN0ZXIpCi0gICAgICAgICAgICBhbGxGYWxsYmFja1RyYW5zaXRp
b25zLmFwcGVuZCh0YXJnZXRUcmFuc2l0aW9uKTsKKyAgICAgICAgYXV0byB0cmFuc2l0aW9ucyA9
IGltbXV0YWJsZU5GQS50cmFuc2l0aW9uc0Zvck5vZGUobm9kZUlkKTsKKyAgICAgICAgY29tYmlu
ZWRSYW5nZUxpc3QuZXh0ZW5kKHRyYW5zaXRpb25zLmJlZ2luKCksIHRyYW5zaXRpb25zLmVuZCgp
LCBjb252ZXJ0ZXIpOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIHRhcmdldE5vZGVJZCA6IGFs
bEZhbGxiYWNrVHJhbnNpdGlvbnMpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBzZXRGYWxs
YmFja1RyYW5zaXRpb24uYWRkKHRhcmdldE5vZGVJZCk7Ci0gICAgICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgIGV4dGVuZFNldFdpdGhDbG9zdXJlKG5mYU5vZGVjbG9z
dXJlcywgdGFyZ2V0Tm9kZUlkLCBzZXRGYWxsYmFja1RyYW5zaXRpb24pOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKGNvbnN0IFByZWFsbG9jYXRlZE5G
QU5vZGVSYW5nZUxpc3QmIHJhbmdlTGlzdCkKK3sKKyAgICAvLyBUcmFuc2l0aW9ucyBjYW4gY29u
dGFpbnMgIjAiIGlmIHRoZSBleHByZXNzaW9uIGhhcyBhIGVuZC1vZi1saW5lIG1hcmtlci4KKyAg
ICAvLyBGYWxsYmFjayB0cmFuc2l0aW9ucyBjb3ZlciAxLTEyNy4gV2UgaGF2ZSB0byBiZSBjYXJl
ZnVsIHdpdGggdGhlIGZpcnN0LgorCisgICAgYXV0byBpdGVyYXRvciA9IHJhbmdlTGlzdC5iZWdp
bigpOworICAgIGF1dG8gZW5kID0gcmFuZ2VMaXN0LmVuZCgpOworICAgIGlmIChpdGVyYXRvciA9
PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIgbGFzdFNlZW5DaGFyYWN0
ZXIgPSAwOworICAgIGlmICghaXRlcmF0b3ItPmZpcnN0KSB7CisgICAgICAgIGxhc3RTZWVuQ2hh
cmFjdGVyID0gaXRlcmF0b3ItPmxhc3Q7CisgICAgICAgIGlmIChsYXN0U2VlbkNoYXJhY3RlciA9
PSAxMjcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgKytpdGVyYXRvcjsKICAg
ICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTm9kZVNldC5tX3NpemU7
ICsraSkgewotICAgICAgICB1bnNpZ25lZCBub2RlSWQgPSBidWZmZXJbaV07Ci0gICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdHJhbnNpdGlvblNsb3QgOiBncmFwaFtub2RlSWRdLnRyYW5zaXRpb25z
KSB7Ci0gICAgICAgICAgICBOb2RlSWRTZXQmIHRhcmdldFNldCA9IHNldFRyYW5zaXRpb25zW3Ry
YW5zaXRpb25TbG90LmtleV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRhcmdldE5vZElk
IDogdHJhbnNpdGlvblNsb3QudmFsdWUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTZXQuYWRk
KHRhcmdldE5vZElkKTsKLSAgICAgICAgICAgICAgICBleHRlbmRTZXRXaXRoQ2xvc3VyZShuZmFO
b2RlY2xvc3VyZXMsIHRhcmdldE5vZElkLCB0YXJnZXRTZXQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHRyYW5zaXRpb25TbG90LmtleSkKLSAgICAgICAgICAgICAgICB0YXJnZXRT
ZXQuYWRkKHNldEZhbGxiYWNrVHJhbnNpdGlvbi5iZWdpbigpLCBzZXRGYWxsYmFja1RyYW5zaXRp
b24uZW5kKCkpOworICAgIGZvciAoO2l0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikgeworICAg
ICAgICBBU1NFUlQoaXRlcmF0b3ItPmZpcnN0ID4gbGFzdFNlZW5DaGFyYWN0ZXIpOworICAgICAg
ICBpZiAoaXRlcmF0b3ItPmZpcnN0ICE9IGxhc3RTZWVuQ2hhcmFjdGVyICsgMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaXRlcmF0b3ItPmxhc3QgPT0gMTI3KQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGxhc3RTZWVuQ2hhcmFjdGVyID0gaXRl
cmF0b3ItPmxhc3Q7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGlu
ZSB1aW50MzJfdCBmaW5kQmVzdEZhbGxiYWNrVGFyZ2V0KGNvbnN0IFByZWFsbG9jYXRlZE5GQU5v
ZGVSYW5nZUxpc3QmIHJhbmdlTGlzdCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxMjg+JiByYW5n
ZVRvVGFyZ2V0KQoreworICAgIEFTU0VSVChjYW5Vc2VGYWxsYmFja1RyYW5zaXRpb24ocmFuZ2VM
aXN0KSk7CisKKyAgICBIYXNoTWFwPHVpbnQzMl90LCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dWlu
dDMyX3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90
Pj4gaGlzdG9ncmFtOworCisgICAgdW5zaWduZWQgcmFuZ2VUb1RhcmdldEluZGV4ID0gMDsKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gcmFuZ2VMaXN0LmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSByYW5n
ZUxpc3QuZW5kKCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyYXRvciAhPSBlbmQsICJB
biBlbXB0eSByYW5nZSBsaXN0IGNhbm5vdCB1c2UgYSBmYWxsYmFjayB0cmFuc2l0aW9uLiIpOwor
CisgICAgaWYgKCFpdGVyYXRvci0+Zmlyc3QgJiYgIWl0ZXJhdG9yLT5sYXN0KSB7CisgICAgICAg
ICsraXRlcmF0b3I7CisgICAgICAgICsrcmFuZ2VUb1RhcmdldEluZGV4OworICAgIH0KKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXJhdG9yICE9IGVuZCwgIkFuIGVtcHR5IHJhbmdlIGxpc3Qg
bWF0Y2hpbmcgb25seSB6ZXJvIGNhbm5vdCB1c2UgYSBmYWxsYmFjayB0cmFuc2l0aW9uLiIpOwor
CisgICAgdWludDMyX3QgYmVzdFRhcmdldCA9IHJhbmdlVG9UYXJnZXRbcmFuZ2VUb1RhcmdldElu
ZGV4XTsKKyAgICB1bnNpZ25lZCBiZXN0VGFyZ2V0U2NvcmUgPSAhaXRlcmF0b3ItPmZpcnN0ID8g
aXRlcmF0b3ItPnNpemUoKSAtIDEgOiBpdGVyYXRvci0+c2l6ZSgpOworICAgIGhpc3RvZ3JhbS5h
ZGQoYmVzdFRhcmdldCwgYmVzdFRhcmdldFNjb3JlKTsKKyAgICArK2l0ZXJhdG9yOworICAgICsr
cmFuZ2VUb1RhcmdldEluZGV4OworCisgICAgZm9yICg7aXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJh
dG9yLCArK3JhbmdlVG9UYXJnZXRJbmRleCkgeworICAgICAgICB1bnNpZ25lZCByYW5nZVNpemUg
PSBpdGVyYXRvci0+c2l6ZSgpOworICAgICAgICB1aW50MzJfdCB0YXJnZXQgPSByYW5nZVRvVGFy
Z2V0W3JhbmdlVG9UYXJnZXRJbmRleF07CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gaGlzdG9n
cmFtLmFkZCh0YXJnZXQsIHJhbmdlU2l6ZSk7CisgICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IHJhbmdlU2l6
ZTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPiBiZXN0VGFyZ2V0U2Nv
cmUpIHsKKyAgICAgICAgICAgIGJlc3RUYXJnZXRTY29yZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CisgICAgICAgICAgICBiZXN0VGFyZ2V0ID0gdGFyZ2V0OwogICAgICAgICB9CiAgICAg
fQorICAgIHJldHVybiBiZXN0VGFyZ2V0OwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBnZXRPckNyZWF0ZURGQU5vZGUoY29uc3QgTm9kZUlkU2V0JiBuZmFOb2RlU2V0LCBjb25z
dCBWZWN0b3I8TkZBTm9kZT4mIG5mYUdyYXBoLCBERkEmIGRmYSwgVW5pcXVlTm9kZUlkU2V0VGFi
bGUmIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCBWZWN0b3I8VW5pcXVlTm9kZUlkU2V0SW1wbCo+JiB1
bnByb2Nlc3NlZE5vZGVzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgZ2V0T3JDcmVh
dGVERkFOb2RlKGNvbnN0IE5vZGVJZFNldCYgbmZhTm9kZVNldCwgY29uc3QgTkZBJiBuZmEsIERG
QSYgZGZhLCBVbmlxdWVOb2RlSWRTZXRUYWJsZSYgdW5pcXVlTm9kZUlkU2V0VGFibGUsIFZlY3Rv
cjxVbmlxdWVOb2RlSWRTZXRJbXBsKj4mIHVucHJvY2Vzc2VkTm9kZXMpCiB7Ci0gICAgTm9kZUlk
U2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2Ugbm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3Vy
Y2UoZGZhLCBuZmFHcmFwaCwgbmZhTm9kZVNldCk7CisgICAgTm9kZUlkU2V0VG9VbmlxdWVOb2Rl
SWRTZXRTb3VyY2Ugbm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UoZGZhLCBuZmEsIG5m
YU5vZGVTZXQpOwogICAgIGF1dG8gdW5pcXVlTm9kZUlkQWRkUmVzdWx0ID0gdW5pcXVlTm9kZUlk
U2V0VGFibGUuYWRkPE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0VHJhbnNsYXRvcj4obm9kZUlk
U2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UpOwogICAgIGlmICh1bmlxdWVOb2RlSWRBZGRSZXN1
bHQuaXNOZXdFbnRyeSkKICAgICAgICAgdW5wcm9jZXNzZWROb2Rlcy5hcHBlbmQodW5pcXVlTm9k
ZUlkQWRkUmVzdWx0Lml0ZXJhdG9yLT5pbXBsKCkpOwpAQCAtMzQ3LDYwICs0MTUsNjMgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgZ2V0T3JDcmVhdGVERkFOb2RlKGNvbnN0IE5vZGVJ
ZFNldCYgbmZhTm9kZVNldCwgY28KIAogREZBIE5GQVRvREZBOjpjb252ZXJ0KE5GQSYgbmZhKQog
ewotICAgIERGQSBkZmE7Ci0gICAgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCA9IG5mYS5tX25v
ZGVzOwotCiAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG5mYU5vZGVDbG9zdXJlczsKLSAg
ICByZXNvbHZlRXBzaWxvbkNsb3N1cmVzKG5mYUdyYXBoLCBORkE6OmVwc2lsb25UcmFuc2l0aW9u
Q2hhcmFjdGVyLCBuZmFOb2RlQ2xvc3VyZXMpOworICAgIHJlc29sdmVFcHNpbG9uQ2xvc3VyZXMo
bmZhLCBuZmFOb2RlQ2xvc3VyZXMpOworCisgICAgREZBIGRmYTsKIAogICAgIE5vZGVJZFNldCBp
bml0aWFsU2V0KHsgbmZhLnJvb3QoKSB9KTsKICAgICBleHRlbmRTZXRXaXRoQ2xvc3VyZShuZmFO
b2RlQ2xvc3VyZXMsIG5mYS5yb290KCksIGluaXRpYWxTZXQpOwogCiAgICAgVW5pcXVlTm9kZUlk
U2V0VGFibGUgdW5pcXVlTm9kZUlkU2V0VGFibGU7CiAKLSAgICBOb2RlSWRTZXRUb1VuaXF1ZU5v
ZGVJZFNldFNvdXJjZSBpbml0aWFsTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UoZGZh
LCBuZmFHcmFwaCwgaW5pdGlhbFNldCk7CisgICAgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRT
b3VyY2UgaW5pdGlhbE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKGRmYSwgbmZhLCBp
bml0aWFsU2V0KTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IHVuaXF1ZU5vZGVJZFNldFRhYmxlLmFk
ZDxOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3I+KGluaXRpYWxOb2RlSWRTZXRU
b1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk7CiAKICAgICBWZWN0b3I8VW5pcXVlTm9kZUlkU2V0SW1w
bCo+IHVucHJvY2Vzc2VkTm9kZXM7CiAgICAgdW5wcm9jZXNzZWROb2Rlcy5hcHBlbmQoYWRkUmVz
dWx0Lml0ZXJhdG9yLT5pbXBsKCkpOwogCi0gICAgU2V0VHJhbnNpdGlvbnMgdHJhbnNpdGlvbnNG
cm9tQ2xvc2VkU2V0OwotCisgICAgUHJlYWxsb2NhdGVkTkZBTm9kZVJhbmdlTGlzdCBjb21iaW5l
ZFJhbmdlTGlzdDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDEyOD4gcmFuZ2VUb1RhcmdldDsKICAg
ICBkbyB7CiAgICAgICAgIFVuaXF1ZU5vZGVJZFNldEltcGwqIHVuaXF1ZU5vZGVJZFNldEltcGwg
PSB1bnByb2Nlc3NlZE5vZGVzLnRha2VMYXN0KCk7CisgICAgICAgIGNyZWF0ZUNvbWJpbmVkVHJh
bnNpdGlvbihjb21iaW5lZFJhbmdlTGlzdCwgKnVuaXF1ZU5vZGVJZFNldEltcGwsIG5mYSwgbmZh
Tm9kZUNsb3N1cmVzKTsKIAotICAgICAgICB1bnNpZ25lZCBkZmFOb2RlSWQgPSB1bmlxdWVOb2Rl
SWRTZXRJbXBsLT5tX2RmYU5vZGVJZDsKLSAgICAgICAgTm9kZUlkU2V0IHNldEZhbGxiYWNrVHJh
bnNpdGlvbjsKLSAgICAgICAgcG9wdWxhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0Zyb21DbG9z
ZWRTZXQsIHNldEZhbGxiYWNrVHJhbnNpdGlvbiwgKnVuaXF1ZU5vZGVJZFNldEltcGwsIG5mYUdy
YXBoLCBuZmFOb2RlQ2xvc3VyZXMpOworICAgICAgICByYW5nZVRvVGFyZ2V0LmNsZWFyKCk7Cisg
ICAgICAgIGZvciAoY29uc3QgTkZBTm9kZVJhbmdlJiByYW5nZSA6IGNvbWJpbmVkUmFuZ2VMaXN0
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXROb2RlSWQgPSBnZXRPckNyZWF0ZURGQU5v
ZGUocmFuZ2UuZGF0YSwgbmZhLCBkZmEsIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCB1bnByb2Nlc3Nl
ZE5vZGVzKTsKKyAgICAgICAgICAgIHJhbmdlVG9UYXJnZXQuYXBwZW5kKHRhcmdldE5vZGVJZCk7
CisgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc1N0YXJ0ID0gZGZhLnRy
YW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKGRmYS50cmFuc2l0aW9u
Q2hhcmFjdGVycy5zaXplKCkgPT0gZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlvbnMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBrZXkgPSAwOyBrZXkgPCB0cmFuc2l0aW9uc0Zyb21DbG9z
ZWRTZXQuc2l6ZSgpOyArK2tleSkgewotICAgICAgICAgICAgTm9kZUlkU2V0JiB0YXJnZXROb2Rl
U2V0ID0gdHJhbnNpdGlvbnNGcm9tQ2xvc2VkU2V0W2tleV07CisgICAgICAgIGJvb2wgdXNlRmFs
bGJhY2tUcmFuc2l0aW9uID0gY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKGNvbWJpbmVkUmFuZ2VM
aXN0KTsKKyAgICAgICAgdWludDMyX3QgcHJlZmVyZWRGYWxsYmFja1RhcmdldCA9IDA7CisgICAg
ICAgIGlmICh1c2VGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgICAgICBwcmVmZXJlZEZhbGxi
YWNrVGFyZ2V0ID0gZmluZEJlc3RGYWxsYmFja1RhcmdldChjb21iaW5lZFJhbmdlTGlzdCwgcmFu
Z2VUb1RhcmdldCk7CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlU2V0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWduZWQgdHJhbnNpdGlvbnNT
dGFydCA9IGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVk
IHJhbmdlVG9UYXJnZXRJbmRleCA9IDA7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldE5v
ZGVJZCA9IGdldE9yQ3JlYXRlREZBTm9kZSh0YXJnZXROb2RlU2V0LCBuZmFHcmFwaCwgZGZhLCB1
bmlxdWVOb2RlSWRTZXRUYWJsZSwgdW5wcm9jZXNzZWROb2Rlcyk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChrZXkgPD0gMTI3KTsKLSAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uQ2hhcmFj
dGVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oa2V5KSk7Ci0gICAgICAgICAgICBkZmEu
dHJhbnNpdGlvbkRlc3RpbmF0aW9ucy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgZm9y
IChjb25zdCBORkFOb2RlUmFuZ2UmIHJhbmdlIDogY29tYmluZWRSYW5nZUxpc3QpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldE5vZGVJZCA9IHJhbmdlVG9UYXJnZXRbcmFuZ2VUb1Rhcmdl
dEluZGV4XTsKIAotICAgICAgICAgICAgdGFyZ2V0Tm9kZVNldC5jbGVhcigpOworICAgICAgICAg
ICAgaWYgKCEodXNlRmFsbGJhY2tUcmFuc2l0aW9uICYmIHRhcmdldE5vZGVJZCA9PSBwcmVmZXJl
ZEZhbGxiYWNrVGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJh
bmdlLmZpcnN0OyBpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5sYXN0KTsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVycy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oaSkpOworICAgICAgICAgICAgICAgICAgICBkZmEudHJhbnNpdGlv
bkRlc3RpbmF0aW9ucy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICArK3JhbmdlVG9UYXJnZXRJbmRleDsKICAgICAgICAg
fQogICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0VuZCA9IGRmYS50cmFuc2l0aW9uQ2hhcmFj
dGVycy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMuc2l6
ZSgpID09IGRmYS50cmFuc2l0aW9uRGVzdGluYXRpb25zLnNpemUoKSk7CiAgICAgICAgIHVuc2ln
bmVkIHRyYW5zaXRpb25zTGVuZ3RoID0gdHJhbnNpdGlvbnNFbmQgLSB0cmFuc2l0aW9uc1N0YXJ0
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFuc2l0aW9uc0xlbmd0aCA8PSAxMjcpOwotICAg
ICAgICBkZmEubm9kZXNbZGZhTm9kZUlkXS5zZXRUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc1N0YXJ0
LCBzdGF0aWNfY2FzdDx1aW50OF90Pih0cmFuc2l0aW9uc0xlbmd0aCkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFzZXRGYWxsYmFja1RyYW5zaXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXROb2RlSWQgPSBnZXRPckNyZWF0ZURGQU5vZGUoc2V0RmFsbGJhY2tU
cmFuc2l0aW9uLCBuZmFHcmFwaCwgZGZhLCB1bmlxdWVOb2RlSWRTZXRUYWJsZSwgdW5wcm9jZXNz
ZWROb2Rlcyk7Ci0gICAgICAgICAgICBERkFOb2RlJiBkZmFTb3VyY2VOb2RlID0gZGZhLm5vZGVz
W2RmYU5vZGVJZF07Ci0gICAgICAgICAgICBkZmFTb3VyY2VOb2RlLmFkZEZhbGxiYWNrVHJhbnNp
dGlvbihkZmEsIHRhcmdldE5vZGVJZCk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghdW5wcm9j
ZXNzZWROb2Rlcy5pc0VtcHR5KCkpOworICAgICAgICB1bnNpZ25lZCBkZmFOb2RlSWQgPSB1bmlx
dWVOb2RlSWRTZXRJbXBsLT5tX2RmYU5vZGVJZDsKKyAgICAgICAgREZBTm9kZSYgZGZhU291cmNl
Tm9kZSA9IGRmYS5ub2Rlc1tkZmFOb2RlSWRdOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHRyYW5zaXRpb25zTGVuZ3RoIDwgMTI3LCAiVHJhbnNpdGlvbnMgY292ZXJpbmcgdGhlIGVudGly
ZSBhbHBoYWJldCBzaG91bGQgdXNlIGEgZmFsbGJhY2sgdHJhbnNpdGlvbiIpOworICAgICAgICBk
ZmFTb3VyY2VOb2RlLnNldFRyYW5zaXRpb25zKHRyYW5zaXRpb25zU3RhcnQsIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHRyYW5zaXRpb25zTGVuZ3RoKSk7CiAKKyAgICAgICAgaWYgKHVzZUZhbGxiYWNr
VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGRmYVNvdXJjZU5vZGUuYWRkRmFsbGJhY2tUcmFuc2l0
aW9uKGRmYSwgcHJlZmVyZWRGYWxsYmFja1RhcmdldCk7CisgICAgfSB3aGlsZSAoIXVucHJvY2Vz
c2VkTm9kZXMuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gZGZhOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5oIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuaAppbmRleCBkMWNiMTE5YTljNzFiMTVhZWU5
NWI1ZDU3YTgyMmJmNjc3ZTBjZjcxLi44ODgyZjQyYzY2ODIwMGIzODZhM2U3MGQ5ZDFjODBiNjA3
NjJkZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFU
b0RGQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmgK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgewogCi1jbGFzcyBORkE7CitzdHJ1Y3QgTkZBOwogCiAvLyBORkFUb0RGQSBw
cm92aWRlcyBhIHdheSB0byBidWlsZCBhIERGQSBjb3JyZXNwb25kaW5nIHRvIGEgTkZBLgogY2xh
c3MgTkZBVG9ERkEgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvVGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4
IDhkMjI0NmE5ODRlODk1NjdlNjY0ZDNmZjgxYzNhM2FkNWI0NGYzNjEuLmZjOTlmNmZjNmFhNjNj
NjE3ZDcyY2QxZjBmZmRiYWYxNTgxNDY2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9UZXJtLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBxdWFudGlm
eShjb25zdCBBdG9tUXVhbnRpZmllciYpOwogCi0gICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFwaChO
RkEmLCB1bnNpZ25lZCBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rpb25zKSBjb25z
dDsKKyAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgZ2VuZXJhdGVHcmFwaChORkEmLCBJ
bW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHN0YXJ0LCBjb25zdCBBY3Rpb25MaXN0JiBmaW5h
bEFjdGlvbnMpIGNvbnN0OwogCiAgICAgYm9vbCBpc0VuZE9mTGluZUFzc2VydGlvbigpIGNvbnN0
OwogCkBAIC0xMTgsNyArMTE4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcmV0dXJuIHZhbHVl
IGNhbiBiZSBmYWxzZSBmb3IgYSBncm91cCBlcXVpdmFsZW50IHRvIGEgdW5pdmVyc2FsIHRyYW5z
aXRpb24uCiAgICAgYm9vbCBpc1VuaXZlcnNhbFRyYW5zaXRpb24oKSBjb25zdDsKIAotICAgIHVu
c2lnbmVkIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYsIHVuc2lnbmVkIHNvdXJjZSkgY29u
c3Q7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlU3ViZ3JhcGhGb3JB
dG9tKE5GQSYsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlKSBjb25zdDsKIAog
ICAgIHZvaWQgZGVzdHJveSgpOwogCkBAIC0yODYsNyArMjg2LDcgQEAgaW5saW5lIFRlcm06OlRl
cm0oVW5pdmVyc2FsVHJhbnNpdGlvblRhZykKICAgICA6IG1fdGVybVR5cGUoVGVybVR5cGU6OkNo
YXJhY3RlclNldCkKIHsKICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21EYXRhLmNoYXJhY3RlclNl
dCkgQ2hhcmFjdGVyU2V0KCk7Ci0gICAgZm9yIChVQ2hhciBpID0gMDsgaSA8IDEyODsgKytpKQor
ICAgIGZvciAoVUNoYXIgaSA9IDE7IGkgPCAxMjg7ICsraSkKICAgICAgICAgbV9hdG9tRGF0YS5j
aGFyYWN0ZXJTZXQuc2V0KGkpOwogfQogCkBAIC0zOTUsMTEgKzM5NSwxMSBAQCBpbmxpbmUgdm9p
ZCBUZXJtOjpxdWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYgcXVhbnRpZmllcikKICAgICBt
X3F1YW50aWZpZXIgPSBxdWFudGlmaWVyOwogfQogCi1pbmxpbmUgdW5zaWduZWQgVGVybTo6VGVy
bTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvbkxp
c3QmIGZpbmFsQWN0aW9ucykgY29uc3QKK2lubGluZSBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxk
ZXIgVGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWls
ZGVyJiBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdAogewogICAg
IEFTU0VSVChpc1ZhbGlkKCkpOwogCi0gICAgdW5zaWduZWQgbmV3RW5kOworICAgIEltbXV0YWJs
ZUNoYXJORkFOb2RlQnVpbGRlciBuZXdFbmQ7CiAKICAgICBzd2l0Y2ggKG1fcXVhbnRpZmllcikg
ewogICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZTogewpAQCAtNDA4LDM2ICs0MDgsMzYgQEAg
aW5saW5lIHVuc2lnbmVkIFRlcm06OlRlcm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIHVuc2ln
bmVkIHN0YXJ0LCBjb25zdCBBY3Rpb24KICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6
WmVyb09yT25lOiB7CiAgICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5m
YSwgc3RhcnQpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIG5ld0Vu
ZCk7CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKG5ld0VuZCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3JlOiB7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlcGVhdFN0YXJ0ID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAg
bmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFydCk7CisgICAgICAgIElt
bXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRTdGFydChuZmEpOworICAgICAgICBzdGFy
dC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CiAKLSAgICAgICAgdW5zaWduZWQg
cmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCk7Ci0g
ICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIHJlcGVhdFN0YXJ0KTsK
KyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdEVuZCA9IGdlbmVyYXRl
U3ViZ3JhcGhGb3JBdG9tKG5mYSwgcmVwZWF0U3RhcnQpOworICAgICAgICByZXBlYXRFbmQuYWRk
RXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAgICAgIHVuc2lnbmVkIGtsZWVu
RW5kID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9u
KHJlcGVhdEVuZCwga2xlZW5FbmQpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24o
c3RhcnQsIGtsZWVuRW5kKTsKLSAgICAgICAgbmV3RW5kID0ga2xlZW5FbmQ7CisgICAgICAgIElt
bXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBrbGVlbkVuZChuZmEpOworICAgICAgICByZXBlYXRF
bmQuYWRkRXBzaWxvblRyYW5zaXRpb24oa2xlZW5FbmQpOworICAgICAgICBzdGFydC5hZGRFcHNp
bG9uVHJhbnNpdGlvbihrbGVlbkVuZCk7CisgICAgICAgIG5ld0VuZCA9IFdURjo6bW92ZShrbGVl
bkVuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpP
bmVPck1vcmU6IHsKLSAgICAgICAgdW5zaWduZWQgcmVwZWF0U3RhcnQgPSBuZmEuY3JlYXRlTm9k
ZSgpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIHJlcGVhdFN0YXJ0
KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdFN0YXJ0KG5mYSk7
CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAg
ICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHJl
cGVhdFN0YXJ0KTsKLSAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwg
cmVwZWF0U3RhcnQpOworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgcmVwZWF0
RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCk7CisgICAgICAg
IHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CiAKLSAgICAgICAg
dW5zaWduZWQgYWZ0ZXJSZXBlYXQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICBuZmEuYWRk
RXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBhZnRlclJlcGVhdCk7Ci0gICAgICAgIG5ld0Vu
ZCA9IGFmdGVyUmVwZWF0OworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgYWZ0
ZXJSZXBlYXQobmZhKTsKKyAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKGFm
dGVyUmVwZWF0KTsKKyAgICAgICAgbmV3RW5kID0gV1RGOjptb3ZlKGFmdGVyUmVwZWF0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KLSAgICBuZmEuc2V0QWN0aW9ucyhuZXdFbmQsIGZp
bmFsQWN0aW9ucyk7CisgICAgbmV3RW5kLnNldEFjdGlvbnMoZmluYWxBY3Rpb25zLmJlZ2luKCks
IGZpbmFsQWN0aW9ucy5lbmQoKSk7CiAgICAgcmV0dXJuIG5ld0VuZDsKIH0KIApAQCAtNjEyLDM2
ICs2MTIsNjEgQEAgaW5saW5lIGJvb2wgVGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBUZXJtOjpnZW5lcmF0
ZVN1YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgdW5zaWduZWQgc291cmNlKSBjb25zdAoraW5saW5l
IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBUZXJtOjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRv
bShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CiAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CiAg
ICAgY2FzZSBUZXJtVHlwZTo6RGVsZXRlZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIEltbXV0YWJsZUNoYXJORkFOb2Rl
QnVpbGRlcigpOwogICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDogewotICAgICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICBpZiAoaXNVbml2ZXJz
YWxUcmFuc2l0aW9uKCkpCi0gICAgICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbnNPbkFueUNoYXJh
Y3Rlcihzb3VyY2UsIHRhcmdldCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCFt
X2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9y
IChVQ2hhciBpID0gMDsgaSA8IDEyODsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBu
ZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oaSkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChVQ2hhciBpID0gMTsgaSA8IDEyODsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuZ2V0KGkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbmZhLmFkZFRyYW5zaXRpb24oc291cmNlLCB0YXJnZXQsIHN0YXRpY19jYXN0PGNoYXI+KGkp
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRl
ciBuZXdOb2RlKG5mYSk7CisgICAgICAgIGlmICghbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52
ZXJ0ZWQoKSkgeworICAgICAgICAgICAgVUNoYXIgaSA9IDA7CisgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMTI4ICYmICFtX2F0b21EYXRhLmNo
YXJhY3RlclNldC5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PSAxMjgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgVUNoYXIgc3RhcnQgPSBpOworICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaSA8IDEyOCAmJiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkp
CisgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJh
bnNpdGlvbihzdGFydCwgaSAtIDEsIG5ld05vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVUNoYXIgaSA9IDE7CisgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMTI4ICYmIG1fYXRvbURhdGEuY2hhcmFj
dGVyU2V0LmdldChpKSkKKyAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAg
IGlmIChpID09IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBVQ2hhciBzdGFydCA9IGk7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAg
ICAgIHdoaWxlIChpIDwgMTI4ICYmICFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCisg
ICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJhbnNp
dGlvbihzdGFydCwgaSAtIDEsIG5ld05vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgICAgIHJldHVybiBuZXdOb2RlOwogICAgIH0KICAg
ICBjYXNlIFRlcm1UeXBlOjpHcm91cDogewotICAgICAgICB1bnNpZ25lZCBsYXN0VGFyZ2V0ID0g
c291cmNlOwotICAgICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBtX2F0b21EYXRhLmdyb3Vw
LnRlcm1zKQotICAgICAgICAgICAgbGFzdFRhcmdldCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEs
IGxhc3RUYXJnZXQsIEFjdGlvbkxpc3QoKSk7CisgICAgICAgIGlmIChtX2F0b21EYXRhLmdyb3Vw
LnRlcm1zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGFueSBraW5kIG9mIGVt
cHR5IHRlcm0gY291bGQgYmUgYXZvaWRlZCBpbiB0aGUgcGFyc2VyLiBUaGlzIGNhc2Ugc2hvdWxk
IHR1cm5lZCBpbnRvIGFuIGFzc2VydGlvbi4KKyAgICAgICAgICAgIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciBuZXdOb2RlKG5mYSk7CisgICAgICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRy
YW5zaXRpb24obmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICAgICAg
fQorCisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBsYXN0VGFyZ2V0ID0gbV9h
dG9tRGF0YS5ncm91cC50ZXJtcy5maXJzdCgpLmdlbmVyYXRlR3JhcGgobmZhLCBzb3VyY2UsIEFj
dGlvbkxpc3QoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21EYXRh
Lmdyb3VwLnRlcm1zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBUZXJtJiBjdXJy
ZW50VGVybSA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXNbaV07CisgICAgICAgICAgICBJbW11dGFi
bGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGN1cnJlbnRUZXJtLmdlbmVyYXRlR3JhcGgo
bmZhLCBsYXN0VGFyZ2V0LCBBY3Rpb25MaXN0KCkpOworICAgICAgICAgICAgbGFzdFRhcmdldCA9
IFdURjo6bW92ZShuZXdOb2RlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBsYXN0VGFy
Z2V0OwogICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggODJlYzdiY2MyNTJhYmZhNDcxY2YxMDVjNzE5ZTQyODJkNmNlN2U4MC4u
YTcyM2YzMjYyYTRiMjQ5MDQ2YTNjYjU0YTQ3ZGE5NzQ2ZmMzYjQ3ZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1
LTA2LTI4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBNYWtlIHRoZSBORkEgdHJhbnNpdGlvbnMgcmFuZ2UtYmFzZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjMzOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgVGVzdCBzb21lIG5ldyBpbnRlcmVz
dGluZyBjYXNlcy4KKwogMjAxNS0wNi0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bU09VUF0gSW1wbGVtZW50IFdlYkNvcmU6OlB1
YmxpY1N1ZmZpeCBmb3Igc291cCBhbmQgZW5hYmxlIFBVQkxJQ19TVUZGSVhfTElTVCBmb3IgR1RL
KwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRF
eHRlbnNpb25zLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9ucy5jcHAKaW5kZXggOWIzNzk3Zjc2YzJhNTQ2YzM0ZTRlOTQzMGY2NDQ5YzU3OTZl
ZWM2Yi4uMTRjMjViNGE5MTRiNWNjNDc2ZTk1ZTM4ZDYwY2QxMGQ3MmI3NzlkNCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCkBAIC0zMDQsNiArMzA0LDM4IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
UGF0dGVybk5lc3RlZEdyb3VwcykKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb2JhciIpLCB7IH0pOwogfQogCitURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIEVtcHR5R3JvdXBzKQoreworICAgIGF1dG8gYmFja2VuZCA9
IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXmh0dHA6Ly93ZWJraXRcXFxcLm9yZy9mb28oKWJhclwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiXmh0dHA6Ly93ZWJraXRcXFxcLm9yZy8oKG1lKSgpKHRvbykpXCJ9
fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy9mb28iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9iYXIiKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9m
b29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnL21lIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvdG9vIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvbWV0b28iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zv
b21lIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vbWViYXIiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9tZWZvbyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnL21lZm9vdG9vIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgUXVhbnRpZmllZEVtcHR5R3JvdXBzKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiXmh0dHA6Ly93ZWJraXRcXFxcLm9yZy9mb28oKStiYXJcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5odHRwOi8vd2Via2l0XFxcXC5vcmcvKCgpKigpPyh0YXJnZXQpKCkr
KVwifX1dIik7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvZm9vIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmFyIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9
KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9tZSIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3RvbyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3Rhcmdl
dCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvZm9vbWUiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29tZWJhciIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL21lZm9v
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3dlYmtpdC5vcmcvbWVmb290b28iKSwgeyB9KTsKK30KKwogVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBNYXRjaFBhc3RFbmRPZlN0cmluZykKIHsKICAgICBhdXRvIGJhY2tlbmQg
PSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIi4rXCJ9fV0iKTsKQEAgLTM1OSw2ICszOTEsMTYgQEAgVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBFbmRPZkxpbmVBc3NlcnRpb25XaXRoSW52ZXJ0ZWRD
aGFyYWN0ZXJTZXQpCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyWSIpLCB7IH0pOwogfQogCitURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIERvdERvZXNOb3RJbmNsdWRlRW5kT2ZMaW5lKQoreworICAgIGF1dG8g
YmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiaHR0cHM6Ly93ZWJraXRcXFxcLm9yZy8uXCJ9
fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0
dHBzOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImh0dHBzOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwczovL3dlYmtpdC5vcmcvQSIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93ZWJraXQub3JnL3oiKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworfQorCiBURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIFByZWZpeEluZml4U3VmZml4RXhhY3RNYXRjaCkKIHsKICAg
ICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImluZml4XCJ9fSwiCkBAIC0xMzY4
LDQgKzE0MTAsNTI0IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2ltcGxlRmFsbEJh
Y2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IyKQogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImJiYmI6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKIH0KIAor
Ly8gKioqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyByYW5nZXMgaW50ZXJzZWN0aW9uczogKioqCisv
LyBGdWxsIG92ZXJsYXAuCisvLyAxKQorLy8gQTogfC0tLS0tfAorLy8gQjogIHwtLS18CisvLyAy
KQorLy8gQTogfC0tLS0tfAorLy8gQjogICAgfAorLy8gMykKKy8vIEE6ICB8LS0tfAorLy8gQjog
fC0tLS0tfAorLy8gNCkKKy8vIEE6ICAgIHwKKy8vIEI6IHwtLS0tLXwKKy8vIE9uZSBlZGdlIGlu
IGNvbW1vbgorLy8gNSkKKy8vIEE6IHwtfAorLy8gQjogICB8LXwKKy8vIDYpCisvLyBBOiB8Cisv
LyBCOiB8LXwKKy8vIDcpCisvLyBBOiB8LXwKKy8vIEI6ICAgfAorLy8gOCkKKy8vIEE6ICAgfC18
CisvLyBCOiB8LXwKKy8vIDkpCisvLyBBOiAgIHwKKy8vIEI6IHwtfAorLy8gMTApCisvLyBBOiB8
LXwKKy8vIEI6IHwKKy8vIEIgb3ZlcmxhcCBvbiB0aGUgbGVmdCBzaWRlIG9mIEEuCisvLyAxMSkK
Ky8vIEE6ICAgfC0tLXwKKy8vIEI6IHwtLS18CisvLyAxMikKKy8vIEE6ICAgfC0tLXwKKy8vIEI6
IHwtLS0tLXwKKy8vIEEgb3ZlcmxhcCBvbiB0aGUgbGVmdCBzaWRlIG9mIEIKKy8vIDEzKQorLy8g
QTogfC0tLXwKKy8vIEI6ICAgfC0tLXwKKy8vIDE0KQorLy8gQTogfC0tLS0tfAorLy8gQjogICB8
LS0tfAorLy8gRXF1YWwgcmFuZ2VzCisvLyAxNSkKKy8vIEE6IHwtLS18CisvLyBCOiB8LS0tfAor
Ly8gMTYpCisvLyBBOiB8CisvLyBCOiB8CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
UmFuZ2VPdmVybGFwQ2FzZTEpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl5bYS1tXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
aWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5b
Yy1lXVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYjovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSwgdHJ1
ZSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJk
Oi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSwg
dHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoIm06Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgibjovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0
byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1tXVwifX0sIgorICAgICAg
ICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIltjLWVdXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYS54eHgvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYi54eHgv
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cu
Yy54eHgvIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7IH0sIHRydWUpOworICAgIHRl
c3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5l
Lnh4eC8iKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cubS54eHgvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cubi54eHgvIiksIHsgfSk7Cit9
CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTIpCit7Cisg
ICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYS1tXVwifX0sIgor
ICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZpb3VzLXJ1bGVzXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1
ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3Jn
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiOi8vd3d3Lndl
YmtpdC5vcmcvIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoIm06Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgibjovL3d3dy53ZWJraXQub3JnLyIp
LCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJb
YS1tXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiaWdub3JlLXByZXZp
b3VzLXJ1bGVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImxcIn19XSIpOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5rLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5sLnh4eC8iKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cubS54eHgvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cubi54eHgvIiks
IHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2Fz
ZTMpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYi1k
XVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9u
ZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiXlthLW1dXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYjovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53
ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgibTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1h
dGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgibjovL3d3dy53ZWJraXQub3JnLyIpLCB7
IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYi1k
XVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9u
ZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiW2EtbV1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYi54eHgvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
c2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rv
ciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cubS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3Lm4ueHh4LyIpLCB7IH0pOworfQorCitURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlT3ZlcmxhcENhc2U0KQoreworICAgIGF1dG8g
bWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJebFwifX0sIgorICAgICAgICAie1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5o
aWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXlthLW1dXCJ9fV0iKTsKKwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3
dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiazovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgibDovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgibTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgibjovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNr
ZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJsXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1tXVwifX1dIik7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5rLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cubC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3Lm0ueHh4LyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5uLnh4
eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJs
YXBDYXNlNSkKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XlthLWVdXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxh
eS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeW2UtaF1cIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZjovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaDovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwor
CisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1lXVwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwi
c2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2Ut
aF1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmgueHh4
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5pLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlNikKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiXmVcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIl5bZS1oXVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdCht
YXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRj
aEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsK
KyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImg6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImk6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8g
c2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiZVwifX0sIgorICAgICAgICAie1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5o
aWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2UtaF1cIn19XSIpOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5hLnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZC54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
c2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5mLnh4eC8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rv
ciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuaC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmkueHh4LyIpLCB7IH0pOworfQorCitURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlT3ZlcmxhcENhc2U3KQoreworICAgIGF1dG8g
bWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2EtZV1cIn19LCIKKyAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6
XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5lXCJ9fV0iKTsKKwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3
dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8g
c2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtZV1cIn19LCIKKyAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6
XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImVcIn19XSIpOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5kLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0
ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTgpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQg
PSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIl5bZS1oXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXlthLWVdXCJ9fV0iKTsKKworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1h
dGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZjovL3d3dy53ZWJraXQub3JnLyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImk6Ly93d3cu
d2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VCYWNr
ZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiW2UtaF1cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpc
ImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIlthLWVdXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYS54eHgvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaS54eHgvIiksIHsgfSk7Cit9CisK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTkpCit7CisgICAg
YXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5lXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3Rvclwi
OlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2EtZV1cIn19XSIp
OworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJh
Oi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmOi8vd3d3Lndl
YmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcImVcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1k
aXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIlthLWVdXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYS54eHgvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0
ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTEwKQoreworICAgIGF1dG8gbWF0Y2hCYWNrZW5k
ID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2UtaF1cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5lXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1
ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZjovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtp
dC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImk6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VC
YWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiW2UtaF1cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcImVcIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuZC54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5mLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5oLnh4eC8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJj
aEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5pLnh4eC8iKSwgeyB9KTsK
K30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMTEpCit7
CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bZS1nXVwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwi
c2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltk
LWZdXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1h
dGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0p
OworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTov
L3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NE
aXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiZjovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiZzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRv
IHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltlLWddXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3Rvclwi
OlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbZC1mXVwifX1dIik7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmMueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVz
dChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZS54eHgvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Is
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmYueHh4
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5n
Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejov
L3d3dy5oLnh4eC8iKSwgeyB9KTsKK30KKworCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IFJhbmdlT3ZlcmxhcENhc2UxMikKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNr
ZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiXltlLWddXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJeW2QtZ11cIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJk
Oi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJnOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5vcmcv
IiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
IltlLWddXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxh
eS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJbZC1nXVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmMueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rv
ciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuZS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgienp6Oi8vd3d3LmYueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5nLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaC54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTEzKQoreworICAgIGF1dG8gbWF0Y2hC
YWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2ItZF1cIn19LCIKKyAgICAgICAgIntcImFj
dGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlk
ZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYy1lXVwifX1dIik7CisKKyAg
ICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImE6Ly93d3cu
d2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImI6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aDovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0g
bWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJbYi1kXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2MtZV1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuYi54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYy54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaC54eHgvIiksIHsg
fSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTE0
KQoreworICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2ItZV1c
In19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVc
IixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
Il5bYy1lXVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVz
dChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImI6Ly93d3cud2Via2l0Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYzovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3
dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
ZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpD
U1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiaDovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNr
ZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYi1lXVwifX0sIgorICAgICAgICAie1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5c
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2MtZV1cIn19XSIpOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4
eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYi54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYy54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaC54eHgvIiksIHsgfSk7Cit9CisK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTE1KQoreworICAg
IGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2MtZl1cIn19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVj
dG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYy1mXVwi
fX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImI6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImM6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImc6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1
dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2MtZl1cIn19LCIKKyAgICAg
ICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9y
XCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltjLWZdXCJ9fV0i
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmIueHh4LyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jLnh4
eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxl
Y3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cu
ZC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25l
U2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5mLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuZy54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTE2KQoreworICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFr
ZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJeY1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXmNcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcImNcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNz
cy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcImNcIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYi54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmMueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZS54eHgvIiksIHsg
fSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUXVhbnRpZmllZE9uZU9yTW9y
ZVJhbmdlc0Nhc2UxMUFuZDEzKQoreworICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VCYWNr
ZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJs
LWZpbHRlclwiOlwiW2MtZV0rW2ctaV0rWVlZXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYi1kXStbaC1qXStZWVlcIn19XSIpOworCisg
ICAgLy8gVGhlIGludGVyZXN0aW5nIHJhbmdlcyBvbmx5IG1hdGNoIGJldHdlZW4gJ2InIGFuZCAn
aycsIHBsdXMgYSBnYXAgaW4gJ2YnLgorICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hYXl5eS54eHgvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFi
eXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWN5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hZHl5eS54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmFleXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWZ5eXkueHh4LyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5hZ3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFoeXl5Lnh4eC8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYWl5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hanl5eS54eHgvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmFreXl5Lnh4eC8iKSwgeyB9KTsKKworICAgIC8vICdiJyBpcyB0aGUgZmlyc3QgY2hhcmFj
dGVyIG9mIHRoZSBzZWNvbmQgcnVsZS4KKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJh
eXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmJ5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iY3l5eS54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmJkeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmV5eXkueHh4LyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5iZnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJneXl5Lnh4eC8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYmh5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpD
U1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iaXl5eS54eHgvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJq
eXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5v
bmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmt5eXkueHh4LyIpLCB7IH0pOworCisgICAgLy8gJ2MnIGlz
IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IHJ1bGUsIGFuZCBpdCBvdmVybGFwcyB0
aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWNvbmQgcnVsZS4KKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY3l5eS54eHgvIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgienp6Oi8vd3d3LmNheXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2J5eXkueHh4LyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5jY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNkeXl5Lnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuY2V5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jZnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNn
eXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5jaHl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgienp6Oi8vd3d3LmNpeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2p5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5ja3l5eS54eHgv
IiksIHsgfSk7CisKKyAgICAvLyAnZCcgaXMgaW4gdGhlIGZpcnN0IHJhbmdlIG9mIGJvdGggcnVs
ZS4gVGhpcyBzZXJpZXMgY292ZXIgb3ZlcmxhcHMgYmV0d2VlbiB0aGUgdHdvIHJ1bGVzLgorICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5kZ3l5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuZGRneXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGh5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGhoeXl5Lnh4eC8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGVneXl5Lnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZWh5
eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmRmZ3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRmaHl5eS54eHgvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmRqeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGRqeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGRqanl5
eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25l
U2VsZWN0b3IgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUXVhbnRpZmll
ZE9uZU9yTW9yZVJhbmdlc0Nhc2UxMUFuZDEzSW5Hcm91cHMpCit7CisgICAgYXV0byBzZWFyY2hC
YWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIoW2MtZV0pKyhbZy1pXStZWVkpXCJ9fSwiCisg
ICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxl
Y3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYi1kXStb
aC1qXStZWVlcIn19XSIpOworCisgICAgLy8gVGhlIGludGVyZXN0aW5nIHJhbmdlcyBvbmx5IG1h
dGNoIGJldHdlZW4gJ2InIGFuZCAnaycsIHBsdXMgYSBnYXAgaW4gJ2YnLgorICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hYXl5eS54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmFieXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWN5eXkueHh4LyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5hZHl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFleXl5Lnh4eC8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYWZ5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hZ3l5eS54eHgvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmFoeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWl5eXkueHh4LyIpLCB7IH0pOworICAgIHRl
c3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5h
anl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFreXl5Lnh4eC8iKSwgeyB9KTsKKworICAgIC8vICdi
JyBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWNvbmQgcnVsZS4KKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYnl5eS54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmJheXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmJ5eXkueHh4LyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5iY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJkeXl5Lnh4eC8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYmV5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iZnl5eS54eHgvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmJneXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmh5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iaXl5
eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25l
U2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmJqeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmt5eXkueHh4LyIpLCB7
IH0pOworCisgICAgLy8gJ2MnIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IHJ1
bGUsIGFuZCBpdCBvdmVybGFwcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWNvbmQgcnVs
ZS4KKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNheXl5Lnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuY2J5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNk
eXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2V5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jZnl5eS54
eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmNneXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jaHl5eS54eHgvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNpeXl5Lnh4eC8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChz
ZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2p5eXkueHh4LyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5ja3l5eS54eHgvIiksIHsgfSk7CisKKyAgICAvLyAnZCcgaXMgaW4gdGhlIGZp
cnN0IHJhbmdlIG9mIGJvdGggcnVsZS4gVGhpcyBzZXJpZXMgY292ZXIgb3ZlcmxhcHMgYmV0d2Vl
biB0aGUgdHdvIHJ1bGVzLgorICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZ3l5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGRneXl5Lnh4eC8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGh5eXkueHh4LyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGho
eXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5v
bmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6
Ly93d3cuZGVneXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoInp6ejovL3d3dy5kZWh5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRmZ3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRm
aHl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRqeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVz
dChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGRqeXl5Lnh4
eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxl
Y3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJ6eno6Ly93d3cuZGRqanl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255759</attachid>
            <date>2015-06-29 10:36:08 -0700</date>
            <delta_ts>2015-06-29 12:41:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146338-20150629103518.patch</filename>
            <type>text/plain</type>
            <size>139355</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjA2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NiBAQAorMjAxNS0wNi0yOSAgQmVuamFt
aW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUgTkZB
IHRyYW5zaXRpb25zIHJhbmdlLWJhc2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDYzMzgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlz
dGVuc2VuLgorCisgICAgICAgIENoYW5nZSB0aGUgTkZBIHRvIHVzZSByYW5nZSBiYXNlZCB0cmFu
c2l0aW9uIGZvciBhbnkga2luZCBvZiB0cmFuc2l0aW9uLgorICAgICAgICBUaGUgZmFsbGJhY2sg
dHJhbnNpdGlvbiBpcyBhbHNvIGFic29yYmVkIGFzIHJhbmdlcy4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgTkZBIHdvdWxkIG9ubHkgaGF2ZSBzaW5nbGUgdHJhbnNpdGlvbnMgYW5kIGEgZmFs
bGJhY2sKKyAgICAgICAgdHJhbnNpdGlvbiBmb3IgYWxsIGNhc2VzIG5vdCBjb3ZlcmVkIGJ5IHNp
bmdsZSB0cmFuc2l0aW9ucy4KKworICAgICAgICBUaGUgcHJvYmxlbSB3aXRoIHRoYXQgZGVzaWdu
IHdhcyB0aGF0IGNoYXJhY3RlciByYW5nZXMgKGUuZy4gW2Etel0pIHdlcmUKKyAgICAgICAgZXh0
ZW5kZWQgYXMgaW5kaXZpZHVhbCB0cmFuc2l0aW9ucy4gU29tZXRoaW5nIGxpa2UgW15hXSB3b3Vs
ZCBjb3ZlcgorICAgICAgICBtb3N0IG9mIHRoZSBhbHBoYWJldCB3aXRoIHRyYW5zaXRpb25zLgor
ICAgICAgICBXaGVuIGNvbnZlcnRpbmcgdGhlIE5GQSB0byBERkEsIHRoZSB0aW1lIGlzIHByb3Bv
cnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHN0YXRlcworICAgICAgICBtdWx0aXBsaWVkIGJ5IHRo
ZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMuIFdpdGggbWFueSBpbmRpdmlkdWFsIHRyYW5zaXRpb25z
LAorICAgICAgICB0aGUgcnVuIHRpbWUgd2FzIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBoaWdoZXIg
dGhhbiB3aGF0IHdlIHdhbnQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBORkEg
dG8gb25seSBoYW5kbGUgcmFuZ2VzIG9mIGNoYXJhY3RlcnMuIEEgc2luZ2xlIHRyYW5zaXRpb24K
KyAgICAgICAgYmVjb21lcyBhIHJhbmdlIHdpdGggdGhlIGNoYXJhY3RlciBhcyBmaXJzdCBhbmQg
bGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlCisgICAgICAgICgnYScgYmVjb21lcyAnYScgdG8g
J2EnKS4KKyAgICAgICAgUmFuZ2VzIG9mIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQgZGlyZWNsdHkg
KGUuZy4gW2Etel0gYmVjb21lcyBhIHNpbmdsZSAnYScgdG8gJ3onIHRyYW5zaXRpb24pLgorCisg
ICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBzdGF0ZSBtYWNoaW5lcywgcmFuZ2VzIGhhdmUg
aWRlbnRpZmllcyAodGhlIHRhcmdldCBvZiB0aGUgdHJhbnNpdGlvbnMpLgorICAgICAgICBXaGVu
IHR3byByYW5nZXMgY29sbGlkZSwgdGhleSBoYXZlIHRvIGJlIHNwbGl0IHN1Y2ggdGhhdCBlYWNo
IHBhcnQgcmV0YWluIGl0cyB0YXJnZXQKKyAgICAgICAgZXhjZXB0IHRoZSBpbnRlcnNlY3Rpb24g
dGhhdCBnZXRzIHRoZSB1bmlvbiBvZiB0aGUgdGFyZ2V0cy4KKworICAgICAgICBIYW5kbGluZyB0
aGUgdW5pb24gb2YgcmFuZ2VzIGVmZmljaWVudGx5IGlzIGNyaXRpY2FsIGJlY2F1c2Ugd2UgaGF2
ZSB0byBkbworICAgICAgICBpdCBmb3IgZXZlcnkgTkZBIG5vZGUgaW4gYW55IHN1YnNldCB3aGVu
IGJ1aWxkaW5nIHRoZSBERkEuIFRoZSBoZWxwZXIKKyAgICAgICAgY2xhc3MgdGhhdCBkb2VzIHRo
YXQgaXMgTXV0YWJsZVJhbmdlLgorCisgICAgICAgIFRoZSB1bmlvbiBvZiByYW5nZXMgaXMgZG9u
ZSBlZmZpY2llbnRseSBiZWNhdXNlIG9mIHByZWNvbmRpdGlvbnMgb24gb3VyIGxpc3Qgb2YgcmFu
Z2VzOgorICAgICAgICAtVGhlIHJhbmdlcyBtdXN0IGJlIHNvcnRlZC4KKyAgICAgICAgLU5vIHJh
bmdlIGluIGEgbGlzdCBjYW4gaW50ZXJzZWN0IGFueSBvdGhlciByYW5nZSBpbiB0aGUgc2FtZSBs
aXN0LgorCisgICAgICAgIFRvIG1lcmdlIHR3byByYW5nZXMsIHdlIGNhbiBnbyBvdmVyIHRoZW0g
aW4gb3JkZXIgYW5kIHNwbGl0IHRoZW0gcGFydCBieSBwYXJ0LgorICAgICAgICBJdCBpcyBlYXN5
IHRvIGZpbmQgd2hhdCBnb2VzIHdoZXJlIGJlY2F1c2UgdGhleSBhcmUgYm90aCBzb3J0ZWQgYW5k
IHdlIGNhbgorICAgICAgICBjb21wYXJlIHRoZSBjaGFyYWN0ZXJzIG9mIGVhY2ggdG8ga25vdyBo
b3cgdG8gbW92ZSBmb3J3YXJkLgorICAgICAgICBUaGUgdGltZSB0byBtZXJnZSAyIHJhbmdlIGxp
c3QgaXMgcHJvcG9ydGlvbmFsIHRvIE8obittKSB3aGVyZSAnbicgYW5kICdtJyBhcmUKKyAgICAg
ICAgdGhlIG51bWJlciBvZiByYW5nZXMgaW4gZWFjaCBsaXN0LgorCisgICAgICAgIFNpbmNlIHRh
a2luZyB0aGUgdW5pb24gb2YgdHdvIGxpc3RzIHVzdWFsbHkgY3JlYXRlIG5ldyByYW5nZXMsIHdl
IGhhdmUgdG8gYWxsb2NhdGUKKyAgICAgICAgdGhvc2Ugc29tZXdoZXJlIGVmZmljaWVudGx5LiBU
byBkbyB0aGF0LCBNdXRhYmxlUmFuZ2Ugc3VwcG9ydCBhbiBpbmxpbmUgY2FwYWNpdHksCisgICAg
ICAgIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBORkFUb0RGQSBDb252ZXJ0aW9uLgorCisgICAgICAg
IC0tLQorCisgICAgICAgIFdpdGggcmFuZ2VzLCB0aGUgTkZBLXRvLURGQSBjb252ZXJzaW9uIGNo
YW5nZXMgdmVyeSBsaXR0bGU6CisgICAgICAgIC1FYWNoIE5GQSBub2RlcyBjb250YWlucyBhIGxp
c3Qgb2YgcmFuZ2VzIGFuZCBlYWNoIHJhbmdlIGhhcyBhIGxpc3Qgb2YgdGFyZ2V0cy4KKyAgICAg
ICAgLVRoZSBzdWJzZXQgY29uc3RydWN0aW9uIHNlbGVjdCBhbnkgbnVtYmVyIG9mIE5GQSBub2Rl
cyBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICBhIHNpbmdsZSBkZXRlcm1pbmlzdGljIHN0YXRl
LgorICAgICAgICAtRm9yIHRoZSBzdWJzZXQsIHdlIGNhbiB1c2UgTXV0YWJsZVJhbmdlIHRvIG1l
cmdlIHRoZSByYW5nZXMgb2YgZXZlcnkKKyAgICAgICAgIE5GQSBub2RlIGluIHRoZSBzZXQuIFRo
ZSByZXN1bHRpbmcgbGlzdCBoYXMgcmFuZ2VpcyB3aXRoIHRhcmdldHMgY29ycmVzcG9uZGluZwor
ICAgICAgICAgdG8gdGhlIHVuaW9uIG9mIGFsbCB0aGUgdHJhbnNpdGlvbnMuCisgICAgICAgIC1X
ZSBnbyBvdmVyIGFsbCB0aGUgcmFuZ2VzIHRoZSBzYW1lIHdheSB3ZSB1c2VkIHRvIGdvIG92ZXIg
dGhlIHRyYW5zaXRpb25zLgorICAgICAgICAgU2luY2UgdGhlIERGQSBkb2VzIG5vdCBzdXBwb3J0
IHJhbmdlcywgdGhlIHJhbmdlcyBhcmUgc3ByZWFkIGFzIGluZGl2aWR1YWwKKyAgICAgICAgIHRy
YW5zaXRpb25zICsgZmFsbGJhY2sgdHJhbnNpdGlvbi4KKworICAgICAgICAtLS0KKworICAgICAg
ICBXaXRoIHRoZSBlZmZpY2llbnQgbWVyZ2luZyBzb2x2ZWQsIHdlIHN0aWxsIG5lZWQgdGhlIGFj
dHVhbCBORkEgdG8gdXNlIHJhbmdlcworICAgICAgICBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgdHJh
bnNpdGlvbnMuCisKKyAgICAgICAgSSBjb3VsZCBoYXZlIHVzZWQgTXV0YWJsZVJhbmdlIGZvciB0
aGF0IGJ1dCBpdCBpcyBub3QgdGhlIG1vc3QgY29tcGFjdAorICAgICAgICB3YXkgdG8gcmVwcmVz
ZW50IHJhbmdlcyB0aGF0IGRvIG5vdCBuZWVkIG1lcmdpbmcuCisKKyAgICAgICAgSW5zdGVhZCwg
dGhlIE5GQSB1c2VzIGEgY3VzdG9tIHN0cnVjdHVyZTogSW1tdXRhYmxlTkZBLiBJdCBpcyBiYXNp
Y2FsbHkKKyAgICAgICAgdGhlIHNhbWUgdGhpbmcsIGJ1dCBpbiB0aGF0IG9uZSB5b3UgY2Fubm90
IGNoYW5nZSBhIGxpc3Qgb2YgcmFuZ2UKKyAgICAgICAgYWZ0ZXIgY3JlYXRpbmcgaXQuCisKKyAg
ICAgICAgQ29uc2VxdWVudGx5LCB0aGUgc29ydGVkIHJhbmdlcyBpbiBJbW11dGFibGVORkEgYXJl
IGFsc28gc3Vic2VxdWVudAorICAgICAgICBpbiBtZW1vcnksIHdoaWNoIGlzIHJlYWxseSBuaWNl
IHRvIGdvIG92ZXIgdGhlbSBlZmZpY2llbnRseQorICAgICAgICB3aGVuIG1lcmdpbmcgcmFuZ2Vz
IGluIHRoZSBORkEtdG8tREZBIGNvbnZlcnNpb24uIDopCisKKyAgICAgICAgV2hlbiBidWlsZGlu
ZyB0aGUgTkZBLCB3ZSBkb24ndCBrbm93IGFsbCB0aGUgdHJhbnNpdGlvbnMgd2hlbiBjcmVhdGlu
ZworICAgICAgICBlYWNoIG5vZGUsIEJVVCB3ZSBrbm93IHRoYXQgd2UgaGF2ZSB2ZXJ5IGZldyBu
b2RlICJ1bmZpbmlzaGVkIiBhdCBhbnkKKyAgICAgICAgdGltZS4gU2luY2Ugd2UgYnVpbGQgYnkg
Z29pbmcgZGVwdGgtZmlyc3QgaW4gdGhlIHByZWZpeC10cmVlLCB3ZSBvbmx5CisgICAgICAgIGhh
dmUgdGhlIG1heC1kZXB0aCBvZiBsaXZlIG5vZGVzIGluIHRoZSB3b3JzdCBjYXNlLgorCisgICAg
ICAgIFRvIGhlbHAgYnVpbGRpbmcgdGhlIE5GQSBvdXQgb2YgdGhlIHByZWZpeCB0cmVlLCB3ZSBo
YXZlCisgICAgICAgIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLiBJdCBrZWVwcyBhbGwgdGhlIGlu
Zm9ybWF0aW9ucyBhYm91dCBhIE5GQSBub2RlLAorICAgICAgICBidXQgaW4gYSBub24tY29tcGFj
dCwgbXV0YWJsZSBmb3JtLiBXaGVuIGEgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIKKyAgICAgICAg
aXMgZGVzdHJveWVkLCBpdCBzZXJpYWxpemUgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIGltbXV0
YWJsZSBORkEuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVy
czo6cHJvY2Vzc05GQXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6ZW1wdHkpOgorICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L0ltbXV0YWJsZU5GQS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpJbW11dGFibGVORkE6OkNvbnN0VGFyZ2V0SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRhcmdl
dEl0ZXJhdG9yOjpvcGVyYXRvci0+KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpJbW11dGFibGVORkE6OkNvbnN0VGFyZ2V0SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6Q29uc3RUYXJn
ZXRJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFRhcmdldEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6Okl0ZXJhYmxl
Q29uc3RUYXJnZXRzOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6SW1tdXRhYmxlTkZBOjpJdGVyYWJsZUNvbnN0VGFyZ2V0czo6ZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11
dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0
YWJsZU5GQTo6Q29uc3RSYW5nZUl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkE6OkNvbnN0UmFuZ2VJdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRh
YmxlTkZBOjpDb25zdFJhbmdlSXRlcmF0b3I6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6SXRlcmFibGVDb25zdFJhbmdlOjpiZWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBOjpJdGVy
YWJsZUNvbnN0UmFuZ2U6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6SW1tdXRhYmxlTkZBOjpJdGVyYWJsZUNvbnN0UmFuZ2U6OmRlYnVnUHJpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQTo6dHJhbnNpdGlvbnNG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVO
RkE6OnJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJs
ZU5GQTo6ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Oklt
bXV0YWJsZU5GQTo6bWVtb3J5VXNlZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvSW1t
dXRhYmxlTkZBTm9kZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OkltbXV0YWJsZU5GQU5vZGVCdWls
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFO
b2RlQnVpbGRlcjo6fkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6YWRkVHJhbnNpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9k
ZUJ1aWxkZXI6OmFkZEVwc2lsb25UcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6c2V0QWN0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRh
YmxlTkZBTm9kZUJ1aWxkZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6c2lua0FjdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjpz
aW5rVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Oklt
bXV0YWJsZU5GQU5vZGVCdWlsZGVyOjpzaW5rRXBzaWxvblRyYW5zaXRpb25zKToKKyAgICAgICAg
KiBjb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlOjpNdXRhYmxlUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok11dGFibGVSYW5nZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2U6OnNp
emUpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL011dGFibGVSYW5nZUxpc3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlz
dDo6Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpDb25zdEl0ZXJhdG9yOjpvcGVyYXRvci0+KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpD
b25zdEl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpDb25zdEl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpDb25z
dEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpNdXRhYmxlUmFuZ2VMaXN0OjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0OjphcHBlbmRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6ZXh0ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFuZ2VMaXN0Ojpp
c0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpNdXRhYmxlUmFu
Z2VMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0
YWJsZVJhbmdlTGlzdDo6ZGVidWdQcmludCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6aW5zZXJ0QmV0d2Vlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TXV0YWJsZVJhbmdlTGlzdDo6aW5pdGlhbGl6ZUZyb20p
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05GQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6Ok5GQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjpjcmVhdGVOb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6Om1lbW9yeVVzZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6YWRkVHJhbnNpdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjph
ZGRFcHNpbG9uVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6TkZBOjphZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5GQTo6Z3JhcGhT
aXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6
OnJlc3RvcmVUb0dyYXBoU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6cHJpbnRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6cHJpbnRUcmFuc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvTkZBLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6TkZBOjpyb290KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpORkE6OmFkZFJ1bGVJZCk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvTkZBTm9kZS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjplcHNpbG9uQ2xvc3VyZUV4Y2x1
ZGluZ1NlbGYpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnJlc29sdmVF
cHNpbG9uQ2xvc3VyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5v
ZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlOjpOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNl
dFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Tm9kZUlkU2V0
VG9VbmlxdWVOb2RlSWRTZXRUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRhdGFDb252ZXJ0ZXJXaXRoRXBzaWxvbkNsb3N1cmU6OmNv
bnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRhdGFDb252ZXJ0
ZXJXaXRoRXBzaWxvbkNsb3N1cmU6OmV4dGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6Y3JlYXRlQ29tYmluZWRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpjYW5Vc2VGYWxsYmFja1RyYW5zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmZpbmRCZXN0RmFsbGJhY2tUYXJnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldE9yQ3JlYXRlREZBTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnBvcHVsYXRlVHJhbnNpdGlvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmg6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlRlcm06OlRlcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKTogRGVsZXRl
ZC4KKwogMjAxNS0wNi0yOSAgSHl1bmd3b29rIExlZSAgPGh5dW5nd29vay5sZWVAbmF2ZXJjb3Jw
LmNvbT4KIAogICAgICAgICBbRUZMXSBQdXJnZSB1bnVzZWQgZmF2aWNvbnMgZnJvbSBJY29uRGF0
YWJhc2UgYWZ0ZXIgMzAgZGF5cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NjA2OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTA0MCw2ICsxMDQwLDEwIEBACiAJCTI2RjBDODlGMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjZGMEM4OUQxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNp
b25zQmFja2VuZC5jcHAgKi87IH07CiAJCTI2RjBDOEEwMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RjBDODlFMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkyNkY0MEQ0QTE0OTA0QTYzMDBDQTY3QzQgLyogRXZlbnRMb29wSU9TLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGNDBENDkxNDkwNEE2MzAw
Q0E2N0M0IC8qIEV2ZW50TG9vcElPUy5tbSAqLzsgfTsKKwkJMjZGNzU2QjAxQjNCNjVBQzAwMDVE
RDc5IC8qIE11dGFibGVSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZGNzU2QUUxQjNCNjVBQzAwMDVERDc5IC8qIE11dGFibGVSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI2Rjc1NkIx
MUIzQjY1QUMwMDA1REQ3OSAvKiBNdXRhYmxlUmFuZ2VMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY3NTZBRjFCM0I2NUFDMDAwNURENzkgLyog
TXV0YWJsZVJhbmdlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Rjc1NkIyMUIz
QjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNkY3NTZCNTFCM0I2OEYyMDAwNURENzkgLyogSW1t
dXRhYmxlTkZBTm9kZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2Rjc1NkI0MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2Rl
QnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTI2RjlBODM4MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGOUE4MzYx
OEEwNDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgKi87IH07CiAJCTI2
RjlBODM5MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjlBODM3MThBMDQ2QUMw
MEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkZBRTRDQzE4NTJFM0E1MDA0QzhDNDYgLyog
UmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkZBRTRDODE4NTJFM0E1MDA0QzhDNDYg
LyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi87IH07CkBAIC04
MTgyLDYgKzgxODYsMTAgQEAKIAkJMjZGMEM4OUQxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRF
eHRlbnNpb25zQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNkYwQzg5RTFBMkVDM0JFMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkY0MEQ0OTE0OTA0QTYzMDBD
QTY3QzQgLyogRXZlbnRMb29wSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRXZlbnRMb29wSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
NkY3NTZBRTFCM0I2NUFDMDAwNURENzkgLyogTXV0YWJsZVJhbmdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE11dGFibGVSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNkY3NTZBRjFCM0I2NUFDMDAwNURENzkgLyogTXV0YWJsZVJhbmdlTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhYmxlUmFuZ2VMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2Rjc1NkIyMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11
dGFibGVORkEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1tdXRhYmxlTkZB
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2Rjc1NkI0MUIzQjY4RjIwMDA1REQ3
OSAvKiBJbW11dGFibGVORkFOb2RlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbW11dGFibGVORkFOb2RlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNkY5QTgzNjE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdwb3J0Q29uZmln
dXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjlBODM3MThBMDQ2
QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmlld3BvcnRDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTI2RkFFNEM4MTg1MkUzQTUwMDRDOEM0NiAvKiBSZXNvdXJjZUhhbmRsZUNG
VVJMQ29ubmVjdGlvbkRlbGVnYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2OTAsNiArMTU2OTgsMTAgQEAKIAkJCQkyNkE1MTdG
QjFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmNwcCAqLywKIAkJCQkyNkE1MTdGQzFB
QjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FE
OTAwM0MyNEREIC8qIERGQU5vZGUuaCAqLywKKwkJCQkyNkY3NTZCMjFCM0I2NkY3MDAwNURENzkg
LyogSW1tdXRhYmxlTkZBLmggKi8sCisJCQkJMjZGNzU2QjQxQjNCNjhGMjAwMDVERDc5IC8qIElt
bXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggKi8sCisJCQkJMjZGNzU2QUUxQjNCNjVBQzAwMDVERDc5
IC8qIE11dGFibGVSYW5nZS5oICovLAorCQkJCTI2Rjc1NkFGMUIzQjY1QUMwMDA1REQ3OSAvKiBN
dXRhYmxlUmFuZ2VMaXN0LmggKi8sCiAJCQkJMjY5Mzk3MjUxQTRBNUZCRDAwRTgzNDlEIC8qIE5G
QS5jcHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRBNUI2NDAwRTgzNDlEIC8qIE5GQS5oICovLAogCQkJ
CTI2OTM5NzIwMUE0QTQxMkYwMEU4MzQ5RCAvKiBORkFOb2RlLmggKi8sCkBAIC0yNDI0Myw2ICsy
NDI1NSw3IEBACiAJCQkJNjJDRDMyNUExMTU3RTU3QzAwNjNCMEE3IC8qIEN1c3RvbUV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOENCNDEzRTBFODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJv
YXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkY3NTZCMDFCM0I2NUFDMDAwNURENzkg
LyogTXV0YWJsZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkEyMTE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2QTI0MTUwNUYwODEw
MDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTZD
RkQ0MTY5RDFERUQwMEQzQTBDNyAvKiBEYXRhYmFzZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjQ0MDQsNiArMjQ0MTcsNyBAQAogCQkJCTg1OTA5Q0U0MEFDQzdBN0UwMERGMDFGMSAvKiBE
T01DU1NVbmtub3duUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NThDMzgxQzBB
QThFMjk2MDBCMTg3QTQgLyogRE9NQ1NTVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QjQ5
OEYzMEFEQjMzNkEwMDkyNUNCQiAvKiBET01DU1NWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyNkY3NTZCMzFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NThDMzgzQzBBQThFRDgyMDBCMTg3QTQgLyogRE9NQ1NTVmFsdWVMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTkwOUQyQjBBQ0M3RDU1MDBERjAxRjEgLyogRE9NQ1NT
VmFsdWVMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5Q0NDMEI3NDdBNDQw
MDNFRDg5MCAvKiBET01DdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjYyMzgsNiArMjYyNTIsNyBAQAogCQkJCUJDRUE0ODZFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUQzMDI3NTRBMTJB
NUZFODQwMDRCRDgyOCAvKiBSZW5kZXJEZXRhaWxzTWFya2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzZFNUY3RjEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjMyQ0RBOTEzREY3RkE5MDBGMzRE
MTMgLyogUmVuZGVyZWRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzQTAyM0IxN0VC
MzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUI3
QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNjg2Miw2ICsyNjg3Nyw3IEBACiAJCQkJQjIyMjdBODEwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1BhdGhTZWdMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDc2QzlFNjExREY2QTBC
MDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODRBMDgyOTEyOEQ3ODY3MDAyREIxRjEgLyogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYu
aCBpbiBIZWFkZXJzICovLAorCQkJCTI2Rjc1NkIxMUIzQjY1QUMwMDA1REQ3OSAvKiBNdXRhYmxl
UmFuZ2VMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEI2Qjk3ODEyMEYxM0U1MDBCOEVGQUYg
LyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzFENDM1MTc4
RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0MxRDQzNjE3OEQ1QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ01vdmV0b1JlbC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5l
ZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlzaW9uIDE4NjA2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MywyNSArMTkzLDI1IEBAIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjph
ZGRQYXR0ZXJuKHVpbnQKICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uSWQpOwogfQogCi1z
dGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIHVuc2lnbmVkIG5mYVJv
b3RJZCwgUHJlZml4VHJlZVZlcnRleCYgcm9vdCwgc2l6ZV90IG1heE5GQVNpemUpCitzdGF0aWMg
dm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2Rl
QnVpbGRlciYmIHN1YnRyZWVSb290LCBQcmVmaXhUcmVlVmVydGV4JiByb290LCBzaXplX3QgbWF4
TkZBU2l6ZSkKIHsKICAgICAvLyBUaGlzIHJlY3Vyc2VzIHRoZSBzdWJ0cmVlIG9mIHRoZSBwcmVm
aXggdHJlZS4KICAgICAvLyBGb3IgZWFjaCBlZGdlIHRoYXQgaGFzIGZpeGVkIGxlbmd0aCAobm8g
cXVhbnRpZmllcnMgbGlrZSA/LCAqLCBvciArKSBpdCBnZW5lcmF0ZXMgdGhlIG5mYSBncmFwaCwK
ICAgICAvLyByZWN1cnNlcyBpbnRvIGNoaWxkcmVuLCBhbmQgZGVsZXRlcyBhbnkgcHJvY2Vzc2Vk
IGxlYWYgbm9kZXMuCiAgICAgc3RydWN0IEFjdGl2ZVN1YnRyZWUgewotICAgICAgICBBY3RpdmVT
dWJ0cmVlKFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleCwgdW5zaWduZWQgbmZhTm9kZUlkLCB1bnNp
Z25lZCBlZGdlSW5kZXgpCisgICAgICAgIEFjdGl2ZVN1YnRyZWUoUHJlZml4VHJlZVZlcnRleCYg
dmVydGV4LCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImJiBuZmFOb2RlLCB1bnNpZ25lZCBl
ZGdlSW5kZXgpCiAgICAgICAgICAgICA6IHZlcnRleCh2ZXJ0ZXgpCi0gICAgICAgICAgICAsIG5m
YU5vZGVJZChuZmFOb2RlSWQpCisgICAgICAgICAgICAsIG5mYU5vZGUoV1RGOjptb3ZlKG5mYU5v
ZGUpKQogICAgICAgICAgICAgLCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4OwotICAgICAgICB1bnNpZ25l
ZCBuZmFOb2RlSWQ7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZmFOb2Rl
OwogICAgICAgICB1bnNpZ25lZCBlZGdlSW5kZXg7CiAgICAgfTsKICAgICBWZWN0b3I8QWN0aXZl
U3VidHJlZT4gc3RhY2s7CiAgICAgaWYgKCFyb290LmVkZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAg
c3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUocm9vdCwgbmZhUm9vdElkLCAwKSk7CisgICAgICAg
IHN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHJvb3QsIFdURjo6bW92ZShzdWJ0cmVlUm9vdCks
IDApKTsKICAgICBib29sIG5mYVRvb0JpZyA9IGZhbHNlOwogICAgIAogICAgIC8vIEdlbmVyYXRl
IGdyYXBocyBmb3IgZWFjaCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcXVhbnRp
ZmllcnMuCkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0
cmVlKE5GQSYgbgogICAgICAgICBjb25zdCB1bnNpZ25lZCBlZGdlSW5kZXggPSBzdGFjay5sYXN0
KCkuZWRnZUluZGV4OwogICAgICAgICAKICAgICAgICAgLy8gT25seSBzdG9wIGdlbmVyYXRpbmcg
YW4gTkZBIGF0IGEgbGVhZiB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvcnJlY3QgTkZBLiBXZSBjb3Vs
ZCBnbyBzbGlnaHRseSBvdmVyIHRoZSBtYXhORkFTaXplLgotICAgICAgICBpZiAodmVydGV4LmVk
Z2VzLmlzRW1wdHkoKSAmJiBuZmEuZ3JhcGhTaXplKCkgPiBtYXhORkFTaXplKQorICAgICAgICBp
ZiAodmVydGV4LmVkZ2VzLmlzRW1wdHkoKSAmJiBuZmEubm9kZXMuc2l6ZSgpID4gbWF4TkZBU2l6
ZSkKICAgICAgICAgICAgIG5mYVRvb0JpZyA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAo
ZWRnZUluZGV4IDwgdmVydGV4LmVkZ2VzLnNpemUoKSkgewpAQCAtMjM3LDEwICsyMzcsMTAgQEAg
c3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbgogICAgICAgICAgICAgICAg
IHN0YWNrLmxhc3QoKS5lZGdlSW5kZXgrKzsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgc3VidHJlZVJv
b3RJZCA9IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgc3RhY2subGFzdCgpLm5mYU5vZGVJ
ZCwgZWRnZS5jaGlsZC0+ZmluYWxBY3Rpb25zKTsKKworICAgICAgICAgICAgSW1tdXRhYmxlQ2hh
ck5GQU5vZGVCdWlsZGVyIG5ld05vZGUgPSBlZGdlLnRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIHN0
YWNrLmxhc3QoKS5uZmFOb2RlLCBlZGdlLmNoaWxkLT5maW5hbEFjdGlvbnMpOwogICAgICAgICAg
ICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkpOwotICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFj
dGl2ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIHN1YnRyZWVSb290SWQsIDApKTsKKyAgICAg
ICAgICAgIHN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKCplZGdlLmNoaWxkLmdldCgpLCBXVEY6
Om1vdmUobmV3Tm9kZSksIDApKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VS
VChlZGdlSW5kZXggPT0gdmVydGV4LmVkZ2VzLnNpemUoKSk7CiAgICAgICAgICAgICB2ZXJ0ZXgu
ZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oUHJlZml4VHJlZUVkZ2UmIGVkZ2UpCkBAIC0yODYs
MjIgKzI4NiwyNiBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6cHJvY2Vzc05GQXMoc2l6CiAg
ICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghc3RhY2suaXNFbXB0eSgpLCAiQXQgbGVhc3QgdGhlIHJvb3Qgc2hvdWxk
IGJlIGluIHRoZSBzdGFjayIpOwotICAgICAgICAKKwogICAgICAgICAvLyBNYWtlIGFuIE5GQSB3
aXRoIHRoZSBzdWJ0cmVlcyBmb3Igd2hvbSB0aGlzIGlzIGFsc28gdGhlIGxhc3QgcXVhbnRpZmll
ciAob3Igd2hvIGFsc28gaGF2ZSBubyBxdWFudGlmaWVyKS4KICAgICAgICAgTkZBIG5mYTsKLSAg
ICAgICAgLy8gUHV0IHRoZSBwcmVmaXggaW50byB0aGUgTkZBLgotICAgICAgICB1bnNpZ25lZCBw
cmVmaXhFbmQgPSBuZmEucm9vdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXN0YWNrW2ldLT5l
ZGdlcy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgY29uc3QgUHJlZml4VHJlZUVkZ2UmIGVkZ2Ug
PSBzdGFja1tpXS0+ZWRnZXMubGFzdCgpOwotICAgICAgICAgICAgcHJlZml4RW5kID0gZWRnZS50
ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBwcmVmaXhFbmQsIGVkZ2UuY2hpbGQtPmZpbmFsQWN0aW9u
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUHV0IHRoZSBub24tcXVhbnRpZmllZCB2ZXJ0aWNl
cyBpbiB0aGUgc3VidHJlZSBpbnRvIHRoZSBORkEgYW5kIGRlbGV0ZSB0aGVtLgotICAgICAgICBB
U1NFUlQoc3RhY2subGFzdCgpKTsKLSAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKG5mYSwg
cHJlZml4RW5kLCAqc3RhY2subGFzdCgpLCBtYXhORkFTaXplKTsKLSAgICAgICAgCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGUgcHJlZml4IGludG8gdGhlIE5GQS4KKyAgICAgICAg
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBsYXN0Tm9kZShuZmEpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrLnNpemUoKSAtIDE7ICsraSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFByZWZpeFRyZWVFZGdlJiBlZGdlID0gc3RhY2tbaV0tPmVkZ2Vz
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3
Tm9kZSA9IGVkZ2UudGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgbGFzdE5vZGUsIGVkZ2UuY2hpbGQt
PmZpbmFsQWN0aW9ucyk7CisgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBXVEY6Om1vdmUobmV3
Tm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFB1dCB0aGUgbm9uLXF1YW50
aWZpZWQgdmVydGljZXMgaW4gdGhlIHN1YnRyZWUgaW50byB0aGUgTkZBIGFuZCBkZWxldGUgdGhl
bS4KKyAgICAgICAgICAgIEFTU0VSVChzdGFjay5sYXN0KCkpOworICAgICAgICAgICAgZ2VuZXJh
dGVORkFGb3JTdWJ0cmVlKG5mYSwgV1RGOjptb3ZlKGxhc3ROb2RlKSwgKnN0YWNrLmxhc3QoKSwg
bWF4TkZBU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgbmZhLmZpbmFsaXplKCk7CisKICAgICAg
ICAgaGFuZGxlcihXVEY6Om1vdmUobmZhKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENsZWFu
IHVwIGFueSBwcm9jZXNzZWQgbGVhZiBub2Rlcy4KICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPiAxKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5jcHAJKHJldmlzaW9uIDE4NjA2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
OSw5ICszMDksNyBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAg
ICAgICAgIC8vIE91ciBieXRlY29kZSBpbnRlcnByZXRlciBleHBlY3RzIHRvIGhhdmUgYXQgbGVh
c3Qgb25lIERGQSwgc28gaWYgd2UgaGF2ZW4ndCBzZWVuIGFueQogICAgICAgICAvLyBjcmVhdGUg
YSBkdW1teSBvbmUgYW5kIGFkZCBhbnkgdW5pdmVyc2FsIGFjdGlvbnMuCiAKLSAgICAgICAgTkZB
IGR1bW15TkZBOwotICAgICAgICBERkEgZHVtbXlERkEgPSBORkFUb0RGQTo6Y29udmVydChkdW1t
eU5GQSk7Ci0KKyAgICAgICAgREZBIGR1bW15REZBID0gREZBOjplbXB0eSgpOwogICAgICAgICBh
ZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZHVtbXlERkEsIHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0
RG9tYWlucyk7CiAKICAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKQEAgLTM3
NiwxMCArMzc0LDggQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQog
ICAgIGlmICghZmlyc3RORkFXaXRoRG9tYWluc1NlZW4pIHsKICAgICAgICAgLy8gT3VyIGJ5dGVj
b2RlIGludGVycHJldGVyIGV4cGVjdHMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgREZBLCBzbyBpZiB3
ZSBoYXZlbid0IHNlZW4gYW55CiAgICAgICAgIC8vIGNyZWF0ZSBhIGR1bW15IG9uZSBhbmQgYWRk
IGFueSB1bml2ZXJzYWwgYWN0aW9ucy4KLSAgICAgICAgCi0gICAgICAgIE5GQSBkdW1teU5GQTsK
LSAgICAgICAgREZBIGR1bW15REZBID0gTkZBVG9ERkE6OmNvbnZlcnQoZHVtbXlORkEpOwotICAg
ICAgICAKKworICAgICAgICBERkEgZHVtbXlERkEgPSBERkE6OmVtcHR5KCk7CiAgICAgICAgIGFk
ZFVuaXZlcnNhbEFjdGlvbnNUb0RGQShkdW1teURGQSwgdW5pdmVyc2FsQWN0aW9uc1dpdGhEb21h
aW5zKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHJldmlzaW9uIDE4
NjA2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAorREZBIERGQTo6ZW1wdHkoKQoreworICAgIERGQSBu
ZXdERkE7CisgICAgbmV3REZBLm5vZGVzLmFwcGVuZChERkFOb2RlKCkpOworICAgIHJldHVybiBu
ZXdERkE7Cit9CisKIHNpemVfdCBERkE6Om1lbW9yeVVzZWQoKSBjb25zdAogewogICAgIHJldHVy
biBzaXplb2YoREZBKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJ
KHJldmlzaW9uIDE4NjA2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucyB7CiAKIC8vIFRoZSBERkEgYWJzdHJhY3QgYSBwYXJ0aWFsIERGQSBncmFwaCBpbiBh
IGNvbXBhY3QgZm9ybS4KIHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBERkEgeworICAgIHN0YXRpYyBE
RkEgZW1wdHkoKTsKKwogICAgIHZvaWQgbWluaW1pemUoKTsKICAgICB1bnNpZ25lZCBncmFwaFNp
emUoKSBjb25zdDsKICAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9JbW11dGFibGVORkEuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1t
dXRhYmxlTkZBX2gKKyNkZWZpbmUgSW1tdXRhYmxlTkZBX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+CitzdHJ1Y3QgSW1tdXRhYmxlUmFuZ2UgeworICAgIHVpbnQzMl90
IHRhcmdldFN0YXJ0OworICAgIHVpbnQzMl90IHRhcmdldEVuZDsKKyAgICBDaGFyYWN0ZXJUeXBl
IGZpcnN0OworICAgIENoYXJhY3RlclR5cGUgbGFzdDsKK307CisKK3N0cnVjdCBJbW11dGFibGVO
RkFOb2RlIHsKKyAgICB1aW50MzJfdCByYW5nZXNTdGFydCB7IDAgfTsKKyAgICB1aW50MzJfdCBy
YW5nZXNFbmQgeyAwIH07CisgICAgdWludDMyX3QgZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzU3Rh
cnQgeyAwIH07CisgICAgdWludDMyX3QgZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzRW5kIHsgMCB9
OworICAgIHVpbnQzMl90IGFjdGlvblN0YXJ0IHsgMCB9OworICAgIHVpbnQzMl90IGFjdGlvbkVu
ZCB7IDAgfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBBY3Rpb25UeXBlPgorc3RydWN0IEltbXV0YWJsZU5GQSB7CisgICAgVmVjdG9yPEltbXV0YWJs
ZU5GQU5vZGU+IG5vZGVzOworICAgIFZlY3RvcjxJbW11dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBl
Pj4gdHJhbnNpdGlvbnM7CisgICAgVmVjdG9yPHVpbnQzMl90PiB0YXJnZXRzOworICAgIFZlY3Rv
cjx1aW50MzJfdD4gZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0czsKKyAgICBWZWN0b3I8QWN0aW9u
VHlwZT4gYWN0aW9uczsKKworICAgIHN0cnVjdCBDb25zdFRhcmdldEl0ZXJhdG9yIHsKKyAgICAg
ICAgY29uc3QgSW1tdXRhYmxlTkZBJiBpbW11dGFibGVORkE7CisgICAgICAgIHVpbnQzMl90IHBv
c2l0aW9uOworCisgICAgICAgIGNvbnN0IHVpbnQzMl90JiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBpbW11dGFibGVORkEudGFyZ2V0c1twb3NpdGlvbl07IH0KKyAgICAgICAgY29uc3QgdWlu
dDMyX3QqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmaW1tdXRhYmxlTkZBLnRhcmdldHNb
cG9zaXRpb25dOyB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbnN0VGFyZ2V0
SXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoJmlt
bXV0YWJsZU5GQSA9PSAmb3RoZXIuaW1tdXRhYmxlTkZBKTsKKyAgICAgICAgICAgIHJldHVybiBw
b3NpdGlvbiA9PSBvdGhlci5wb3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ29uc3RUYXJnZXRJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICAgICAgQ29uc3RUYXJnZXRJdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrcG9zaXRpb247CisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IEl0ZXJhYmxlQ29u
c3RUYXJnZXRzIHsKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlTkZBJiBpbW11dGFibGVORkE7Cisg
ICAgICAgIHVpbnQzMl90IHRhcmdldFN0YXJ0OworICAgICAgICB1aW50MzJfdCB0YXJnZXRFbmQ7
CisKKyAgICAgICAgQ29uc3RUYXJnZXRJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHsg
aW1tdXRhYmxlTkZBLCB0YXJnZXRTdGFydCB9OyB9CisgICAgICAgIENvbnN0VGFyZ2V0SXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyBpbW11dGFibGVORkEsIHRhcmdldEVuZCB9OyB9Cisg
ICAgfTsKKworICAgIHN0cnVjdCBDb25zdFJhbmdlSXRlcmF0b3IgeworICAgICAgICBjb25zdCBJ
bW11dGFibGVORkEmIGltbXV0YWJsZU5GQTsKKyAgICAgICAgdWludDMyX3QgcG9zaXRpb247CisK
KyAgICAgICAgY29uc3QgSW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4mIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIGltbXV0YWJsZU5GQS50cmFuc2l0aW9uc1twb3NpdGlvbl07IH0KKyAg
ICAgICAgY29uc3QgSW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4qIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmaW1tdXRhYmxlTkZBLnRyYW5zaXRpb25zW3Bvc2l0aW9uXTsgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb25zdFJhbmdlSXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoJmltbXV0YWJsZU5GQSA9PSAmb3Ro
ZXIuaW1tdXRhYmxlTkZBKTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiA9PSBvdGhlci5w
b3NpdGlvbjsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29uc3RS
YW5nZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
KworICAgICAgICBDb25zdFJhbmdlSXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK3Bvc2l0aW9uOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CisKKyAgICAgICAgSXRlcmFibGVDb25zdFRhcmdldHMgZGF0YSgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZVJhbmdlPENoYXJhY3RlclR5cGU+JiByYW5n
ZSA9IGltbXV0YWJsZU5GQS50cmFuc2l0aW9uc1twb3NpdGlvbl07CisgICAgICAgICAgICByZXR1
cm4geyBpbW11dGFibGVORkEsIHJhbmdlLnRhcmdldFN0YXJ0LCByYW5nZS50YXJnZXRFbmQgfTsK
KyAgICAgICAgfTsKKyAgICB9OworCisgICAgc3RydWN0IEl0ZXJhYmxlQ29uc3RSYW5nZSB7Cisg
ICAgICAgIGNvbnN0IEltbXV0YWJsZU5GQSYgaW1tdXRhYmxlTkZBOworICAgICAgICB1aW50MzJf
dCByYW5nZXNTdGFydDsKKyAgICAgICAgdWludDMyX3QgcmFuZ2VzRW5kOworCisgICAgICAgIENv
bnN0UmFuZ2VJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHsgaW1tdXRhYmxlTkZBLCBy
YW5nZXNTdGFydCB9OyB9CisgICAgICAgIENvbnN0UmFuZ2VJdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiB7IGltbXV0YWJsZU5GQSwgcmFuZ2VzRW5kIH07IH0KKworI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgICAgICB2b2lkIGRlYnVnUHJpbnQo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDog
KnRoaXMpCisgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIgICAgJWQtJWQiLCByYW5nZS5m
aXJzdCwgcmFuZ2UubGFzdCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH07CisKKyAgICBJdGVy
YWJsZUNvbnN0UmFuZ2UgdHJhbnNpdGlvbnNGb3JOb2RlKHVpbnQzMl90IG5vZGVJZCkgY29uc3QK
KyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZU5GQU5vZGUmIG5vZGUgPSBub2Rlc1tub2Rl
SWRdOworICAgICAgICByZXR1cm4geyAqdGhpcywgbm9kZS5yYW5nZXNTdGFydCwgbm9kZS5yYW5n
ZXNFbmQgfTsKKyAgICB9OworCisgICAgdWludDMyX3Qgcm9vdCgpIGNvbnN0CisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZXMuaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZSgpCisgICAgeworICAgICAgICBub2Rlcy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICB0cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICB0
YXJnZXRzLnNocmlua1RvRml0KCk7CisgICAgICAgIGVwc2lsb25UcmFuc2l0aW9uc1RhcmdldHMu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgYWN0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgIH0KKwor
ICAgIHNpemVfdCBtZW1vcnlVc2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBub2Rl
cy5jYXBhY2l0eSgpICogc2l6ZW9mKEltbXV0YWJsZU5GQU5vZGUpCisgICAgICAgICAgICArIHRy
YW5zaXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2YoSW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlw
ZT4pCisgICAgICAgICAgICArIHRhcmdldHMuY2FwYWNpdHkoKSAqIHNpemVvZih1aW50MzJfdCkK
KyAgICAgICAgICAgICsgZXBzaWxvblRyYW5zaXRpb25zVGFyZ2V0cy5jYXBhY2l0eSgpICogc2l6
ZW9mKHVpbnQzMl90KQorICAgICAgICAgICAgKyBhY3Rpb25zLmNhcGFjaXR5KCkgKiBzaXplb2Yo
QWN0aW9uVHlwZSk7CisgICAgfQorfTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYgLy8gSW1tdXRh
YmxlTkZBX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJs
ZU5GQU5vZGVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltbXV0
YWJsZU5GQU5vZGVCdWlsZGVyX2gKKyNkZWZpbmUgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXJfaAor
CisjaW5jbHVkZSAiSW1tdXRhYmxlTkZBLmgiCisjaW5jbHVkZSAiTXV0YWJsZVJhbmdlTGlzdC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cyB7CisKKy8vIEEgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIgbGV0IHlvdSBidWlsZCBhIE5GQSBu
b2RlIGJ5IGFkZGluZyBzdGF0ZXMgYW5kIGxpbmtpbmcgd2l0aCBvdGhlciBub2Rlcy4KKy8vIFdo
ZSBhIGJ1aWxkZXIgaXMgZGVzdHJ1Y3RlZCwgYWxsIGl0cyBwcm9wZXJ0aWVzIGFyZSBmaW5hbGl6
ZWQgaW50byB0aGUgTkZBLiBVc2luZyB0aGUgTkEgd2l0aCBhIGxpdmUKKy8vIGJ1aWxkZXIgcmVz
dWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3JzLgordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CitjbGFzcyBJbW11dGFibGVORkFOb2RlQnVpbGRl
ciB7CisgICAgdHlwZWRlZiBJbW11dGFibGVORkE8Q2hhcmFjdGVyVHlwZSwgQWN0aW9uVHlwZT4g
VHlwZWRJbW11dGFibGVORkE7CisgICAgdHlwZWRlZiBIYXNoU2V0PHVpbnQzMl90LCBEZWZhdWx0
SGFzaDx1aW50MzJfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiBUYXJnZXRTZXQ7CitwdWJsaWM6CisgICAgSW1tdXRhYmxlTkZBTm9kZUJ1aWxk
ZXIoKSB7IH0KKworICAgIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKFR5cGVkSW1tdXRhYmxlTkZB
JiBpbW11dGFibGVORkEpCisgICAgICAgIDogbV9pbW11dGFibGVORkEoJmltbXV0YWJsZU5GQSkK
KyAgICAgICAgLCBtX2ZpbmFsaXplZChmYWxzZSkKKyAgICB7CisgICAgICAgIG1fbm9kZUlkID0g
bV9pbW11dGFibGVORkEtPm5vZGVzLnNpemUoKTsKKyAgICAgICAgbV9pbW11dGFibGVORkEtPm5v
ZGVzLmFwcGVuZChJbW11dGFibGVORkFOb2RlKCkpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CisKKyAgICBJbW11
dGFibGVORkFOb2RlQnVpbGRlcihJbW11dGFibGVORkFOb2RlQnVpbGRlciYmIG90aGVyKQorICAg
ICAgICA6IG1faW1tdXRhYmxlTkZBKG90aGVyLm1faW1tdXRhYmxlTkZBKQorICAgICAgICAsIG1f
cmFuZ2VzKFdURjo6bW92ZShvdGhlci5tX3JhbmdlcykpCisgICAgICAgICwgbV9lcHNpbG9uVHJh
bnNpdGlvblRhcmdldHMoV1RGOjptb3ZlKG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzKSkKKyAg
ICAgICAgLCBtX2FjdGlvbnMoV1RGOjptb3ZlKG90aGVyLm1fYWN0aW9ucykpCisgICAgICAgICwg
bV9ub2RlSWQob3RoZXIubV9ub2RlSWQpCisgICAgICAgICwgbV9maW5hbGl6ZWQob3RoZXIubV9m
aW5hbGl6ZWQpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1faXNEaXNjb25uZWN0
ZWQob3RoZXIubV9pc0Rpc2Nvbm5lY3RlZCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgb3RoZXIu
bV9pbW11dGFibGVORkEgPSBudWxscHRyOworICAgICAgICBvdGhlci5tX2ZpbmFsaXplZCA9IHRy
dWU7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBvdGhlci5tX2lzRGlzY29ubmVjdGVk
ID0gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyAgICB+SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pc0Rpc2Nvbm5lY3RlZCwg
IlRoaXMgbm9kZXMgaXMgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZyBhbmQgaXMgbm90IHJlYWNo
ZWQgYnkgYW55IG90aGVyIG5vZGUuIik7CisKKyAgICAgICAgaWYgKCFtX2ZpbmFsaXplZCkKKyAg
ICAgICAgICAgIGZpbmFsaXplKCk7CisgICAgfQorCisgICAgc3RydWN0IFRyaXZpYWxSYW5nZSB7
CisgICAgICAgIENoYXJhY3RlclR5cGUgZmlyc3Q7CisgICAgICAgIENoYXJhY3RlclR5cGUgbGFz
dDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBGYWtlUmFuZ2VJdGVyYXRvciB7CisgICAgICAg
IGNvbnN0IFRyaXZpYWxSYW5nZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmFuZ2U7IH0K
KyAgICAgICAgY29uc3QgVHJpdmlhbFJhbmdlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JnJhbmdlOyB9CisgICAgICAgIHVpbnQzMl90IGRhdGEoKSBjb25zdCB7IHJldHVybiB0YXJnZXRJ
ZDsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRmFrZVJhbmdlSXRlcmF0b3ImIG90
aGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy0+aXNFbmQgPT0gb3RoZXIu
aXNFbmQ7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZha2VSYW5n
ZUl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAg
RmFrZVJhbmdlSXRlcmF0b3Igb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlz
RW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVHJpdmlhbFJhbmdlIHJhbmdlOworICAgICAgICB1aW50MzJfdCB0YXJnZXRJ
ZDsKKyAgICAgICAgYm9vbCBpc0VuZDsKKyAgICB9OworCisgICAgdm9pZCBhZGRUcmFuc2l0aW9u
KENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCwgY29uc3QgSW1tdXRhYmxl
TkZBTm9kZUJ1aWxkZXImIHRhcmdldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9maW5hbGl6
ZWQpOworICAgICAgICBBU1NFUlQobV9pbW11dGFibGVORkEpOworICAgICAgICBBU1NFUlQobV9p
bW11dGFibGVORkEgPT0gdGFyZ2V0Lm1faW1tdXRhYmxlTkZBKTsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgIG1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGFyZ2V0Lm1f
aXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKKyNlbmRpZgorCisgICAgICAgIHN0cnVjdCBDb252ZXJ0
ZXIgeworICAgICAgICAgICAgVGFyZ2V0U2V0IGNvbnZlcnQodWludDMyX3QgdGFyZ2V0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBUYXJnZXRTZXQoeyB0YXJnZXQgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGV4dGVuZChUYXJnZXRTZXQmIGV4aXN0
aW5nVGFyZ2V0cywgdWludDMyX3QgdGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGV4aXN0aW5nVGFyZ2V0cy5hZGQodGFyZ2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIENvbnZlcnRlciBjb252ZXJ0ZXI7CisgICAgICAgIG1fcmFu
Z2VzLmV4dGVuZChGYWtlUmFuZ2VJdGVyYXRvciB7IHsgZmlyc3QsIGxhc3QgfSwgdGFyZ2V0Lm1f
bm9kZUlkLCBmYWxzZSB9LCBGYWtlUmFuZ2VJdGVyYXRvciB7IHsgMCwgMCB9LCB0YXJnZXQubV9u
b2RlSWQsIHRydWUgfSwgY29udmVydGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEVwc2lsb25U
cmFuc2l0aW9uKGNvbnN0IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0YXJnZXQpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fZmluYWxpemVkKTsKKyAgICAgICAgQVNTRVJUKG1faW1tdXRhYmxl
TkZBKTsKKyAgICAgICAgQVNTRVJUKG1faW1tdXRhYmxlTkZBID09IHRhcmdldC5tX2ltbXV0YWJs
ZU5GQSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0g
ZmFsc2U7CisgICAgICAgIHRhcmdldC5tX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7CisjZW5kaWYK
KyAgICAgICAgbV9lcHNpbG9uVHJhbnNpdGlvblRhcmdldHMuYWRkKHRhcmdldC5tX25vZGVJZCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWN0aW9uSXRlcmF0b3I+CisgICAgdm9p
ZCBzZXRBY3Rpb25zKEFjdGlvbkl0ZXJhdG9yIGJlZ2luLCBBY3Rpb25JdGVyYXRvciBlbmQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fZmluYWxpemVkKTsKKyAgICAgICAgQVNTRVJUKG1faW1t
dXRhYmxlTkZBKTsKKworICAgICAgICBtX2FjdGlvbnMuYWRkKGJlZ2luLCBlbmQpOworICAgIH0K
KworICAgIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiBvcGVyYXRvcj0oSW1tdXRhYmxlTkZBTm9k
ZUJ1aWxkZXImJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghbV9maW5hbGl6ZWQpCisgICAg
ICAgICAgICBmaW5hbGl6ZSgpOworCisgICAgICAgIG1faW1tdXRhYmxlTkZBID0gb3RoZXIubV9p
bW11dGFibGVORkE7CisgICAgICAgIG1fcmFuZ2VzID0gV1RGOjptb3ZlKG90aGVyLm1fcmFuZ2Vz
KTsKKyAgICAgICAgbV9lcHNpbG9uVHJhbnNpdGlvblRhcmdldHMgPSBXVEY6Om1vdmUob3RoZXIu
bV9lcHNpbG9uVHJhbnNpdGlvblRhcmdldHMpOworICAgICAgICBtX2FjdGlvbnMgPSBXVEY6Om1v
dmUob3RoZXIubV9hY3Rpb25zKTsKKyAgICAgICAgbV9ub2RlSWQgPSBvdGhlci5tX25vZGVJZDsK
KyAgICAgICAgbV9maW5hbGl6ZWQgPSBvdGhlci5tX2ZpbmFsaXplZDsKKworICAgICAgICBvdGhl
ci5tX2ltbXV0YWJsZU5GQSA9IG51bGxwdHI7CisgICAgICAgIG90aGVyLm1fZmluYWxpemVkID0g
dHJ1ZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1faXNEaXNjb25uZWN0ZWQgPSBv
dGhlci5tX2lzRGlzY29ubmVjdGVkOworICAgICAgICBvdGhlci5tX2lzRGlzY29ubmVjdGVkID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGZpbmFsaXplKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IW1fZmluYWxpemVkLCAiVGhlIEFQSSBjb250cmFjdCBpcyB0aGF0IHRoZSBidWlsZGVyIGNhbiBv
bmx5IGJlIGZpbmFsaXplZCBvbmNlLiIpOworICAgICAgICBtX2ZpbmFsaXplZCA9IHRydWU7Cisg
ICAgICAgIEltbXV0YWJsZU5GQU5vZGUmIGltbXV0YWJsZU5GQU5vZGUgPSBtX2ltbXV0YWJsZU5G
QS0+bm9kZXNbbV9ub2RlSWRdOworICAgICAgICBzaW5rQWN0aW9ucyhpbW11dGFibGVORkFOb2Rl
KTsKKyAgICAgICAgc2lua0Vwc2lsb25UcmFuc2l0aW9ucyhpbW11dGFibGVORkFOb2RlKTsKKyAg
ICAgICAgc2lua1RyYW5zaXRpb25zKGltbXV0YWJsZU5GQU5vZGUpOworICAgIH0KKworICAgIHZv
aWQgc2lua0FjdGlvbnMoSW1tdXRhYmxlTkZBTm9kZSYgaW1tdXRhYmxlTkZBTm9kZSkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGFjdGlvblN0YXJ0ID0gbV9pbW11dGFibGVORkEtPmFjdGlvbnMu
c2l6ZSgpOworICAgICAgICBmb3IgKGNvbnN0IEFjdGlvblR5cGUmIGFjdGlvbiA6IG1fYWN0aW9u
cykKKyAgICAgICAgICAgIG1faW1tdXRhYmxlTkZBLT5hY3Rpb25zLmFwcGVuZChhY3Rpb24pOwor
ICAgICAgICB1bnNpZ25lZCBhY3Rpb25FbmQgPSBtX2ltbXV0YWJsZU5GQS0+YWN0aW9ucy5zaXpl
KCk7CisgICAgICAgIGltbXV0YWJsZU5GQU5vZGUuYWN0aW9uU3RhcnQgPSBhY3Rpb25TdGFydDsK
KyAgICAgICAgaW1tdXRhYmxlTkZBTm9kZS5hY3Rpb25FbmQgPSBhY3Rpb25FbmQ7CisgICAgfQor
CisgICAgdm9pZCBzaW5rVHJhbnNpdGlvbnMoSW1tdXRhYmxlTkZBTm9kZSYgaW1tdXRhYmxlTkZB
Tm9kZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHRyYW5zaXRpb25zU3RhcnQgPSBtX2ltbXV0
YWJsZU5GQS0+dHJhbnNpdGlvbnMuc2l6ZSgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJh
bmdlIDogbV9yYW5nZXMpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldHNTdGFydCA9IG1f
aW1tdXRhYmxlTkZBLT50YXJnZXRzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodWludDMyX3Qg
dGFyZ2V0IDogcmFuZ2UuZGF0YSkKKyAgICAgICAgICAgICAgICBtX2ltbXV0YWJsZU5GQS0+dGFy
Z2V0cy5hcHBlbmQodGFyZ2V0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldHNFbmQgPSBt
X2ltbXV0YWJsZU5GQS0+dGFyZ2V0cy5zaXplKCk7CisKKyAgICAgICAgICAgIG1faW1tdXRhYmxl
TkZBLT50cmFuc2l0aW9ucy5hcHBlbmQoSW1tdXRhYmxlUmFuZ2U8Q2hhcmFjdGVyVHlwZT4geyB0
YXJnZXRzU3RhcnQsIHRhcmdldHNFbmQsIHJhbmdlLmZpcnN0LCByYW5nZS5sYXN0IH0pOworICAg
ICAgICB9CisgICAgICAgIHVuc2lnbmVkIHRyYW5zaXRpb25zRW5kID0gbV9pbW11dGFibGVORkEt
PnRyYW5zaXRpb25zLnNpemUoKTsKKworICAgICAgICBpbW11dGFibGVORkFOb2RlLnJhbmdlc1N0
YXJ0ID0gdHJhbnNpdGlvbnNTdGFydDsKKyAgICAgICAgaW1tdXRhYmxlTkZBTm9kZS5yYW5nZXNF
bmQgPSB0cmFuc2l0aW9uc0VuZDsKKyAgICB9CisKKyAgICB2b2lkIHNpbmtFcHNpbG9uVHJhbnNp
dGlvbnMoSW1tdXRhYmxlTkZBTm9kZSYgaW1tdXRhYmxlTkZBTm9kZSkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0ID0gbV9pbW11dGFibGVORkEtPmVwc2lsb25UcmFuc2l0aW9uc1Rhcmdl
dHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVpbnQzMl90IHRhcmdldCA6IG1fZXBzaWxvblRyYW5z
aXRpb25UYXJnZXRzKQorICAgICAgICAgICAgbV9pbW11dGFibGVORkEtPmVwc2lsb25UcmFuc2l0
aW9uc1RhcmdldHMuYXBwZW5kKHRhcmdldCk7CisgICAgICAgIHVuc2lnbmVkIGVuZCA9IG1faW1t
dXRhYmxlTkZBLT5lcHNpbG9uVHJhbnNpdGlvbnNUYXJnZXRzLnNpemUoKTsKKworICAgICAgICBp
bW11dGFibGVORkFOb2RlLmVwc2lsb25UcmFuc2l0aW9uVGFyZ2V0c1N0YXJ0ID0gc3RhcnQ7Cisg
ICAgICAgIGltbXV0YWJsZU5GQU5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzRW5kID0gZW5k
OworICAgIH0KKworICAgIFR5cGVkSW1tdXRhYmxlTkZBKiBtX2ltbXV0YWJsZU5GQSB7IG51bGxw
dHIgfTsKKyAgICBNdXRhYmxlUmFuZ2VMaXN0PENoYXJhY3RlclR5cGUsIFRhcmdldFNldD4gbV9y
YW5nZXM7CisgICAgVGFyZ2V0U2V0IG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzOworICAgIEhh
c2hTZXQ8QWN0aW9uVHlwZSwgV1RGOjpJbnRIYXNoPEFjdGlvblR5cGU+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPEFjdGlvblR5cGU+PiBtX2FjdGlvbnM7CisgICAgdWludDMy
X3QgbV9ub2RlSWQ7CisgICAgYm9vbCBtX2ZpbmFsaXplZCB7IHRydWUgfTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgbXV0YWJsZSBib29sIG1faXNEaXNjb25uZWN0ZWQgeyBmYWxzZSB9Owor
I2VuZGlmCit9OworCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBJbW11dGFibGVORkFOb2RlQnVp
bGRlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFu
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9NdXRh
YmxlUmFuZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL011dGFibGVSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBNdXRhYmxlUmFuZ2VfaAorI2RlZmluZSBNdXRhYmxlUmFuZ2VfaAor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgRGF0YVR5cGU+CitjbGFzcyBNdXRhYmxlUmFuZ2UgeworICAg
IHR5cGVkZWYgTXV0YWJsZVJhbmdlPENoYXJhY3RlclR5cGUsIERhdGFUeXBlPiBUeXBlZE11dGFi
bGVSYW5nZTsKK3B1YmxpYzoKKyAgICBNdXRhYmxlUmFuZ2UodWludDMyX3QgbmV4dFJhbmdlSW5k
ZXgsIENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCkKKyAgICAgICAgOiBu
ZXh0UmFuZ2VJbmRleChuZXh0UmFuZ2VJbmRleCkKKyAgICAgICAgLCBmaXJzdChmaXJzdCkKKyAg
ICAgICAgLCBsYXN0KGxhc3QpCisgICAgeworICAgICAgICBBU1NFUlQoZmlyc3QgPD0gbGFzdCk7
CisgICAgfQorCisgICAgTXV0YWJsZVJhbmdlKGNvbnN0IERhdGFUeXBlJiBkYXRhLCB1aW50MzJf
dCBuZXh0UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0
KQorICAgICAgICA6IGRhdGEoZGF0YSkKKyAgICAgICAgLCBuZXh0UmFuZ2VJbmRleChuZXh0UmFu
Z2VJbmRleCkKKyAgICAgICAgLCBmaXJzdChmaXJzdCkKKyAgICAgICAgLCBsYXN0KGxhc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoZmlyc3QgPD0gbGFzdCk7CisgICAgfQorCisgICAgTXV0YWJs
ZVJhbmdlKERhdGFUeXBlJiYgZGF0YSwgdWludDMyX3QgbmV4dFJhbmdlSW5kZXgsIENoYXJhY3Rl
clR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFzdCkKKyAgICAgICAgOiBkYXRhKFdURjo6bW92
ZShkYXRhKSkKKyAgICAgICAgLCBuZXh0UmFuZ2VJbmRleChuZXh0UmFuZ2VJbmRleCkKKyAgICAg
ICAgLCBmaXJzdChmaXJzdCkKKyAgICAgICAgLCBsYXN0KGxhc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoZmlyc3QgPD0gbGFzdCk7CisgICAgfQorCisgICAgTXV0YWJsZVJhbmdlKE11dGFibGVS
YW5nZSYmIG90aGVyKQorICAgICAgICA6IGRhdGEoV1RGOjptb3ZlKG90aGVyLmRhdGEpKQorICAg
ICAgICAsIG5leHRSYW5nZUluZGV4KG90aGVyLm5leHRSYW5nZUluZGV4KQorICAgICAgICAsIGZp
cnN0KG90aGVyLmZpcnN0KQorICAgICAgICAsIGxhc3Qob3RoZXIubGFzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChmaXJzdCA8PSBsYXN0KTsKKyAgICB9CisKKyAgICBUeXBlZE11dGFibGVSYW5n
ZSYgb3BlcmF0b3I9KFR5cGVkTXV0YWJsZVJhbmdlJiYgb3RoZXIpCisgICAgeworICAgICAgICBk
YXRhID0gV1RGOjptb3ZlKG90aGVyLmRhdGEpOworICAgICAgICBuZXh0UmFuZ2VJbmRleCA9IFdU
Rjo6bW92ZShvdGhlci5uZXh0UmFuZ2VJbmRleCk7CisgICAgICAgIGZpcnN0ID0gV1RGOjptb3Zl
KG90aGVyLmZpcnN0KTsKKyAgICAgICAgbGFzdCA9IFdURjo6bW92ZShvdGhlci5sYXN0KTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIERhdGFUeXBlIGRhdGE7CisKKyAgICAv
LyBXZSB1c2UgYSBmdW5ueSBjb252ZW50aW9uOiBpZiB0aGVyZSBhcmUgbm8gbmV4dFJhbmdlLCB0
aGUgbmV4dFJhbmdlSW5kZXggaXMgemVyby4KKyAgICAvLyBUaGlzIGlzIGZhc3RlciB0byBjaGVj
ayB0aGFuIGEgc3BlY2lhbCB2YWx1ZSBpbiBtYW55IGNhc2VzLgorICAgIC8vIFdlIGNhbiB1c2Ug
emVybyBiZWNhdXNlIHJhbmdlcyBjYW4gb25seSBmb3JtIGEgY2hhaW4sIGFuZCB0aGUgZmlyc3Qg
cmFuZ2UgaXMgYWx3YXlzIHplcm8gYnkgY29udmVudGlvbi4KKyAgICAvLyBXaGVuIHdlIGluc2Vy
dCBzb21ldGhpbmcgaW4gZnJvbSBvZiB0aGUgZmlyc3QgcmFuZ2UsIHdlIHN3YXAgdGhlIHZhbHVl
cy4KKyAgICB1aW50MzJfdCBuZXh0UmFuZ2VJbmRleDsKKyAgICBDaGFyYWN0ZXJUeXBlIGZpcnN0
OworICAgIENoYXJhY3RlclR5cGUgbGFzdDsKKworICAgIENoYXJhY3RlclR5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGxhc3QgLSBmaXJzdDsgfQorfTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjZW5kaWYg
Ly8gTXV0YWJsZVJhbmdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L011dGFibGVSYW5nZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2VMaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9NdXRhYmxlUmFuZ2VMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE11dGFibGVSYW5nZUxpc3Rf
aAorI2RlZmluZSBNdXRhYmxlUmFuZ2VMaXN0X2gKKworI2luY2x1ZGUgIk11dGFibGVSYW5nZS5o
IgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCisvLyBBIHJhbmdlIGxpc3Qga2Vl
cHMgcmFuZ2VzIHNvcnRlZC4gUmFuZ2VzIGFyZSBub3Qgc29ydGVkIGluIHRoZSB2ZWN0b3IsIGJ1
dAordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIERhdGFUeXBlLCB1
bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA+CitjbGFzcyBNdXRhYmxlUmFuZ2VMaXN0IHsKKyAg
ICB0eXBlZGVmIE11dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBlLCBEYXRhVHlwZT4gVHlwZWRNdXRh
YmxlUmFuZ2U7CitwdWJsaWM6CisgICAgY2xhc3MgQ29uc3RJdGVyYXRvciB7CisgICAgcHVibGlj
OgorICAgICAgICBjb25zdCBNdXRhYmxlUmFuZ2VMaXN0JiByYW5nZUxpc3Q7CisgICAgICAgIHVp
bnQzMl90IGluZGV4OworICAgICAgICBib29sIGF0RW5kOworCisgICAgICAgIGNvbnN0IFR5cGVk
TXV0YWJsZVJhbmdlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiByYW5nZUxpc3QubV9yYW5n
ZXNbaW5kZXhdOyB9CisgICAgICAgIGNvbnN0IFR5cGVkTXV0YWJsZVJhbmdlKiBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gJnJhbmdlTGlzdC5tX3Jhbmdlc1tpbmRleF07IH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgmcmFuZ2VMaXN0ID09ICZvdGhlci5yYW5nZUxpc3Qp
OworICAgICAgICAgICAgaWYgKGF0RW5kIHx8IG90aGVyLmF0RW5kKQorICAgICAgICAgICAgICAg
IHJldHVybiBhdEVuZCA9PSBvdGhlci5hdEVuZDsKKyAgICAgICAgICAgIHJldHVybiBpbmRleCA9
PSBvdGhlci5pbmRleDsKKyAgICAgICAgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
CisKKyAgICAgICAgQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghYXRFbmQpOworICAgICAgICAgICAgaW5kZXggPSByYW5nZUxpc3QubV9y
YW5nZXNbaW5kZXhdLm5leHRSYW5nZUluZGV4OworICAgICAgICAgICAgaWYgKCFpbmRleCkKKyAg
ICAgICAgICAgICAgICBhdEVuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgQ29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIENvbnN0SXRlcmF0b3IgeyAqdGhpcywgMCwgbV9yYW5nZXMuaXNFbXB0eSgpIH07IH0KKyAg
ICBDb25zdEl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIENvbnN0SXRlcmF0b3IgeyAqdGhp
cywgMCwgdHJ1ZSB9OyB9CisKKyAgICB1aW50MzJfdCBhcHBlbmRSYW5nZSh1aW50MzJfdCBsYXN0
UmFuZ2VJbmRleCwgQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0LCBjb25z
dCBEYXRhVHlwZSYgZGF0YSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IG5ld1JhbmdlSW5kZXgg
PSBtX3Jhbmdlcy5zaXplKCk7CisgICAgICAgIG1fcmFuZ2VzLmFwcGVuZChUeXBlZE11dGFibGVS
YW5nZShkYXRhLCAwLCBmaXJzdCwgbGFzdCkpOworICAgICAgICBpZiAoIW5ld1JhbmdlSW5kZXgp
CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBBU1NFUlQoIW1fcmFuZ2VzW2xhc3RS
YW5nZUluZGV4XS5uZXh0UmFuZ2VJbmRleCk7CisgICAgICAgIEFTU0VSVChtX3Jhbmdlc1tsYXN0
UmFuZ2VJbmRleF0ubGFzdCA8IGZpcnN0KTsKKworICAgICAgICBtX3Jhbmdlc1tsYXN0UmFuZ2VJ
bmRleF0ubmV4dFJhbmdlSW5kZXggPSBuZXdSYW5nZUluZGV4OworICAgICAgICByZXR1cm4gbmV3
UmFuZ2VJbmRleDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmFuZ2VJdGVyYXRv
ciwgdHlwZW5hbWUgRGF0YUNvbnZlcnRlcj4KKyAgICB2b2lkIGV4dGVuZChSYW5nZUl0ZXJhdG9y
IG90aGVySXRlcmF0b3IsIFJhbmdlSXRlcmF0b3Igb3RoZXJFbmQsIERhdGFDb252ZXJ0ZXIgZGF0
YUNvbnZlcnRlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlckl0ZXJhdG9yID09IG90aGVyRW5k
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3Jhbmdlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGluaXRpYWxpemVGcm9tKG90aGVySXRlcmF0b3IsIG90aGVyRW5kLCBk
YXRhQ29udmVydGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgcmVhY2hlZFNlbGZFbmQgPSBmYWxzZTsKKyAgICAgICAgdWludDMyX3QgbGFzdFNlbGZS
YW5nZUluZGV4ID0gMDsKKyAgICAgICAgdWludDMyX3Qgc2VsZlJhbmdlSW5kZXggPSAwOworCisg
ICAgICAgIGF1dG8gb3RoZXJSYW5nZU9mZnNldCA9IG90aGVySXRlcmF0b3ItPmZpcnN0OyAvLyBU
byBnZXQgdGhlIHJpZ2h0IHR5cGUgOikKKyAgICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IDA7CisK
KyAgICAgICAgZG8geworICAgICAgICAgICAgVHlwZWRNdXRhYmxlUmFuZ2UqIGFjdGl2ZVNlbGZS
YW5nZSA9ICZtX3Jhbmdlc1tzZWxmUmFuZ2VJbmRleF07CisKKyAgICAgICAgICAgIC8vIEZpcnN0
LCB3ZSBtb3ZlIGZvcndhcmQgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCisg
ICAgICAgICAgICBpZiAoYWN0aXZlU2VsZlJhbmdlLT5sYXN0IDwgb3RoZXJJdGVyYXRvci0+Zmly
c3QgKyBvdGhlclJhbmdlT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgbGFzdFNlbGZSYW5nZUlu
ZGV4ID0gc2VsZlJhbmdlSW5kZXg7CisgICAgICAgICAgICAgICAgc2VsZlJhbmdlSW5kZXggPSBh
Y3RpdmVTZWxmUmFuZ2UtPm5leHRSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIHJlYWNoZWRT
ZWxmRW5kID0gIXNlbGZSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG90aGVySXRlcmF0b3ItPmxhc3QgPCBhY3RpdmVT
ZWxmUmFuZ2UtPmZpcnN0KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0QmV0d2VlbihsYXN0U2Vs
ZlJhbmdlSW5kZXgsIHNlbGZSYW5nZUluZGV4LCBvdGhlckl0ZXJhdG9yLT5maXJzdCArIG90aGVy
UmFuZ2VPZmZzZXQsIG90aGVySXRlcmF0b3ItPmxhc3QsIGRhdGFDb252ZXJ0ZXIuY29udmVydChv
dGhlckl0ZXJhdG9yLmRhdGEoKSkpOworCisgICAgICAgICAgICAgICAgKytvdGhlckl0ZXJhdG9y
OworICAgICAgICAgICAgICAgIG90aGVyUmFuZ2VPZmZzZXQgPSAwOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVk
IGhlcmUsIHdlIGhhdmU6CisgICAgICAgICAgICAvLyAxKSBhY3RpdmVSYW5nZUEtPmxhc3QgPj0g
YWN0aXZlUmFuZ2VCLT5maXJzdC4KKyAgICAgICAgICAgIC8vIDIpIGFjdGl2ZVJhbmdlQS0+Zmly
c3QgPD0gYWN0aXZlUmFuZ2VCLT5sYXN0LgorICAgICAgICAgICAgLy8gQnV0IHdlIGRvbid0IGtu
b3cgaG93IHRoZXkgY29sbGlkZS4KKworICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHBhcnQg
b24gdGhlIGxlZnQ/IENyZWF0ZSBhIG5ldyByYW5nZSBmb3IgaXQuCisgICAgICAgICAgICBpZiAo
YWN0aXZlU2VsZlJhbmdlLT5maXJzdCA8IG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJSYW5n
ZU9mZnNldCkgeworICAgICAgICAgICAgICAgIERhdGFUeXBlIGNvcGllZERhdGEgPSBhY3RpdmVT
ZWxmUmFuZ2UtPmRhdGE7CisgICAgICAgICAgICAgICAgQ2hhcmFjdGVyVHlwZSBuZXdSYW5nZUZp
cnN0Q2hhcmFjdGVyID0gYWN0aXZlU2VsZlJhbmdlLT5maXJzdDsKKyAgICAgICAgICAgICAgICBh
Y3RpdmVTZWxmUmFuZ2UtPmZpcnN0ID0gb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyBvdGhlclJhbmdl
T2Zmc2V0OworICAgICAgICAgICAgICAgIGluc2VydEJldHdlZW4obGFzdFNlbGZSYW5nZUluZGV4
LCBzZWxmUmFuZ2VJbmRleCwgbmV3UmFuZ2VGaXJzdENoYXJhY3Rlciwgb3RoZXJJdGVyYXRvci0+
Zmlyc3QgKyBvdGhlclJhbmdlT2Zmc2V0IC0gMSwgV1RGOjptb3ZlKGNvcGllZERhdGEpKTsKKyAg
ICAgICAgICAgICAgICBhY3RpdmVTZWxmUmFuZ2UgPSAmbV9yYW5nZXNbc2VsZlJhbmdlSW5kZXhd
OworICAgICAgICAgICAgfSBlbHNlIGlmIChvdGhlckl0ZXJhdG9yLT5maXJzdCArIG90aGVyUmFu
Z2VPZmZzZXQgPCBhY3RpdmVTZWxmUmFuZ2UtPmZpcnN0KSB7CisgICAgICAgICAgICAgICAgaW5z
ZXJ0QmV0d2VlbihsYXN0U2VsZlJhbmdlSW5kZXgsIHNlbGZSYW5nZUluZGV4LCBvdGhlckl0ZXJh
dG9yLT5maXJzdCArIG90aGVyUmFuZ2VPZmZzZXQsIGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3QgLSAx
LCBkYXRhQ29udmVydGVyLmNvbnZlcnQob3RoZXJJdGVyYXRvci5kYXRhKCkpKTsKKworICAgICAg
ICAgICAgICAgIGFjdGl2ZVNlbGZSYW5nZSA9ICZtX3Jhbmdlc1tzZWxmUmFuZ2VJbmRleF07Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvdGhlclJhbmdlT2Zmc2V0IDwgYWN0
aXZlU2VsZlJhbmdlLT5maXJzdCAtIG90aGVySXRlcmF0b3ItPmZpcnN0LCAiVGhlIG9mZnNldCBt
dXN0IG1vdmUgZm9yd2FyZCBvciB3ZSBjb3VsZCBnZXQgc3R1Y2sgb24gdGhpcyBvcGVyYXRpb24u
Iik7CisgICAgICAgICAgICAgICAgb3RoZXJSYW5nZU9mZnNldCA9IGFjdGl2ZVNlbGZSYW5nZS0+
Zmlyc3QgLSBvdGhlckl0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gSGVyZSwgd2Uga25vdyBib3RoIHJhbmdlcyBzdGFydCBhdCB0aGUgc2FtZSBwb2ludCwg
d2UgbmVlZCB0byBjcmVhdGUgdGhlIHBhcnQgdGhhdCBpbnRlcnNlY3QKKyAgICAgICAgICAgIC8v
IGFuZCBtZXJnZSB0aGUgZGF0YS4KKworICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGZSYW5nZS0+
bGFzdCA9PSBvdGhlckl0ZXJhdG9yLT5sYXN0KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhl
eSBmaW5pc2ggdG9nZXRoZXIsIHRoaW5ncyBhcmUgcmVhbGx5IGVhc3k6IHdlIGp1c3QgYWRkIEIg
dG8gQS4KKyAgICAgICAgICAgICAgICBkYXRhQ29udmVydGVyLmV4dGVuZChhY3RpdmVTZWxmUmFu
Z2UtPmRhdGEsIG90aGVySXRlcmF0b3IuZGF0YSgpKTsKKworICAgICAgICAgICAgICAgIGxhc3RT
ZWxmUmFuZ2VJbmRleCA9IHNlbGZSYW5nZUluZGV4OworICAgICAgICAgICAgICAgIHNlbGZSYW5n
ZUluZGV4ID0gYWN0aXZlU2VsZlJhbmdlLT5uZXh0UmFuZ2VJbmRleDsKKyAgICAgICAgICAgICAg
ICByZWFjaGVkU2VsZkVuZCA9ICFzZWxmUmFuZ2VJbmRleDsKKworICAgICAgICAgICAgICAgICsr
b3RoZXJJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGFjdGl2ZVNlbGZSYW5nZS0+bGFzdCA+IG90aGVySXRlcmF0b3ItPmxhc3QpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiBBIGlzIGJpZ2dlciB0aGFuIEIsIHdlIGFkZCBhIG1lcmdlZCB2ZXJzaW9u
IGFuZCBtb3ZlIEEgdG8gdGhlIHJpZ2h0LgorCisgICAgICAgICAgICAgICAgQ2hhcmFjdGVyVHlw
ZSBjb21iaW5lZFBhcnRTdGFydCA9IGFjdGl2ZVNlbGZSYW5nZS0+Zmlyc3Q7CisgICAgICAgICAg
ICAgICAgYWN0aXZlU2VsZlJhbmdlLT5maXJzdCA9IG90aGVySXRlcmF0b3ItPmxhc3QgKyAxOwor
CisgICAgICAgICAgICAgICAgRGF0YVR5cGUgY29tYmluZWREYXRhID0gYWN0aXZlU2VsZlJhbmdl
LT5kYXRhOworICAgICAgICAgICAgICAgIGRhdGFDb252ZXJ0ZXIuZXh0ZW5kKGNvbWJpbmVkRGF0
YSwgb3RoZXJJdGVyYXRvci5kYXRhKCkpOworICAgICAgICAgICAgICAgIGluc2VydEJldHdlZW4o
bGFzdFNlbGZSYW5nZUluZGV4LCBzZWxmUmFuZ2VJbmRleCwgY29tYmluZWRQYXJ0U3RhcnQsIG90
aGVySXRlcmF0b3ItPmxhc3QsIFdURjo6bW92ZShjb21iaW5lZERhdGEpKTsKKworICAgICAgICAg
ICAgICAgICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0
ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gSWYgd2UgcmVhY2hlZCBoZXJlLCBCIGVuZHMgYWZ0ZXIgQS4gV2UgbWVyZ2UgdGhl
IGludGVyc2VjdGlvbiBhbmQgbW92ZSBvbi4KKyAgICAgICAgICAgIEFTU0VSVChvdGhlckl0ZXJh
dG9yLT5sYXN0ID4gYWN0aXZlU2VsZlJhbmdlLT5sYXN0KTsKKyAgICAgICAgICAgIGRhdGFDb252
ZXJ0ZXIuZXh0ZW5kKGFjdGl2ZVNlbGZSYW5nZS0+ZGF0YSwgb3RoZXJJdGVyYXRvci5kYXRhKCkp
OworCisgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gYWN0aXZlU2VsZlJhbmdlLT5sYXN0
IC0gb3RoZXJJdGVyYXRvci0+Zmlyc3QgKyAxOworICAgICAgICAgICAgbGFzdFNlbGZSYW5nZUlu
ZGV4ID0gc2VsZlJhbmdlSW5kZXg7CisgICAgICAgICAgICBzZWxmUmFuZ2VJbmRleCA9IGFjdGl2
ZVNlbGZSYW5nZS0+bmV4dFJhbmdlSW5kZXg7CisgICAgICAgICAgICByZWFjaGVkU2VsZkVuZCA9
ICFzZWxmUmFuZ2VJbmRleDsKKyAgICAgICAgfSB3aGlsZSAoIXJlYWNoZWRTZWxmRW5kICYmIG90
aGVySXRlcmF0b3IgIT0gb3RoZXJFbmQpOworCisgICAgICAgIHdoaWxlIChvdGhlckl0ZXJhdG9y
ICE9IG90aGVyRW5kKSB7CisgICAgICAgICAgICBsYXN0U2VsZlJhbmdlSW5kZXggPSBhcHBlbmRS
YW5nZShsYXN0U2VsZlJhbmdlSW5kZXgsIG90aGVySXRlcmF0b3ItPmZpcnN0ICsgb3RoZXJSYW5n
ZU9mZnNldCwgb3RoZXJJdGVyYXRvci0+bGFzdCwgZGF0YUNvbnZlcnRlci5jb252ZXJ0KG90aGVy
SXRlcmF0b3IuZGF0YSgpKSk7CisgICAgICAgICAgICBvdGhlclJhbmdlT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgICsrb3RoZXJJdGVyYXRvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yYW5nZXMuaXNFbXB0eSgp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9yYW5nZXMuY2xl
YXIoKTsKKyAgICB9CisKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJV
R0dJTkcKKyAgICB2b2lkIGRlYnVnUHJpbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChj
b25zdCBUeXBlZE11dGFibGVSYW5nZSYgcmFuZ2UgOiAqdGhpcykKKyAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiICAgICVkLSVkIiwgcmFuZ2UuZmlyc3QsIHJhbmdlLmxhc3QpOworICAgIH0KKyNl
bmRpZgorCisgICAgVmVjdG9yPE11dGFibGVSYW5nZTxDaGFyYWN0ZXJUeXBlLCBEYXRhVHlwZT4s
IGlubGluZUNhcGFjaXR5PiBtX3JhbmdlczsKK3ByaXZhdGU6CisgICAgdm9pZCBpbnNlcnRCZXR3
ZWVuKHVpbnQzMl90JiBsZWZ0UmFuZ2VJbmRleCwgdWludDMyX3QmIHJpZ2h0UmFuZ2VJbmRleCwg
Q2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBsYXN0LCBEYXRhVHlwZSYmIGRhdGEp
CisgICAgeworICAgICAgICBBU1NFUlQobV9yYW5nZXNbcmlnaHRSYW5nZUluZGV4XS5maXJzdCA+
IGxhc3QpOworCisgICAgICAgIGlmICghcmlnaHRSYW5nZUluZGV4KSB7CisgICAgICAgICAgICAv
LyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBXZSBhbHdheXMga2VlcCB0aGUgZmlyc3QgcmFuZ2Ug
YXMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHVpbnQzMl90
IG1vdmVkUmFuZ2VJbmRleCA9IG1fcmFuZ2VzLnNpemUoKTsKKyAgICAgICAgICAgIG1fcmFuZ2Vz
LmFwcGVuZChXVEY6Om1vdmUobV9yYW5nZXMuZmlyc3QoKSkpOworICAgICAgICAgICAgbV9yYW5n
ZXNbMF0gPSBUeXBlZE11dGFibGVSYW5nZShXVEY6Om1vdmUoZGF0YSksIG1vdmVkUmFuZ2VJbmRl
eCwgZmlyc3QsIGxhc3QpOworICAgICAgICAgICAgbGVmdFJhbmdlSW5kZXggPSAwOworICAgICAg
ICAgICAgcmlnaHRSYW5nZUluZGV4ID0gbW92ZWRSYW5nZUluZGV4OworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG1fcmFuZ2VzW2xlZnRSYW5nZUluZGV4
XS5uZXh0UmFuZ2VJbmRleCA9PSByaWdodFJhbmdlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9y
YW5nZXNbbGVmdFJhbmdlSW5kZXhdLmxhc3QgPCBmaXJzdCk7CisKKyAgICAgICAgdWludDMyX3Qg
bmV3UmFuZ2VJbmRleCA9IG1fcmFuZ2VzLnNpemUoKTsKKyAgICAgICAgbV9yYW5nZXMuYXBwZW5k
KFR5cGVkTXV0YWJsZVJhbmdlKFdURjo6bW92ZShkYXRhKSwgcmlnaHRSYW5nZUluZGV4LCBmaXJz
dCwgbGFzdCkpOworICAgICAgICBtX3Jhbmdlc1tsZWZ0UmFuZ2VJbmRleF0ubmV4dFJhbmdlSW5k
ZXggPSBuZXdSYW5nZUluZGV4OworICAgICAgICBsZWZ0UmFuZ2VJbmRleCA9IG5ld1JhbmdlSW5k
ZXg7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJhbmdlSXRlcmF0b3IsIHR5cGVu
YW1lIERhdGFDb252ZXJ0ZXI+CisgICAgdm9pZCBpbml0aWFsaXplRnJvbShSYW5nZUl0ZXJhdG9y
IG90aGVySXRlcmF0b3IsIFJhbmdlSXRlcmF0b3Igb3RoZXJFbmQsIERhdGFDb252ZXJ0ZXIgZGF0
YUNvbnZlcnRlcikKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uob3RoZXJJdGVy
YXRvciAhPSBvdGhlckVuZCwgIldlIHNob3VsZCBuZXZlciBkbyBhbnl0aGluZyB3aGVuIGV4dGVu
ZGluZyB3aXRoIGEgbnVsbCByYW5nZS4iKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSht
X3Jhbmdlcy5pc0VtcHR5KCksICJUaGlzIGNvZGUgZG9lcyBub3QgaGFuZGxlIHNwbGl0dGluZywg
aXQgY2FuIG9ubHkgYmUgdXNlZCBvbiBlbXB0eSBSYW5nZUxpc3QuIik7CisKKyAgICAgICAgdWlu
dDMyX3QgbG9vcENvdW50ZXIgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBtX3Jhbmdl
cy5hcHBlbmQoVHlwZWRNdXRhYmxlUmFuZ2UoZGF0YUNvbnZlcnRlci5jb252ZXJ0KG90aGVySXRl
cmF0b3IuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICBsb29wQ291bnRlciArIDEsCisgICAgICAg
ICAgICAgICAgb3RoZXJJdGVyYXRvci0+Zmlyc3QsCisgICAgICAgICAgICAgICAgb3RoZXJJdGVy
YXRvci0+bGFzdCkpOworICAgICAgICAgICAgKytsb29wQ291bnRlcjsKKyAgICAgICAgICAgICsr
b3RoZXJJdGVyYXRvcjsKKyAgICAgICAgfSB3aGlsZSAob3RoZXJJdGVyYXRvciAhPSBvdGhlckVu
ZCk7CisKKyAgICAgICAgaWYgKCFtX3Jhbmdlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3Jh
bmdlcy5sYXN0KCkubmV4dFJhbmdlSW5kZXggPSAwOworICAgIH0KK307CisKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KworI2VuZGlmIC8vIE11dGFibGVSYW5nZUxpc3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCShyZXZpc2lvbiAxODYwNjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAKQEAgLTM1LDE4NCArMzYsODUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCi1ORkE6Ok5GQSgpCi0gICAgOiBtX3Jvb3QoY3Jl
YXRlTm9kZSgpKQotewotfQotCi11bnNpZ25lZCBORkE6OmNyZWF0ZU5vZGUoKQotewotICAgIHVu
c2lnbmVkIG5leHRJZCA9IG1fbm9kZXMuc2l6ZSgpOwotICAgIG1fbm9kZXMuYXBwZW5kKE5GQU5v
ZGUoKSk7Ci0gICAgcmV0dXJuIG5leHRJZDsKLX0KLQotI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKLXNpemVfdCBORkE6Om1lbW9yeVVzZWQoKSBjb25zdAotewot
ICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKE5GQSk7Ci0gICAgZm9yIChjb25zdCBORkFOb2RlJiBu
b2RlIDogbV9ub2RlcykgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBu
b2RlLnRyYW5zaXRpb25zKQotICAgICAgICAgICAgc2l6ZSArPSB0cmFuc2l0aW9uLnZhbHVlLmNh
cGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpOwotICAgICAgICBzaXplICs9IHNpemVvZihub2Rl
KQotICAgICAgICAgICAgKyBub2RlLnRyYW5zaXRpb25zLmNhcGFjaXR5KCkgKiBzaXplb2Yoc3Rk
OjpwYWlyPHVpbnQxNl90LCBORkFOb2RlSW5kZXhTZXQ+KQotICAgICAgICAgICAgKyBub2RlLnRy
YW5zaXRpb25zT25BbnlDaGFyYWN0ZXIuY2FwYWNpdHkoKSAqIHNpemVvZih1bnNpZ25lZCkKLSAg
ICAgICAgICAgICsgbm9kZS5maW5hbFJ1bGVJZHMuY2FwYWNpdHkoKSAqIHNpemVvZih1aW50NjRf
dCk7Ci0gICAgfQotICAgIHJldHVybiBzaXplOwotfQotI2VuZGlmCi0KLXZvaWQgTkZBOjphZGRU
cmFuc2l0aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBjaGFyIGNoYXJhY3RlcikKLXsK
LSAgICBBU1NFUlQoZnJvbSA8IG1fbm9kZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQodG8gPCBtX25v
ZGVzLnNpemUoKSk7Ci0KLSAgICBORkFOb2RlJiBmcm9tTm9kZSA9IG1fbm9kZXNbZnJvbV07Ci0g
ICAgaWYgKGZyb21Ob2RlLnRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIuY29udGFpbnModG8pKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbm9kZXNbZnJvbV0udHJh
bnNpdGlvbnMuYWRkKGNoYXJhY3RlciwgTkZBTm9kZUluZGV4U2V0KCkpOwotICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYWRkKHRvKTsKLX0KLQotdm9pZCBORkE6OmFkZEVwc2lsb25UcmFu
c2l0aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQotewotICAgIEFTU0VSVChmcm9tIDwg
bV9ub2Rlcy5zaXplKCkpOwotICAgIEFTU0VSVCh0byA8IG1fbm9kZXMuc2l6ZSgpKTsKLQotICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9ub2Rlc1tmcm9tXS50cmFuc2l0aW9ucy5hZGQoZXBzaWxvblRy
YW5zaXRpb25DaGFyYWN0ZXIsIE5GQU5vZGVJbmRleFNldCgpKTsKLSAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFkZCh0byk7Ci19Ci0KLXZvaWQgTkZBOjphZGRUcmFuc2l0aW9uc09uQW55
Q2hhcmFjdGVyKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQotewotICAgIEFTU0VSVChmcm9t
IDwgbV9ub2Rlcy5zaXplKCkpOwotICAgIEFTU0VSVCh0byA8IG1fbm9kZXMuc2l6ZSgpKTsKLQot
ICAgIE5GQU5vZGUmIGZyb21Ob2RlID0gbV9ub2Rlc1tmcm9tXTsKLSAgICBmcm9tTm9kZS50cmFu
c2l0aW9uc09uQW55Q2hhcmFjdGVyLmFkZCh0byk7Ci0KLSAgICBmb3IgKGF1dG8gdHJhbnNpdGlv
blNsb3QgOiBmcm9tTm9kZS50cmFuc2l0aW9ucykKLSAgICAgICAgdHJhbnNpdGlvblNsb3QudmFs
dWUucmVtb3ZlKHRvKTsKLX0KLQotdm9pZCBORkE6OnNldEFjdGlvbnModW5zaWduZWQgbm9kZSwg
Y29uc3QgQWN0aW9uTGlzdCYgYWN0aW9ucykKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
bm9kZXNbbm9kZV0uZmluYWxSdWxlSWRzLmlzRW1wdHkoKSwgIlRoZSBmaW5hbCBzdGF0ZSBzaG91
bGQgb25seSBiZSBkZWZpbmVkIG9uY2UuIik7Ci0gICAgY29weVRvVmVjdG9yKGFjdGlvbnMsIG1f
bm9kZXNbbm9kZV0uZmluYWxSdWxlSWRzKTsKLX0KLQotdW5zaWduZWQgTkZBOjpncmFwaFNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBtX25vZGVzLnNpemUoKTsKLX0KLQotdm9pZCBORkE6OnJl
c3RvcmVUb0dyYXBoU2l6ZSh1bnNpZ25lZCBzaXplKQotewotICAgIEFTU0VSVChzaXplID49IDEp
OwotICAgIEFTU0VSVChzaXplIDw9IGdyYXBoU2l6ZSgpKTsKLQotICAgIG1fbm9kZXMuc2hyaW5r
KHNpemUpOwotfQotCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdH
SU5HCi1zdGF0aWMgdm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgdWludDE2X3QgcmFu
Z2VTdGFydCwgdWludDE2X3QgcmFuZ2VFbmQsIHVpbnQxNl90IGVwc2lsb25UcmFuc2l0aW9uQ2hh
cmFjdGVyKQotewotICAgIGlmICghZmlyc3RSYW5nZSkKLSAgICAgICAgZGF0YUxvZ0YoIiwgIik7
Ci0gICAgaWYgKHJhbmdlU3RhcnQgPT0gcmFuZ2VFbmQpIHsKLSAgICAgICAgaWYgKHJhbmdlU3Rh
cnQgPT0gZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCi0gICAgICAgICAgICBkYXRhTG9nRigi
yZsiKTsKLSAgICAgICAgZWxzZSBpZiAocmFuZ2VTdGFydCA9PSAnIicgfHwgcmFuZ2VTdGFydCA9
PSAnXFwnKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlxcJWMiLCByYW5nZVN0YXJ0KTsKLSAgICAg
ICAgZWxzZSBpZiAocmFuZ2VTdGFydCA+PSAnIScgJiYgcmFuZ2VTdGFydCA8PSAnficpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiJWMiLCByYW5nZVN0YXJ0KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZGF0YUxvZ0YoIlxcXFwlZCIsIHJhbmdlU3RhcnQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChyYW5nZVN0YXJ0ID09IDEgJiYgcmFuZ2VFbmQgPT0gMTI3KQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIlthbnkgaW5wdXRdIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGFM
b2dGKCJcXFxcJWQtXFxcXCVkIiwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQpOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgcHJpbnRUcmFuc2l0aW9ucyhjb25zdCBWZWN0b3I8TkZBTm9kZT4mIGdyYXBo
LCB1bnNpZ25lZCBzb3VyY2VOb2RlLCB1aW50MTZfdCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rl
cikKLXsKLSAgICBjb25zdCBORkFOb2RlJiBub2RlID0gZ3JhcGhbc291cmNlTm9kZV07Ci0gICAg
Y29uc3QgSGFzaE1hcDx1aW50MTZfdCwgTkZBTm9kZUluZGV4U2V0LCBEZWZhdWx0SGFzaDx1aW50
MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2X3Q+
PiYgdHJhbnNpdGlvbnMgPSBub2RlLnRyYW5zaXRpb25zOwotCi0gICAgSGFzaE1hcDx1bnNpZ25l
ZCwgSGFzaFNldDx1aW50MTZfdCwgRGVmYXVsdEhhc2g8dWludDE2X3Q+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQxNl90Pj4sIERlZmF1bHRIYXNoPHVuc2ln
bmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+
IHRyYW5zaXRpb25zUGVyVGFyZ2V0OwotCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9u
IDogdHJhbnNpdGlvbnMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB0YXJnZXROb2RlIDogdHJh
bnNpdGlvbi52YWx1ZSkgewotICAgICAgICAgICAgdHJhbnNpdGlvbnNQZXJUYXJnZXQuYWRkKHRh
cmdldE5vZGUsIEhhc2hTZXQ8dWludDE2X3QsIERlZmF1bHRIYXNoPHVpbnQxNl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MTZfdD4+KCkpOwotICAgICAg
ICAgICAgdHJhbnNpdGlvbnNQZXJUYXJnZXQuZmluZCh0YXJnZXROb2RlKS0+dmFsdWUuYWRkKHRy
YW5zaXRpb24ua2V5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoY29uc3QgYXV0byYg
dHJhbnNpdGlvblBlclRhcmdldCA6IHRyYW5zaXRpb25zUGVyVGFyZ2V0KSB7Ci0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgICVkIC0+ICVkIFtsYWJlbD1cIiIsIHNvdXJjZU5vZGUsIHRyYW5zaXRp
b25QZXJUYXJnZXQua2V5KTsKLQotICAgICAgICBWZWN0b3I8dWludDE2X3Q+IGluY29tbWluZ0No
YXJhY3RlcnM7Ci0gICAgICAgIGNvcHlUb1ZlY3Rvcih0cmFuc2l0aW9uUGVyVGFyZ2V0LnZhbHVl
LCBpbmNvbW1pbmdDaGFyYWN0ZXJzKTsKLSAgICAgICAgc3RkOjpzb3J0KGluY29tbWluZ0NoYXJh
Y3RlcnMuYmVnaW4oKSwgaW5jb21taW5nQ2hhcmFjdGVycy5lbmQoKSk7Ci0KLSAgICAgICAgdWlu
dDE2X3QgcmFuZ2VTdGFydCA9IGluY29tbWluZ0NoYXJhY3RlcnMuZmlyc3QoKTsKLSAgICAgICAg
dWludDE2X3QgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0OwotICAgICAgICBib29sIGZpcnN0ID0gdHJ1
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBzb3J0ZWRUcmFuc2l0aW9uSW5kZXggPSAxOyBzb3J0
ZWRUcmFuc2l0aW9uSW5kZXggPCBpbmNvbW1pbmdDaGFyYWN0ZXJzLnNpemUoKTsgKytzb3J0ZWRU
cmFuc2l0aW9uSW5kZXgpIHsKLSAgICAgICAgICAgIHVpbnQxNl90IG5leHRDaGFyID0gaW5jb21t
aW5nQ2hhcmFjdGVyc1tzb3J0ZWRUcmFuc2l0aW9uSW5kZXhdOwotICAgICAgICAgICAgaWYgKG5l
eHRDaGFyID09IHJhbmdlRW5kKzEpIHsKLSAgICAgICAgICAgICAgICByYW5nZUVuZCA9IG5leHRD
aGFyOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcHJpbnRSYW5nZShmaXJzdCwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQsIGVwc2lsb25UcmFuc2l0
aW9uQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHJhbmdlU3RhcnQgPSByYW5nZUVuZCA9IG5leHRD
aGFyOwotICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBwcmlu
dFJhbmdlKGZpcnN0LCByYW5nZVN0YXJ0LCByYW5nZUVuZCwgZXBzaWxvblRyYW5zaXRpb25DaGFy
YWN0ZXIpOwotCi0gICAgICAgIGRhdGFMb2dGKCJcIl07XG4iKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIHRhcmdldE9uQW55Q2hhcmFjdGVyIDogbm9kZS50cmFuc2l0aW9uc09uQW55Q2hh
cmFjdGVyKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICAlZCAtPiAlZCBbbGFiZWw9XCJbYW55
IGlucHV0XVwiXTtcbiIsIHNvdXJjZU5vZGUsIHRhcmdldE9uQW55Q2hhcmFjdGVyKTsKLX0KLQog
dm9pZCBORkE6OmRlYnVnUHJpbnREb3QoKSBjb25zdAogewogICAgIGRhdGFMb2dGKCJkaWdyYXBo
IE5GQV9UcmFuc2l0aW9ucyB7XG4iKTsKICAgICBkYXRhTG9nRigiICAgIHJhbmtkaXI9TFI7XG4i
KTsKICAgICBkYXRhTG9nRigiICAgIG5vZGUgW3NoYXBlPWNpcmNsZV07XG4iKTsKICAgICBkYXRh
TG9nRigiICAgIHtcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vZGVzLnNp
emUoKTsgKytpKSB7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgICVkIFtsYWJlbD08Tm9kZSAlZCIs
IGksIGkpOwogCi0gICAgICAgIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsUnVsZXMgPSBtX25vZGVz
W2ldLmZpbmFsUnVsZUlkczsKLSAgICAgICAgaWYgKCFmaW5hbFJ1bGVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV07CisKKyAgICAgICAgaWYgKG5vZGUu
YWN0aW9uU3RhcnQgIT0gbm9kZS5hY3Rpb25FbmQpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCI8
QlIvPihGaW5hbDogIik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7
IHJ1bGVJbmRleCA8IGZpbmFsUnVsZXMuc2l6ZSgpOyArK3J1bGVJbmRleCkgewotICAgICAgICAg
ICAgICAgIGlmIChydWxlSW5kZXgpCisgICAgICAgICAgICBib29sIGlzRmlyc3QgPSB0cnVlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhY3Rpb25JbmRleCA9IG5vZGUuYWN0aW9uU3RhcnQ7
IGFjdGlvbkluZGV4IDwgbm9kZS5hY3Rpb25FbmQ7ICsrYWN0aW9uSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzRmlyc3QpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIsICIp
OwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIlbGx1IiwgZmluYWxSdWxlc1tydWxlSW5kZXhd
KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWxsdSIsIGFjdGlvbnNbYWN0aW9uSW5kZXhd
KTsKKyAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBkYXRhTG9nRigiKSIpOwogICAgICAgICB9Ci0KICAgICAgICAgZGF0YUxvZ0YoIj5d
Iik7CiAKLSAgICAgICAgaWYgKCFmaW5hbFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKG5v
ZGUuYWN0aW9uU3RhcnQgIT0gbm9kZS5hY3Rpb25FbmQpCiAgICAgICAgICAgICBkYXRhTG9nRigi
IFtzaGFwZT1kb3VibGVjaXJjbGVdIik7Ci0KICAgICAgICAgZGF0YUxvZ0YoIjtcbiIpOwogICAg
IH0KICAgICBkYXRhTG9nRigiICAgIH1cbiIpOwogCiAgICAgZGF0YUxvZ0YoIiAgICB7XG4iKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgcHJpbnRUcmFuc2l0aW9ucyhtX25vZGVzLCBpLCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rl
cik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBub2Rlc1tpXTsKKworICAgICAgICBIYXNoTWFwPHVp
bnQzMl90LCBWZWN0b3I8dWludDMyX3Q+LCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0cmFuc2l0aW9uc1Bl
clRhcmdldDsKKworICAgICAgICBmb3IgKHVpbnQzMl90IHRyYW5zaXRpb25JbmRleCA9IG5vZGUu
cmFuZ2VzU3RhcnQ7IHRyYW5zaXRpb25JbmRleCA8IG5vZGUucmFuZ2VzRW5kOyArK3RyYW5zaXRp
b25JbmRleCkgeworICAgICAgICAgICAgY29uc3QgSW1tdXRhYmxlQ2hhclJhbmdlJiByYW5nZSA9
IHRyYW5zaXRpb25zW3RyYW5zaXRpb25JbmRleF07CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90
IHRhcmdldEluZGV4ID0gcmFuZ2UudGFyZ2V0U3RhcnQ7IHRhcmdldEluZGV4IDwgcmFuZ2UudGFy
Z2V0RW5kOyArK3RhcmdldEluZGV4KSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgdGFyZ2V0
ID0gdGFyZ2V0c1t0YXJnZXRJbmRleF07CisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSB0cmFuc2l0aW9uc1BlclRhcmdldC5hZGQodGFyZ2V0LCBWZWN0b3I8dWludDMyX3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHRyYW5zaXRp
b25JbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHNsb3QgOiB0cmFuc2l0aW9uc1BlclRhcmdldCkgeworICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgICAgJWQgLT4gJWQgW2xhYmVsPVwiIiwgaSwgc2xvdC5rZXkpOworCisgICAgICAg
ICAgICBib29sIGlzRmlyc3QgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1aW50MzJfdCByYW5n
ZUluZGV4IDogc2xvdC52YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdCkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiwgIik7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBj
b25zdCBJbW11dGFibGVDaGFyUmFuZ2UmIHJhbmdlID0gdHJhbnNpdGlvbnNbcmFuZ2VJbmRleF07
CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLmxhc3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlQcmludGFibGUocmFuZ2UuZmlyc3QpKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiJWMiLCByYW5nZS5maXJzdCk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiVkIiwgcmFuZ2UuZmly
c3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c0FTQ0lJUHJpbnRhYmxlKHJhbmdlLmZpcnN0KSAmJiBpc0FTQ0lJUHJpbnRhYmxlKHJhbmdlLmxh
c3QpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWMtJWMiLCByYW5nZS5maXJzdCwg
cmFuZ2UubGFzdCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiVkLSVkIiwgcmFuZ2UuZmlyc3QsIHJhbmdlLmxhc3QpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRhdGFMb2dGKCJcIl1cbiIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50MzJfdCBlcHNpbG9uVGFyZ2V0SW5kZXggPSBu
b2RlLmVwc2lsb25UcmFuc2l0aW9uVGFyZ2V0c1N0YXJ0OyBlcHNpbG9uVGFyZ2V0SW5kZXggPCBu
b2RlLmVwc2lsb25UcmFuc2l0aW9uVGFyZ2V0c0VuZDsgKytlcHNpbG9uVGFyZ2V0SW5kZXgpIHsK
KyAgICAgICAgICAgIHVpbnQzMl90IHRhcmdldCA9IGVwc2lsb25UcmFuc2l0aW9uc1RhcmdldHNb
ZXBzaWxvblRhcmdldEluZGV4XTsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICVkIC0+
ICVkIFtsYWJlbD1cIsmbXCJdXG4iLCBpLCB0YXJnZXQpOworICAgICAgICB9CisgICAgfQorCiAg
ICAgZGF0YUxvZ0YoIiAgICB9XG4iKTsKICAgICBkYXRhTG9nRigifVxuIik7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaAkocmV2aXNpb24gMTg2MDY5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCIKKyNpbmNsdWRlICJJbW11dGFibGVORkFO
b2RlQnVpbGRlci5oIgogI2luY2x1ZGUgIk5GQU5vZGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKQEAgLTM2LDQyICszNywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLWNsYXNzIE5GQVRvREZBOwotCi0vLyBUaGUgTkZBIHBy
b3ZpZGVzIGEgd2F5IHRvIGJ1aWxkIGEgTkZBIGdyYXBoIHdpdGggY2hhcmFjdGVycyBvciBlcHNp
bG9uIGFzIHRyYW5zaXRpb25zLgotLy8gVGhlIG5vZGVzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIGFu
IGlkZW50aWZpZXIuCi1jbGFzcyBORkEgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIE5G
QSgpOwotICAgIHVuc2lnbmVkIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KLSAgICB1
bnNpZ25lZCBjcmVhdGVOb2RlKCk7Ci0KLSAgICB2b2lkIGFkZFRyYW5zaXRpb24odW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8sIGNoYXIgY2hhcmFjdGVyKTsKLSAgICB2b2lkIGFkZEVwc2lsb25U
cmFuc2l0aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLSAgICB2b2lkIGFkZFRyYW5z
aXRpb25zT25BbnlDaGFyYWN0ZXIodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwotICAgIHZv
aWQgc2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFjdGlv
bnMpOwotCi0gICAgdW5zaWduZWQgZ3JhcGhTaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXN0b3Jl
VG9HcmFwaFNpemUodW5zaWduZWQpOwordHlwZWRlZiBJbW11dGFibGVSYW5nZTxjaGFyPiBJbW11
dGFibGVDaGFyUmFuZ2U7Cit0eXBlZGVmIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyPGNoYXIsIHVp
bnQ2NF90PiBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXI7CiAKK3N0cnVjdCBORkEgOiBwdWJs
aWMgSW1tdXRhYmxlTkZBPGNoYXIsIHVpbnQ2NF90PiB7CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgdm9pZCBhZGRSdWxlSWQodW5zaWduZWQgbm9k
ZSwgY29uc3QgQWN0aW9uTGlzdCYgcnVsZUlkcyk7Ci0KICAgICB2b2lkIGRlYnVnUHJpbnREb3Qo
KSBjb25zdDsKLSNlbHNlCi0gICAgdm9pZCBhZGRSdWxlSWQodW5zaWduZWQsIHVpbnQ2NF90KSB7
IH0KLSNlbmRpZgotI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcK
LSAgICBzaXplX3QgbWVtb3J5VXNlZCgpIGNvbnN0OwogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIE5GQVRvREZBOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVwc2ls
b25UcmFuc2l0aW9uQ2hhcmFjdGVyID0gMjU2OwotCi0gICAgVmVjdG9yPE5GQU5vZGU+IG1fbm9k
ZXM7Ci0gICAgdW5zaWduZWQgbV9yb290OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaAkocmV2aXNpb24gMTg2MDY5KQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHR5cGVkZWYgSGFzaE1hcDx1aW50MTZfdCwgTkZBTm9kZUluZGV4U2UKIAog
Y2xhc3MgTkZBTm9kZSB7CiBwdWJsaWM6Ci0gICAgSGFzaE1hcDx1aW50MTZfdCwgTkZBTm9kZUlu
ZGV4U2V0LCBEZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDE2X3Q+PiB0cmFuc2l0aW9uczsKKyAgICBORkFOb2RlVHJhbnNp
dGlvbnMgdHJhbnNpdGlvbnM7CiAgICAgTkZBTm9kZUluZGV4U2V0IHRyYW5zaXRpb25zT25BbnlD
aGFyYWN0ZXI7CiAKICAgICBBY3Rpb25MaXN0IGZpbmFsUnVsZUlkczsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAJKHJldmlzaW9uIDE4NjA2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lv
bnNEZWJ1Z2dpbmcuaCIKICNpbmNsdWRlICJERkFOb2RlLmgiCisjaW5jbHVkZSAiSW1tdXRhYmxl
TkZBLmgiCisjaW5jbHVkZSAiTXV0YWJsZVJhbmdlTGlzdC5oIgogI2luY2x1ZGUgIk5GQS5oIgog
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM5
LDUzICs0MSw0OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucyB7CiAKK3R5cGVkZWYgTXV0YWJsZVJhbmdlPGNoYXIsIE5GQU5vZGVJbmRleFNldD4g
TkZBTm9kZVJhbmdlOwordHlwZWRlZiBNdXRhYmxlUmFuZ2VMaXN0PGNoYXIsIE5GQU5vZGVJbmRl
eFNldD4gTkZBTm9kZVJhbmdlTGlzdDsKK3R5cGVkZWYgTXV0YWJsZVJhbmdlTGlzdDxjaGFyLCBO
RkFOb2RlSW5kZXhTZXQsIDEyOD4gUHJlYWxsb2NhdGVkTkZBTm9kZVJhbmdlTGlzdDsKKwogLy8g
RklYTUU6IHNldCBhIGJldHRlciBpbml0aWFsIHNpemUuCiAvLyBGSVhNRTogaW5jbHVkZSB0aGUg
aGFzaCBpbnNpZGUgTm9kZUlkU2V0LgogdHlwZWRlZiBORkFOb2RlSW5kZXhTZXQgTm9kZUlkU2V0
OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZXBzaWxvbkNsb3N1cmVFeGNsdWRpbmdTZWxmKGNvbnN0
IFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGgsIHVuc2lnbmVkIG5vZGVJZCwgdW5zaWduZWQgZXBz
aWxvblRyYW5zaXRpb25DaGFyYWN0ZXIsIFZlY3Rvcjx1bnNpZ25lZD4mIG91dHB1dCkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBlcHNpbG9uQ2xvc3VyZUV4Y2x1ZGluZ1NlbGYoTkZBJiBuZmEsIHVuc2ln
bmVkIG5vZGVJZCwgVmVjdG9yPHVuc2lnbmVkPiYgb3V0cHV0KQogewotICAgIGNvbnN0IGF1dG8m
IHRyYW5zaXRpb25zID0gbmZhR3JhcGhbbm9kZUlkXS50cmFuc2l0aW9uczsKLSAgICBhdXRvIGVw
c2lsb25UcmFuc2l0aW9uU2xvdCA9IHRyYW5zaXRpb25zLmZpbmQoZXBzaWxvblRyYW5zaXRpb25D
aGFyYWN0ZXIpOwotCi0gICAgaWYgKGVwc2lsb25UcmFuc2l0aW9uU2xvdCA9PSB0cmFuc2l0aW9u
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgTm9kZUlkU2V0IGNsb3N1cmUoeyBub2Rl
SWQgfSk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCA2ND4gdW5wcm9jZXNzZWROb2RlczsKLSAgICBj
b3B5VG9WZWN0b3IoZXBzaWxvblRyYW5zaXRpb25TbG90LT52YWx1ZSwgdW5wcm9jZXNzZWROb2Rl
cyk7Ci0gICAgY2xvc3VyZS5hZGQodW5wcm9jZXNzZWROb2Rlcy5iZWdpbigpLCB1bnByb2Nlc3Nl
ZE5vZGVzLmVuZCgpKTsKLSAgICBvdXRwdXQgPSB1bnByb2Nlc3NlZE5vZGVzOworICAgIFZlY3Rv
cjx1bnNpZ25lZCwgNjQ+IHVucHJvY2Vzc2VkTm9kZXMoeyBub2RlSWQgfSk7CiAKICAgICBkbyB7
CiAgICAgICAgIHVuc2lnbmVkIHVucHJvY2Vzc2VkTm9kZUlkID0gdW5wcm9jZXNzZWROb2Rlcy50
YWtlTGFzdCgpOwotICAgICAgICBjb25zdCBORkFOb2RlJiBub2RlID0gbmZhR3JhcGhbdW5wcm9j
ZXNzZWROb2RlSWRdOwotICAgICAgICBhdXRvIGVwc2lsb25UcmFuc2l0aW9uU2xvdCA9IG5vZGUu
dHJhbnNpdGlvbnMuZmluZChlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rlcik7Ci0gICAgICAgIGlm
IChlcHNpbG9uVHJhbnNpdGlvblNsb3QgIT0gbm9kZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCB0YXJnZXROb2RlSWQgOiBlcHNpbG9uVHJhbnNpdGlvblNs
b3QtPnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBjbG9zdXJlLmFk
ZCh0YXJnZXROb2RlSWQpOwotICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkgewotICAgICAgICAgICAgICAgICAgICB1bnByb2Nlc3NlZE5vZGVzLmFwcGVuZCh0YXJnZXRO
b2RlSWQpOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHRhcmdldE5vZGVJZCk7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBjb25zdCBhdXRvJiBub2RlID0gbmZhLm5vZGVz
W3VucHJvY2Vzc2VkTm9kZUlkXTsKKworICAgICAgICBmb3IgKHVpbnQzMl90IGVwc2lsb25UYXJn
ZXRJbmRleCA9IG5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzU3RhcnQ7IGVwc2lsb25UYXJn
ZXRJbmRleCA8IG5vZGUuZXBzaWxvblRyYW5zaXRpb25UYXJnZXRzRW5kOyArK2Vwc2lsb25UYXJn
ZXRJbmRleCkgeworICAgICAgICAgICAgdWludDMyX3QgdGFyZ2V0Tm9kZUlkID0gbmZhLmVwc2ls
b25UcmFuc2l0aW9uc1RhcmdldHNbZXBzaWxvblRhcmdldEluZGV4XTsKKyAgICAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gY2xvc3VyZS5hZGQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkTm9k
ZXMuYXBwZW5kKHRhcmdldE5vZGVJZCk7CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh0
YXJnZXROb2RlSWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSB3aGlsZSAoIXVu
cHJvY2Vzc2VkTm9kZXMuaXNFbXB0eSgpKTsKKworICAgIG91dHB1dC5zaHJpbmtUb0ZpdCgpOwog
fQogCi1zdGF0aWMgdm9pZCByZXNvbHZlRXBzaWxvbkNsb3N1cmVzKFZlY3RvcjxORkFOb2RlPiYg
bmZhR3JhcGgsIHVuc2lnbmVkIGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyLCBWZWN0b3I8VmVj
dG9yPHVuc2lnbmVkPj4mIG5mYU5vZGVDbG9zdXJlcykKK3N0YXRpYyB2b2lkIHJlc29sdmVFcHNp
bG9uQ2xvc3VyZXMoTkZBJiBuZmEsIFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiYgbmZhTm9kZUNs
b3N1cmVzKQogewotICAgIHVuc2lnbmVkIG5mYUdyYXBoU2l6ZSA9IG5mYUdyYXBoLnNpemUoKTsK
KyAgICB1bnNpZ25lZCBuZmFHcmFwaFNpemUgPSBuZmEubm9kZXMuc2l6ZSgpOwogICAgIG5mYU5v
ZGVDbG9zdXJlcy5yZXNpemUobmZhR3JhcGhTaXplKTsKKwogICAgIGZvciAodW5zaWduZWQgbm9k
ZUlkID0gMDsgbm9kZUlkIDwgbmZhR3JhcGhTaXplOyArK25vZGVJZCkKLSAgICAgICAgZXBzaWxv
bkNsb3N1cmVFeGNsdWRpbmdTZWxmKG5mYUdyYXBoLCBub2RlSWQsIGVwc2lsb25UcmFuc2l0aW9u
Q2hhcmFjdGVyLCBuZmFOb2RlQ2xvc3VyZXNbbm9kZUlkXSk7CisgICAgICAgIGVwc2lsb25DbG9z
dXJlRXhjbHVkaW5nU2VsZihuZmEsIG5vZGVJZCwgbmZhTm9kZUNsb3N1cmVzW25vZGVJZF0pOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBub2RlSWQgPSAwOyBub2RlSWQgPCBuZmFHcmFwaFNpemU7ICsr
bm9kZUlkKSB7Ci0gICAgICAgIGlmICghbmZhTm9kZUNsb3N1cmVzW25vZGVJZF0uaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBib29sIGVwc2lsb25UcmFuc2l0aW9uSXNSZW1vdmVkID0gbmZhR3Jh
cGhbbm9kZUlkXS50cmFuc2l0aW9ucy5yZW1vdmUoZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChlcHNpbG9uVHJhbnNpdGlvbklzUmVtb3ZlZCwg
ZXBzaWxvblRyYW5zaXRpb25Jc1JlbW92ZWQpOwotICAgICAgICB9Ci0gICAgfQorICAgIC8vIEV2
ZXJ5IG5vZGVzIHN0aWxsIHBvaW50IHRvIHRoYXQgdGFibGUsIGJ1dCB3ZSB3b24ndCB1c2UgaXQg
ZXZlciBhZ2Fpbi4KKyAgICAvLyBDbGVhciBpdCB0byBnZXQgYmFjayB0aGUgbWVtb3J5LiBUaGF0
J3Mgbm90IHByZXR0eSBidXQgbWVtb3J5IGlzIGltcG9ydGFudCBoZXJlLCB3ZSBoYXZlIGJvdGgK
KyAgICAvLyBncmFwaHMgZXhpc3RpbmcgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuZmEuZXBzaWxv
blRyYW5zaXRpb25zVGFyZ2V0cy5jbGVhcigpOwogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIGV4dGVuZFNldFdpdGhDbG9zdXJlKGNvbnN0IFZlY3RvcjxWZWN0b3I8dW5zaWduZWQ+PiYg
bmZhTm9kZUNsb3N1cmVzLCB1bnNpZ25lZCBub2RlSWQsIE5vZGVJZFNldCYgc2V0KQpAQCAtMjE0
LDkgKzIxMSw5IEBAIHN0cnVjdCBVbmlxdWVOb2RlSWRTZXRIYXNoSGFzaFRyYWl0cyA6IHAKIHR5
cGVkZWYgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlTm9kZUlkU2V0PiwgVW5pcXVlTm9k
ZUlkU2V0SGFzaCwgVW5pcXVlTm9kZUlkU2V0SGFzaEhhc2hUcmFpdHM+IFVuaXF1ZU5vZGVJZFNl
dFRhYmxlOwogCiBzdHJ1Y3QgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UgewotICAg
IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKERGQSYgZGZhLCBjb25zdCBWZWN0b3I8
TkZBTm9kZT4mIG5mYUdyYXBoLCBjb25zdCBOb2RlSWRTZXQmIG5vZGVJZFNldCkKKyAgICBOb2Rl
SWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZShERkEmIGRmYSwgY29uc3QgTkZBJiBuZmEsIGNv
bnN0IE5vZGVJZFNldCYgbm9kZUlkU2V0KQogICAgICAgICA6IGRmYShkZmEpCi0gICAgICAgICwg
bmZhR3JhcGgobmZhR3JhcGgpCisgICAgICAgICwgbmZhKG5mYSkKICAgICAgICAgLCBub2RlSWRT
ZXQobm9kZUlkU2V0KQogICAgIHsKICAgICAgICAgLy8gVGhlIGhhc2hpbmcgb3BlcmF0aW9uIG11
c3QgYmUgaW5kZXBlbmRhbnQgb2YgdGhlIG5vZGVJZC4KQEAgLTIyNiw3ICsyMjMsNyBAQCBzdHJ1
Y3QgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UgCiAgICAgICAgIHRoaXMtPmhhc2gg
PSBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2g6Omhhc2goaGFzaCk7CiAgICAgfQogICAgIERG
QSYgZGZhOwotICAgIGNvbnN0IFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGg7CisgICAgY29uc3Qg
TkZBJiBuZmE7CiAgICAgY29uc3QgTm9kZUlkU2V0JiBub2RlSWRTZXQ7CiAgICAgdW5zaWduZWQg
aGFzaDsKIH07CkBAIC0yNDcsMTQgKzI0NCwxMyBAQCBzdHJ1Y3QgTm9kZUlkU2V0VG9VbmlxdWVO
b2RlSWRTZXRUcmFuc2xhCiAgICAgICAgIERGQU5vZGUgbmV3REZBTm9kZTsKIAogICAgICAgICBI
YXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBhY3Rpb25zOworCiAgICAgICAgIGZv
ciAodW5zaWduZWQgbmZhTm9kZUlkIDogc291cmNlLm5vZGVJZFNldCkgewotICAgICAgICAgICAg
Y29uc3QgTkZBTm9kZSYgbmZhTm9kZSA9IHNvdXJjZS5uZmFHcmFwaFtuZmFOb2RlSWRdOwotICAg
ICAgICAgICAgYWN0aW9ucy5hZGQobmZhTm9kZS5maW5hbFJ1bGVJZHMuYmVnaW4oKSwgbmZhTm9k
ZS5maW5hbFJ1bGVJZHMuZW5kKCkpOwotI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNI
SU5FX0RFQlVHR0lORwotICAgICAgICAgICAgbmV3REZBTm9kZS5jb3JyZXNwb25kaW5nTkZBTm9k
ZXMuYXBwZW5kKG5mYU5vZGVJZCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIG5m
YU5vZGUgPSBzb3VyY2UubmZhLm5vZGVzW25mYU5vZGVJZF07CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGFjdGlvbkluZGV4ID0gbmZhTm9kZS5hY3Rpb25TdGFydDsgYWN0aW9uSW5kZXggPCBu
ZmFOb2RlLmFjdGlvbkVuZDsgKythY3Rpb25JbmRleCkKKyAgICAgICAgICAgICAgICBhY3Rpb25z
LmFkZChzb3VyY2UubmZhLmFjdGlvbnNbYWN0aW9uSW5kZXhdKTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICB1bnNpZ25lZCBhY3Rpb25zU3RhcnQgPSBzb3VyY2UuZGZhLmFjdGlvbnMu
c2l6ZSgpOwogICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IGFjdGlvbnMpCiAgICAgICAg
ICAgICBzb3VyY2UuZGZhLmFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CkBAIC0yOTgsNDYgKzI5NCwx
MTggQEAgcHJpdmF0ZToKICAgICBOb2RlSWRTZXQgbV90YXJnZXRzWzEyOF07CiB9OwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgcG9wdWxhdGVUcmFuc2l0aW9ucyhTZXRUcmFuc2l0aW9ucyYgc2V0VHJh
bnNpdGlvbnMsIE5vZGVJZFNldCYgc2V0RmFsbGJhY2tUcmFuc2l0aW9uLCBjb25zdCBVbmlxdWVO
b2RlSWRTZXRJbXBsJiBzb3VyY2VOb2RlU2V0LCBjb25zdCBWZWN0b3I8TkZBTm9kZT4mIGdyYXBo
LCBjb25zdCBWZWN0b3I8VmVjdG9yPHVuc2lnbmVkPj4mIG5mYU5vZGVjbG9zdXJlcykKK3N0cnVj
dCBEYXRhQ29udmVydGVyV2l0aEVwc2lsb25DbG9zdXJlIHsKKyAgICBjb25zdCBWZWN0b3I8VmVj
dG9yPHVuc2lnbmVkPj4mIG5mYU5vZGVjbG9zdXJlczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhYmxlPgorICAgIE5GQU5vZGVJbmRleFNldCBjb252ZXJ0KGNvbnN0IEl0ZXJhYmxlJiBp
dGVyYWJsZSkKKyAgICB7CisgICAgICAgIE5GQU5vZGVJbmRleFNldCByZXN1bHQ7CisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUlkIDogaXRlcmFibGUpIHsKKyAgICAgICAgICAgIHJlc3VsdC5h
ZGQobm9kZUlkKTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIG5vZGVDbG9z
dXJlID0gbmZhTm9kZWNsb3N1cmVzW25vZGVJZF07CisgICAgICAgICAgICByZXN1bHQuYWRkKG5v
ZGVDbG9zdXJlLmJlZ2luKCksIG5vZGVDbG9zdXJlLmVuZCgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxl
PgorICAgIHZvaWQgZXh0ZW5kKE5GQU5vZGVJbmRleFNldCYgZGVzdGluYXRpb24sIGNvbnN0IEl0
ZXJhYmxlJiBpdGVyYWJsZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlkIDog
aXRlcmFibGUpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZGVzdGluYXRpb24uYWRk
KG5vZGVJZCk7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBub2RlQ2xvc3VyZSA9IG5mYU5vZGVj
bG9zdXJlc1tub2RlSWRdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChub2RlQ2xv
c3VyZS5iZWdpbigpLCBub2RlQ2xvc3VyZS5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlQ29tYmluZWRUcmFuc2l0
aW9uKFByZWFsbG9jYXRlZE5GQU5vZGVSYW5nZUxpc3QmIGNvbWJpbmVkUmFuZ2VMaXN0LCBjb25z
dCBVbmlxdWVOb2RlSWRTZXRJbXBsJiBzb3VyY2VOb2RlU2V0LCBjb25zdCBORkEmIGltbXV0YWJs
ZU5GQSwgY29uc3QgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+JiBuZmFOb2RlY2xvc3VyZXMpCiB7
Ci0gICAgQVNTRVJUKCFncmFwaC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChzZXRGYWxsYmFja1Ry
YW5zaXRpb24uaXNFbXB0eSgpKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgZm9yIChjb25z
dCBOb2RlSWRTZXQmIHNldCA6IHNldFRyYW5zaXRpb25zKQotICAgICAgICBBU1NFUlQoc2V0Lmlz
RW1wdHkoKSk7Ci0jZW5kaWYKKyAgICBjb21iaW5lZFJhbmdlTGlzdC5jbGVhcigpOwogCi0gICAg
VmVjdG9yPHVuc2lnbmVkLCA4PiBhbGxGYWxsYmFja1RyYW5zaXRpb25zOwogICAgIGNvbnN0IHVu
c2lnbmVkKiBidWZmZXIgPSBzb3VyY2VOb2RlU2V0LmJ1ZmZlcigpOworCisgICAgRGF0YUNvbnZl
cnRlcldpdGhFcHNpbG9uQ2xvc3VyZSBjb252ZXJ0ZXIgeyBuZmFOb2RlY2xvc3VyZXMgfTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTm9kZVNldC5tX3NpemU7ICsraSkgewog
ICAgICAgICB1bnNpZ25lZCBub2RlSWQgPSBidWZmZXJbaV07Ci0gICAgICAgIGNvbnN0IE5GQU5v
ZGUmIG5mYVNvdXJjZU5vZGUgPSBncmFwaFtub2RlSWRdOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IHRhcmdldFRyYW5zaXRpb24gOiBuZmFTb3VyY2VOb2RlLnRyYW5zaXRpb25zT25BbnlDaGFyYWN0
ZXIpCi0gICAgICAgICAgICBhbGxGYWxsYmFja1RyYW5zaXRpb25zLmFwcGVuZCh0YXJnZXRUcmFu
c2l0aW9uKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCB0YXJnZXROb2RlSWQgOiBhbGxGYWxs
YmFja1RyYW5zaXRpb25zKSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gc2V0RmFsbGJhY2tU
cmFuc2l0aW9uLmFkZCh0YXJnZXROb2RlSWQpOwotICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICBleHRlbmRTZXRXaXRoQ2xvc3VyZShuZmFOb2RlY2xvc3VyZXMs
IHRhcmdldE5vZGVJZCwgc2V0RmFsbGJhY2tUcmFuc2l0aW9uKTsKKyAgICAgICAgYXV0byB0cmFu
c2l0aW9ucyA9IGltbXV0YWJsZU5GQS50cmFuc2l0aW9uc0Zvck5vZGUobm9kZUlkKTsKKyAgICAg
ICAgY29tYmluZWRSYW5nZUxpc3QuZXh0ZW5kKHRyYW5zaXRpb25zLmJlZ2luKCksIHRyYW5zaXRp
b25zLmVuZCgpLCBjb252ZXJ0ZXIpOwogICAgIH0KK30KIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzb3VyY2VOb2RlU2V0Lm1fc2l6ZTsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG5v
ZGVJZCA9IGJ1ZmZlcltpXTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uU2xv
dCA6IGdyYXBoW25vZGVJZF0udHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgIE5vZGVJZFNldCYg
dGFyZ2V0U2V0ID0gc2V0VHJhbnNpdGlvbnNbdHJhbnNpdGlvblNsb3Qua2V5XTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdGFyZ2V0Tm9kSWQgOiB0cmFuc2l0aW9uU2xvdC52YWx1ZSkgewot
ICAgICAgICAgICAgICAgIHRhcmdldFNldC5hZGQodGFyZ2V0Tm9kSWQpOwotICAgICAgICAgICAg
ICAgIGV4dGVuZFNldFdpdGhDbG9zdXJlKG5mYU5vZGVjbG9zdXJlcywgdGFyZ2V0Tm9kSWQsIHRh
cmdldFNldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvblNsb3Qu
a2V5KQotICAgICAgICAgICAgICAgIHRhcmdldFNldC5hZGQoc2V0RmFsbGJhY2tUcmFuc2l0aW9u
LmJlZ2luKCksIHNldEZhbGxiYWNrVHJhbnNpdGlvbi5lbmQoKSk7CitzdGF0aWMgaW5saW5lIGJv
b2wgY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKGNvbnN0IFByZWFsbG9jYXRlZE5GQU5vZGVSYW5n
ZUxpc3QmIHJhbmdlTGlzdCkKK3sKKyAgICAvLyBUcmFuc2l0aW9ucyBjYW4gY29udGFpbnMgIjAi
IGlmIHRoZSBleHByZXNzaW9uIGhhcyBhIGVuZC1vZi1saW5lIG1hcmtlci4KKyAgICAvLyBGYWxs
YmFjayB0cmFuc2l0aW9ucyBjb3ZlciAxLTEyNy4gV2UgaGF2ZSB0byBiZSBjYXJlZnVsIHdpdGgg
dGhlIGZpcnN0LgorCisgICAgYXV0byBpdGVyYXRvciA9IHJhbmdlTGlzdC5iZWdpbigpOworICAg
IGF1dG8gZW5kID0gcmFuZ2VMaXN0LmVuZCgpOworICAgIGlmIChpdGVyYXRvciA9PSBlbmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIgbGFzdFNlZW5DaGFyYWN0ZXIgPSAwOwor
ICAgIGlmICghaXRlcmF0b3ItPmZpcnN0KSB7CisgICAgICAgIGxhc3RTZWVuQ2hhcmFjdGVyID0g
aXRlcmF0b3ItPmxhc3Q7CisgICAgICAgIGlmIChsYXN0U2VlbkNoYXJhY3RlciA9PSAxMjcpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CisKKyAg
ICBmb3IgKDtpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3IpIHsKKyAgICAgICAgQVNTRVJUKGl0
ZXJhdG9yLT5maXJzdCA+IGxhc3RTZWVuQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9y
LT5maXJzdCAhPSBsYXN0U2VlbkNoYXJhY3RlciArIDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKGl0ZXJhdG9yLT5sYXN0ID09IDEyNykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBsYXN0U2VlbkNoYXJhY3RlciA9IGl0ZXJhdG9yLT5sYXN0Owor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZmlu
ZEJlc3RGYWxsYmFja1RhcmdldChjb25zdCBQcmVhbGxvY2F0ZWRORkFOb2RlUmFuZ2VMaXN0JiBy
YW5nZUxpc3QsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMTI4PiYgcmFuZ2VUb1RhcmdldCkKK3sK
KyAgICBBU1NFUlQoY2FuVXNlRmFsbGJhY2tUcmFuc2l0aW9uKHJhbmdlTGlzdCkpOworCisgICAg
SGFzaE1hcDx1aW50MzJfdCwgdW5zaWduZWQsIERlZmF1bHRIYXNoPHVpbnQzMl90Pjo6SGFzaCwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IGhpc3RvZ3JhbTsK
KworICAgIHVuc2lnbmVkIHJhbmdlVG9UYXJnZXRJbmRleCA9IDA7CisgICAgYXV0byBpdGVyYXRv
ciA9IHJhbmdlTGlzdC5iZWdpbigpOworICAgIGF1dG8gZW5kID0gcmFuZ2VMaXN0LmVuZCgpOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gZW5kLCAiQW4gZW1wdHkgcmFuZ2Ug
bGlzdCBjYW5ub3QgdXNlIGEgZmFsbGJhY2sgdHJhbnNpdGlvbi4iKTsKKworICAgIGlmICghaXRl
cmF0b3ItPmZpcnN0ICYmICFpdGVyYXRvci0+bGFzdCkgeworICAgICAgICArK2l0ZXJhdG9yOwor
ICAgICAgICArK3JhbmdlVG9UYXJnZXRJbmRleDsKKyAgICB9CisgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShpdGVyYXRvciAhPSBlbmQsICJBbiBlbXB0eSByYW5nZSBsaXN0IG1hdGNoaW5nIG9ubHkg
emVybyBjYW5ub3QgdXNlIGEgZmFsbGJhY2sgdHJhbnNpdGlvbi4iKTsKKworICAgIHVpbnQzMl90
IGJlc3RUYXJnZXQgPSByYW5nZVRvVGFyZ2V0W3JhbmdlVG9UYXJnZXRJbmRleF07CisgICAgdW5z
aWduZWQgYmVzdFRhcmdldFNjb3JlID0gIWl0ZXJhdG9yLT5maXJzdCA/IGl0ZXJhdG9yLT5zaXpl
KCkgLSAxIDogaXRlcmF0b3ItPnNpemUoKTsKKyAgICBoaXN0b2dyYW0uYWRkKGJlc3RUYXJnZXQs
IGJlc3RUYXJnZXRTY29yZSk7CisgICAgKytpdGVyYXRvcjsKKyAgICArK3JhbmdlVG9UYXJnZXRJ
bmRleDsKKworICAgIGZvciAoO2l0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvciwgKytyYW5nZVRv
VGFyZ2V0SW5kZXgpIHsKKyAgICAgICAgdW5zaWduZWQgcmFuZ2VTaXplID0gaXRlcmF0b3ItPnNp
emUoKTsKKyAgICAgICAgdWludDMyX3QgdGFyZ2V0ID0gcmFuZ2VUb1RhcmdldFtyYW5nZVRvVGFy
Z2V0SW5kZXhdOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGhpc3RvZ3JhbS5hZGQodGFyZ2V0
LCByYW5nZVNpemUpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAg
ICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSByYW5nZVNpemU7CisgICAgICAgIGlm
IChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID4gYmVzdFRhcmdldFNjb3JlKSB7CisgICAgICAg
ICAgICBiZXN0VGFyZ2V0U2NvcmUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAg
ICAgICAgYmVzdFRhcmdldCA9IHRhcmdldDsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4g
YmVzdFRhcmdldDsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgZ2V0T3JDcmVh
dGVERkFOb2RlKGNvbnN0IE5vZGVJZFNldCYgbmZhTm9kZVNldCwgY29uc3QgVmVjdG9yPE5GQU5v
ZGU+JiBuZmFHcmFwaCwgREZBJiBkZmEsIFVuaXF1ZU5vZGVJZFNldFRhYmxlJiB1bmlxdWVOb2Rl
SWRTZXRUYWJsZSwgVmVjdG9yPFVuaXF1ZU5vZGVJZFNldEltcGwqPiYgdW5wcm9jZXNzZWROb2Rl
cykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldE9yQ3JlYXRlREZBTm9kZShjb25z
dCBOb2RlSWRTZXQmIG5mYU5vZGVTZXQsIGNvbnN0IE5GQSYgbmZhLCBERkEmIGRmYSwgVW5pcXVl
Tm9kZUlkU2V0VGFibGUmIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCBWZWN0b3I8VW5pcXVlTm9kZUlk
U2V0SW1wbCo+JiB1bnByb2Nlc3NlZE5vZGVzKQogewotICAgIE5vZGVJZFNldFRvVW5pcXVlTm9k
ZUlkU2V0U291cmNlIG5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKGRmYSwgbmZhR3Jh
cGgsIG5mYU5vZGVTZXQpOworICAgIE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlIG5v
ZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKGRmYSwgbmZhLCBuZmFOb2RlU2V0KTsKICAg
ICBhdXRvIHVuaXF1ZU5vZGVJZEFkZFJlc3VsdCA9IHVuaXF1ZU5vZGVJZFNldFRhYmxlLmFkZDxO
b2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3I+KG5vZGVJZFNldFRvVW5pcXVlTm9k
ZUlkU2V0U291cmNlKTsKICAgICBpZiAodW5pcXVlTm9kZUlkQWRkUmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgIHVucHJvY2Vzc2VkTm9kZXMuYXBwZW5kKHVuaXF1ZU5vZGVJZEFkZFJlc3VsdC5p
dGVyYXRvci0+aW1wbCgpKTsKQEAgLTM0Nyw2MCArNDE1LDYzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIHVuc2lnbmVkIGdldE9yQ3JlYXQKIAogREZBIE5GQVRvREZBOjpjb252ZXJ0KE5GQSYgbmZh
KQogewotICAgIERGQSBkZmE7Ci0gICAgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCA9IG5mYS5t
X25vZGVzOwotCiAgICAgVmVjdG9yPFZlY3Rvcjx1bnNpZ25lZD4+IG5mYU5vZGVDbG9zdXJlczsK
LSAgICByZXNvbHZlRXBzaWxvbkNsb3N1cmVzKG5mYUdyYXBoLCBORkE6OmVwc2lsb25UcmFuc2l0
aW9uQ2hhcmFjdGVyLCBuZmFOb2RlQ2xvc3VyZXMpOworICAgIHJlc29sdmVFcHNpbG9uQ2xvc3Vy
ZXMobmZhLCBuZmFOb2RlQ2xvc3VyZXMpOworCisgICAgREZBIGRmYTsKIAogICAgIE5vZGVJZFNl
dCBpbml0aWFsU2V0KHsgbmZhLnJvb3QoKSB9KTsKICAgICBleHRlbmRTZXRXaXRoQ2xvc3VyZShu
ZmFOb2RlQ2xvc3VyZXMsIG5mYS5yb290KCksIGluaXRpYWxTZXQpOwogCiAgICAgVW5pcXVlTm9k
ZUlkU2V0VGFibGUgdW5pcXVlTm9kZUlkU2V0VGFibGU7CiAKLSAgICBOb2RlSWRTZXRUb1VuaXF1
ZU5vZGVJZFNldFNvdXJjZSBpbml0aWFsTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2Uo
ZGZhLCBuZmFHcmFwaCwgaW5pdGlhbFNldCk7CisgICAgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRT
ZXRTb3VyY2UgaW5pdGlhbE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlKGRmYSwgbmZh
LCBpbml0aWFsU2V0KTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IHVuaXF1ZU5vZGVJZFNldFRhYmxl
LmFkZDxOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3I+KGluaXRpYWxOb2RlSWRT
ZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk7CiAKICAgICBWZWN0b3I8VW5pcXVlTm9kZUlkU2V0
SW1wbCo+IHVucHJvY2Vzc2VkTm9kZXM7CiAgICAgdW5wcm9jZXNzZWROb2Rlcy5hcHBlbmQoYWRk
UmVzdWx0Lml0ZXJhdG9yLT5pbXBsKCkpOwogCi0gICAgU2V0VHJhbnNpdGlvbnMgdHJhbnNpdGlv
bnNGcm9tQ2xvc2VkU2V0OwotCisgICAgUHJlYWxsb2NhdGVkTkZBTm9kZVJhbmdlTGlzdCBjb21i
aW5lZFJhbmdlTGlzdDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDEyOD4gcmFuZ2VUb1RhcmdldDsK
ICAgICBkbyB7CiAgICAgICAgIFVuaXF1ZU5vZGVJZFNldEltcGwqIHVuaXF1ZU5vZGVJZFNldElt
cGwgPSB1bnByb2Nlc3NlZE5vZGVzLnRha2VMYXN0KCk7CisgICAgICAgIGNyZWF0ZUNvbWJpbmVk
VHJhbnNpdGlvbihjb21iaW5lZFJhbmdlTGlzdCwgKnVuaXF1ZU5vZGVJZFNldEltcGwsIG5mYSwg
bmZhTm9kZUNsb3N1cmVzKTsKIAotICAgICAgICB1bnNpZ25lZCBkZmFOb2RlSWQgPSB1bmlxdWVO
b2RlSWRTZXRJbXBsLT5tX2RmYU5vZGVJZDsKLSAgICAgICAgTm9kZUlkU2V0IHNldEZhbGxiYWNr
VHJhbnNpdGlvbjsKLSAgICAgICAgcG9wdWxhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0Zyb21D
bG9zZWRTZXQsIHNldEZhbGxiYWNrVHJhbnNpdGlvbiwgKnVuaXF1ZU5vZGVJZFNldEltcGwsIG5m
YUdyYXBoLCBuZmFOb2RlQ2xvc3VyZXMpOworICAgICAgICByYW5nZVRvVGFyZ2V0LmNsZWFyKCk7
CisgICAgICAgIGZvciAoY29uc3QgTkZBTm9kZVJhbmdlJiByYW5nZSA6IGNvbWJpbmVkUmFuZ2VM
aXN0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXROb2RlSWQgPSBnZXRPckNyZWF0ZURG
QU5vZGUocmFuZ2UuZGF0YSwgbmZhLCBkZmEsIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCB1bnByb2Nl
c3NlZE5vZGVzKTsKKyAgICAgICAgICAgIHJhbmdlVG9UYXJnZXQuYXBwZW5kKHRhcmdldE5vZGVJ
ZCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHVzZUZhbGxiYWNrVHJhbnNpdGlvbiA9IGNh
blVzZUZhbGxiYWNrVHJhbnNpdGlvbihjb21iaW5lZFJhbmdlTGlzdCk7CisgICAgICAgIHVpbnQz
Ml90IHByZWZlcmVkRmFsbGJhY2tUYXJnZXQgPSAwOworICAgICAgICBpZiAodXNlRmFsbGJhY2tU
cmFuc2l0aW9uKQorICAgICAgICAgICAgcHJlZmVyZWRGYWxsYmFja1RhcmdldCA9IGZpbmRCZXN0
RmFsbGJhY2tUYXJnZXQoY29tYmluZWRSYW5nZUxpc3QsIHJhbmdlVG9UYXJnZXQpOwogCiAgICAg
ICAgIHVuc2lnbmVkIHRyYW5zaXRpb25zU3RhcnQgPSBkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMu
c2l6ZSgpOwotICAgICAgICBBU1NFUlQoZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKSA9
PSBkZmEudHJhbnNpdGlvbkRlc3RpbmF0aW9ucy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGtleSA9IDA7IGtleSA8IHRyYW5zaXRpb25zRnJvbUNsb3NlZFNldC5zaXplKCk7ICsra2V5
KSB7Ci0gICAgICAgICAgICBOb2RlSWRTZXQmIHRhcmdldE5vZGVTZXQgPSB0cmFuc2l0aW9uc0Zy
b21DbG9zZWRTZXRba2V5XTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldE5vZGVTZXQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0
YXJnZXROb2RlSWQgPSBnZXRPckNyZWF0ZURGQU5vZGUodGFyZ2V0Tm9kZVNldCwgbmZhR3JhcGgs
IGRmYSwgdW5pcXVlTm9kZUlkU2V0VGFibGUsIHVucHJvY2Vzc2VkTm9kZXMpOwotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoa2V5IDw9IDEyNyk7Ci0gICAgICAgICAgICBkZmEudHJhbnNpdGlv
bkNoYXJhY3RlcnMuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGtleSkpOwotICAgICAgICAg
ICAgZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlvbnMuYXBwZW5kKHRhcmdldE5vZGVJZCk7CisgICAg
ICAgIHVuc2lnbmVkIHJhbmdlVG9UYXJnZXRJbmRleCA9IDA7CisKKyAgICAgICAgZm9yIChjb25z
dCBORkFOb2RlUmFuZ2UmIHJhbmdlIDogY29tYmluZWRSYW5nZUxpc3QpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldE5vZGVJZCA9IHJhbmdlVG9UYXJnZXRbcmFuZ2VUb1RhcmdldEluZGV4
XTsKIAotICAgICAgICAgICAgdGFyZ2V0Tm9kZVNldC5jbGVhcigpOworICAgICAgICAgICAgaWYg
KCEodXNlRmFsbGJhY2tUcmFuc2l0aW9uICYmIHRhcmdldE5vZGVJZCA9PSBwcmVmZXJlZEZhbGxi
YWNrVGFyZ2V0KSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJhbmdlLmZp
cnN0OyBpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5sYXN0KTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVycy5hcHBlbmQoc3RhdGljX2Nh
c3Q8dWludDhfdD4oaSkpOworICAgICAgICAgICAgICAgICAgICBkZmEudHJhbnNpdGlvbkRlc3Rp
bmF0aW9ucy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICArK3JhbmdlVG9UYXJnZXRJbmRleDsKICAgICAgICAgfQogICAg
ICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0VuZCA9IGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVycy5z
aXplKCk7Ci0gICAgICAgIEFTU0VSVChkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMuc2l6ZSgpID09
IGRmYS50cmFuc2l0aW9uRGVzdGluYXRpb25zLnNpemUoKSk7CiAgICAgICAgIHVuc2lnbmVkIHRy
YW5zaXRpb25zTGVuZ3RoID0gdHJhbnNpdGlvbnNFbmQgLSB0cmFuc2l0aW9uc1N0YXJ0OwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cmFuc2l0aW9uc0xlbmd0aCA8PSAxMjcpOwotICAgICAgICBk
ZmEubm9kZXNbZGZhTm9kZUlkXS5zZXRUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc1N0YXJ0LCBzdGF0
aWNfY2FzdDx1aW50OF90Pih0cmFuc2l0aW9uc0xlbmd0aCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFzZXRGYWxsYmFja1RyYW5zaXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB0YXJnZXROb2RlSWQgPSBnZXRPckNyZWF0ZURGQU5vZGUoc2V0RmFsbGJhY2tUcmFuc2l0
aW9uLCBuZmFHcmFwaCwgZGZhLCB1bmlxdWVOb2RlSWRTZXRUYWJsZSwgdW5wcm9jZXNzZWROb2Rl
cyk7Ci0gICAgICAgICAgICBERkFOb2RlJiBkZmFTb3VyY2VOb2RlID0gZGZhLm5vZGVzW2RmYU5v
ZGVJZF07Ci0gICAgICAgICAgICBkZmFTb3VyY2VOb2RlLmFkZEZhbGxiYWNrVHJhbnNpdGlvbihk
ZmEsIHRhcmdldE5vZGVJZCk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghdW5wcm9jZXNzZWRO
b2Rlcy5pc0VtcHR5KCkpOworICAgICAgICB1bnNpZ25lZCBkZmFOb2RlSWQgPSB1bmlxdWVOb2Rl
SWRTZXRJbXBsLT5tX2RmYU5vZGVJZDsKKyAgICAgICAgREZBTm9kZSYgZGZhU291cmNlTm9kZSA9
IGRmYS5ub2Rlc1tkZmFOb2RlSWRdOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRyYW5z
aXRpb25zTGVuZ3RoIDwgMTI3LCAiVHJhbnNpdGlvbnMgY292ZXJpbmcgdGhlIGVudGlyZSBhbHBo
YWJldCBzaG91bGQgdXNlIGEgZmFsbGJhY2sgdHJhbnNpdGlvbiIpOworICAgICAgICBkZmFTb3Vy
Y2VOb2RlLnNldFRyYW5zaXRpb25zKHRyYW5zaXRpb25zU3RhcnQsIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHRyYW5zaXRpb25zTGVuZ3RoKSk7CiAKKyAgICAgICAgaWYgKHVzZUZhbGxiYWNrVHJhbnNp
dGlvbikKKyAgICAgICAgICAgIGRmYVNvdXJjZU5vZGUuYWRkRmFsbGJhY2tUcmFuc2l0aW9uKGRm
YSwgcHJlZmVyZWRGYWxsYmFja1RhcmdldCk7CisgICAgfSB3aGlsZSAoIXVucHJvY2Vzc2VkTm9k
ZXMuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gZGZhOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmgJKHJldmlzaW9uIDE4NjA2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgewogCi1jbGFzcyBORkE7CitzdHJ1Y3QgTkZBOwogCiAvLyBORkFUb0RGQSBw
cm92aWRlcyBhIHdheSB0byBidWlsZCBhIERGQSBjb3JyZXNwb25kaW5nIHRvIGEgTkZBLgogY2xh
c3MgTkZBVG9ERkEgewpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVy
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0u
aAkocmV2aXNpb24gMTg2MDY5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
VGVybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcXVhbnRpZnkoY29uc3QgQXRvbVF1YW50aWZpZXImKTsKIAotICAgIHVuc2lnbmVkIGdlbmVy
YXRlR3JhcGgoTkZBJiwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0
aW9ucykgY29uc3Q7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlR3Jh
cGgoTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzdGFydCwgY29uc3QgQWN0aW9u
TGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbmRPZkxpbmVBc3NlcnRp
b24oKSBjb25zdDsKIApAQCAtMTE4LDcgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJl
dHVybiB2YWx1ZSBjYW4gYmUgZmFsc2UgZm9yIGEgZ3JvdXAgZXF1aXZhbGVudCB0byBhIHVuaXZl
cnNhbCB0cmFuc2l0aW9uLgogICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3Q7
CiAKLSAgICB1bnNpZ25lZCBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmLCB1bnNpZ25lZCBz
b3VyY2UpIGNvbnN0OworICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBnZW5lcmF0ZVN1
YmdyYXBoRm9yQXRvbShORkEmLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJjZSkg
Y29uc3Q7CiAKICAgICB2b2lkIGRlc3Ryb3koKTsKIApAQCAtMjg2LDcgKzI4Niw3IEBAIGlubGlu
ZSBUZXJtOjpUZXJtKFVuaXZlcnNhbFRyYW5zaXRpb25UYWcKICAgICA6IG1fdGVybVR5cGUoVGVy
bVR5cGU6OkNoYXJhY3RlclNldCkKIHsKICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21EYXRhLmNo
YXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KCk7Ci0gICAgZm9yIChVQ2hhciBpID0gMDsgaSA8IDEy
ODsgKytpKQorICAgIGZvciAoVUNoYXIgaSA9IDE7IGkgPCAxMjg7ICsraSkKICAgICAgICAgbV9h
dG9tRGF0YS5jaGFyYWN0ZXJTZXQuc2V0KGkpOwogfQogCkBAIC0zOTUsMTEgKzM5NSwxMSBAQCBp
bmxpbmUgdm9pZCBUZXJtOjpxdWFudGlmeShjb25zdCBBdG9tUXVhCiAgICAgbV9xdWFudGlmaWVy
ID0gcXVhbnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2lnbmVkIFRlcm06OlRlcm06OmdlbmVyYXRl
R3JhcGgoTkZBJiBuZmEsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFj
dGlvbnMpIGNvbnN0CitpbmxpbmUgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIFRlcm06Omdl
bmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc3RhcnQs
IGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0aW9ucykgY29uc3QKIHsKICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKIAotICAgIHVuc2lnbmVkIG5ld0VuZDsKKyAgICBJbW11dGFibGVDaGFyTkZBTm9k
ZUJ1aWxkZXIgbmV3RW5kOwogCiAgICAgc3dpdGNoIChtX3F1YW50aWZpZXIpIHsKICAgICBjYXNl
IEF0b21RdWFudGlmaWVyOjpPbmU6IHsKQEAgLTQwOCwzNiArNDA4LDM2IEBAIGlubGluZSB1bnNp
Z25lZCBUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXAKICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6WmVyb09yT25lOiB7CiAgICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JB
dG9tKG5mYSwgc3RhcnQpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQs
IG5ld0VuZCk7CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKG5ld0VuZCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3Jl
OiB7Ci0gICAgICAgIHVuc2lnbmVkIHJlcGVhdFN0YXJ0ID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAg
ICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFydCk7CisgICAg
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRTdGFydChuZmEpOworICAgICAg
ICBzdGFydC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CiAKLSAgICAgICAgdW5z
aWduZWQgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFy
dCk7Ci0gICAgICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIHJlcGVhdFN0
YXJ0KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdEVuZCA9IGdl
bmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgcmVwZWF0U3RhcnQpOworICAgICAgICByZXBlYXRF
bmQuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAgICAgIHVuc2lnbmVk
IGtsZWVuRW5kID0gbmZhLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFu
c2l0aW9uKHJlcGVhdEVuZCwga2xlZW5FbmQpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5z
aXRpb24oc3RhcnQsIGtsZWVuRW5kKTsKLSAgICAgICAgbmV3RW5kID0ga2xlZW5FbmQ7CisgICAg
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBrbGVlbkVuZChuZmEpOworICAgICAgICBy
ZXBlYXRFbmQuYWRkRXBzaWxvblRyYW5zaXRpb24oa2xlZW5FbmQpOworICAgICAgICBzdGFydC5h
ZGRFcHNpbG9uVHJhbnNpdGlvbihrbGVlbkVuZCk7CisgICAgICAgIG5ld0VuZCA9IFdURjo6bW92
ZShrbGVlbkVuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlm
aWVyOjpPbmVPck1vcmU6IHsKLSAgICAgICAgdW5zaWduZWQgcmVwZWF0U3RhcnQgPSBuZmEuY3Jl
YXRlTm9kZSgpOwotICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIHJlcGVh
dFN0YXJ0KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdFN0YXJ0
KG5mYSk7CisgICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsK
IAotICAgICAgICB1bnNpZ25lZCByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShu
ZmEsIHJlcGVhdFN0YXJ0KTsKLSAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVh
dEVuZCwgcmVwZWF0U3RhcnQpOworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIg
cmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCk7Cisg
ICAgICAgIHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CiAKLSAg
ICAgICAgdW5zaWduZWQgYWZ0ZXJSZXBlYXQgPSBuZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICBu
ZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBhZnRlclJlcGVhdCk7Ci0gICAgICAg
IG5ld0VuZCA9IGFmdGVyUmVwZWF0OworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxk
ZXIgYWZ0ZXJSZXBlYXQobmZhKTsKKyAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0
aW9uKGFmdGVyUmVwZWF0KTsKKyAgICAgICAgbmV3RW5kID0gV1RGOjptb3ZlKGFmdGVyUmVwZWF0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KLSAgICBuZmEuc2V0QWN0aW9ucyhuZXdF
bmQsIGZpbmFsQWN0aW9ucyk7CisgICAgbmV3RW5kLnNldEFjdGlvbnMoZmluYWxBY3Rpb25zLmJl
Z2luKCksIGZpbmFsQWN0aW9ucy5lbmQoKSk7CiAgICAgcmV0dXJuIG5ld0VuZDsKIH0KIApAQCAt
NjEyLDM2ICs2MTIsNjEgQEAgaW5saW5lIGJvb2wgVGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9u
KAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHVuc2lnbmVkIFRlcm06OmdlbmVyYXRl
U3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZhLCB1bnNpZ25lZCBzb3VyY2UpIGNvbnN0CitpbmxpbmUg
SW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9t
KE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJjZSkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKICAgICBjYXNlIFRlcm1UeXBlOjpFbXB0eToKICAg
ICBjYXNlIFRlcm1UeXBlOjpEZWxldGVkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gSW1tdXRhYmxlQ2hhck5GQU5vZGVC
dWlsZGVyKCk7CiAgICAgY2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OiB7Ci0gICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IG5mYS5jcmVhdGVOb2RlKCk7Ci0gICAgICAgIGlmIChpc1VuaXZlcnNh
bFRyYW5zaXRpb24oKSkKLSAgICAgICAgICAgIG5mYS5hZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFj
dGVyKHNvdXJjZSwgdGFyZ2V0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KFVDaGFyIGkgPSAwOyBpIDwgMTI4OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5m
YS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGF0aWNfY2FzdDxjaGFyPihpKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBm
b3IgKFVDaGFyIGkgPSAxOyBpIDwgMTI4OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBuZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hhcj4oaSkp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVy
IG5ld05vZGUobmZhKTsKKyAgICAgICAgaWYgKCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZl
cnRlZCgpKSB7CisgICAgICAgICAgICBVQ2hhciBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCAxMjggJiYgIW1fYXRvbURhdGEuY2hh
cmFjdGVyU2V0LmdldChpKSkKKyAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAg
ICAgIGlmIChpID09IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBVQ2hhciBzdGFydCA9IGk7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAg
ICAgICAgIHdoaWxlIChpIDwgMTI4ICYmIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkK
KyAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFu
c2l0aW9uKHN0YXJ0LCBpIC0gMSwgbmV3Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBVQ2hhciBpID0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCAxMjggJiYgbV9hdG9tRGF0YS5jaGFyYWN0
ZXJTZXQuZ2V0KGkpKQorICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAg
aWYgKGkgPT0gMTI4KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIFVDaGFyIHN0YXJ0ID0gaTsKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKGkgPCAxMjggJiYgIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKKyAg
ICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0
aW9uKHN0YXJ0LCBpIC0gMSwgbmV3Tm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7CiAgICAgfQogICAg
IGNhc2UgVGVybVR5cGU6Okdyb3VwOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RUYXJnZXQgPSBz
b3VyY2U7Ci0gICAgICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IG1fYXRvbURhdGEuZ3JvdXAu
dGVybXMpCi0gICAgICAgICAgICBsYXN0VGFyZ2V0ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwg
bGFzdFRhcmdldCwgQWN0aW9uTGlzdCgpKTsKKyAgICAgICAgaWYgKG1fYXRvbURhdGEuZ3JvdXAu
dGVybXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogYW55IGtpbmQgb2YgZW1w
dHkgdGVybSBjb3VsZCBiZSBhdm9pZGVkIGluIHRoZSBwYXJzZXIuIFRoaXMgY2FzZSBzaG91bGQg
dHVybmVkIGludG8gYW4gYXNzZXJ0aW9uLgorICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgICAgIHNvdXJjZS5hZGRFcHNpbG9uVHJh
bnNpdGlvbihuZXdOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgICAgICB9
CisKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGxhc3RUYXJnZXQgPSBtX2F0
b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuZ2VuZXJhdGVHcmFwaChuZmEsIHNvdXJjZSwgQWN0
aW9uTGlzdCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fYXRvbURhdGEu
Z3JvdXAudGVybXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFRlcm0mIGN1cnJl
bnRUZXJtID0gbV9hdG9tRGF0YS5ncm91cC50ZXJtc1tpXTsKKyAgICAgICAgICAgIEltbXV0YWJs
ZUNoYXJORkFOb2RlQnVpbGRlciBuZXdOb2RlID0gY3VycmVudFRlcm0uZ2VuZXJhdGVHcmFwaChu
ZmEsIGxhc3RUYXJnZXQsIEFjdGlvbkxpc3QoKSk7CisgICAgICAgICAgICBsYXN0VGFyZ2V0ID0g
V1RGOjptb3ZlKG5ld05vZGUpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIGxhc3RUYXJn
ZXQ7CiAgICAgfQogICAgIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjA2OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA2LTI5ICBCZW5qYW1pbiBQb3VsYWlu
ICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIHRoZSBORkEgdHJhbnNpdGlv
bnMgcmFuZ2UtYmFzZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NjMzOAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMu
Y3BwOgorICAgICAgICBUZXN0IHNvbWUgbmV3IGludGVyZXN0aW5nIGNhc2VzLgorCiAyMDE1LTA2
LTI4ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW1hjb2RlXSBV
c2UgdGhlIHNhbWUgZW52aXJvbm1lbnQgZm9yIGNvbW1hbmQtbGluZSBhbmQgSURFIGJ1aWxkcwpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODYwNjkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDQsNiArMzA0LDM4IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUGF0dGVybk5l
c3QKICAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9mb2JhciIpLCB7IH0pOwogfQogCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRl
c3QsIEVtcHR5R3JvdXBzKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiXmh0dHA6Ly93ZWJraXRcXFxcLm9yZy9mb28oKWJhclwifX0sIgorICAgICAgICAie1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
Xmh0dHA6Ly93ZWJraXRcXFxcLm9yZy8oKG1lKSgpKHRvbykpXCJ9fV0iKTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb28i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vd2Via2l0Lm9yZy9iYXIiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9mb29iYXIiKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL21lIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvdG9vIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvbWV0b28iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb21lIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvZm9vbWViYXIiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9tZWZvbyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL21lZm9v
dG9vIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUXVhbnRpZmll
ZEVtcHR5R3JvdXBzKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
Xmh0dHA6Ly93ZWJraXRcXFxcLm9yZy9mb28oKStiYXJcIn19LCIKKyAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5o
dHRwOi8vd2Via2l0XFxcXC5vcmcvKCgpKigpPyh0YXJnZXQpKCkrKVwifX1dIik7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
Zm9vIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3dlYmtpdC5vcmcvYmFyIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9tZSIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnL3RvbyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3RhcmdldCIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvZm9vbWUiKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy9mb29tZWJhciIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL21lZm9vIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
bWVmb290b28iKSwgeyB9KTsKK30KKwogVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBNYXRj
aFBhc3RFbmRPZlN0cmluZykKIHsKICAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIi4rXCJ9fV0iKTsKQEAgLTM1OSw2ICszOTEsMTYgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBFbmRPZkxpbmVBcwogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhclkiKSwgeyB9KTsKIH0KIAorVEVTVF9G
KENvbnRlbnRFeHRlbnNpb25UZXN0LCBEb3REb2VzTm90SW5jbHVkZUVuZE9mTGluZSkKK3sKKyAg
ICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImh0dHBzOi8vd2Via2l0XFxcXC5v
cmcvLlwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwczovL3dlYmtpdC5vcmcvZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwczovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93ZWJraXQub3JnL0EiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd2Via2l0Lm9yZy96
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKK30KKwog
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBQcmVmaXhJbmZpeFN1ZmZpeEV4YWN0TWF0Y2gp
CiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJpbmZpeFwifX0sIgpA
QCAtMTM2OCw0ICsxNDEwLDUyNCBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNpbXBs
ZUZhbGxCCiAgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmJi
YjovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwogfQogCisvLyAqKiogV2UgaGF2ZSB0aGUgZm9s
bG93aW5nIHJhbmdlcyBpbnRlcnNlY3Rpb25zOiAqKioKKy8vIEZ1bGwgb3ZlcmxhcC4KKy8vIDEp
CisvLyBBOiB8LS0tLS18CisvLyBCOiAgfC0tLXwKKy8vIDIpCisvLyBBOiB8LS0tLS18CisvLyBC
OiAgICB8CisvLyAzKQorLy8gQTogIHwtLS18CisvLyBCOiB8LS0tLS18CisvLyA0KQorLy8gQTog
ICAgfAorLy8gQjogfC0tLS0tfAorLy8gT25lIGVkZ2UgaW4gY29tbW9uCisvLyA1KQorLy8gQTog
fC18CisvLyBCOiAgIHwtfAorLy8gNikKKy8vIEE6IHwKKy8vIEI6IHwtfAorLy8gNykKKy8vIEE6
IHwtfAorLy8gQjogICB8CisvLyA4KQorLy8gQTogICB8LXwKKy8vIEI6IHwtfAorLy8gOSkKKy8v
IEE6ICAgfAorLy8gQjogfC18CisvLyAxMCkKKy8vIEE6IHwtfAorLy8gQjogfAorLy8gQiBvdmVy
bGFwIG9uIHRoZSBsZWZ0IHNpZGUgb2YgQS4KKy8vIDExKQorLy8gQTogICB8LS0tfAorLy8gQjog
fC0tLXwKKy8vIDEyKQorLy8gQTogICB8LS0tfAorLy8gQjogfC0tLS0tfAorLy8gQSBvdmVybGFw
IG9uIHRoZSBsZWZ0IHNpZGUgb2YgQgorLy8gMTMpCisvLyBBOiB8LS0tfAorLy8gQjogICB8LS0t
fAorLy8gMTQpCisvLyBBOiB8LS0tLS18CisvLyBCOiAgIHwtLS18CisvLyBFcXVhbCByYW5nZXMK
Ky8vIDE1KQorLy8gQTogfC0tLXwKKy8vIEI6IHwtLS18CisvLyAxNikKKy8vIEE6IHwKKy8vIEI6
IHwKKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMSkKK3sK
KyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXlthLW1dXCJ9fSwi
CisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltjLWVdXCJ9fV0iKTsKKworICAgIHRl
c3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdCht
YXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9LCB0cnVlKTsKKyAgICB0ZXN0UmVxdWVz
dChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImY6Ly93d3cud2Via2l0Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgibTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJuOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtl
QmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIlthLW1dXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiW2MtZV1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jLnh4eC8iKSwgeyB9LCB0cnVlKTsK
KyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6
Ly93d3cuZC54eHgvIiksIHsgfSwgdHJ1ZSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIpLCB7IH0sIHRydWUpOwor
ICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejov
L3d3dy5mLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5tLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoInp6ejovL3d3dy5uLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMikKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9
IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXlthLW1dXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiXmJcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImI6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9LCB0cnVl
KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImM6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgibTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJuOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNl
YXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIlthLW1dXCJ9fSwiCisgICAgICAgICJ7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJpZ25vcmUtcHJldmlvdXMtcnVsZXNcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwibFwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2Vh
cmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmsueHh4LyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmwueHh4LyIp
LCB7IH0sIHRydWUpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5tLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5uLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENv
bnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMykKK3sKKyAgICBhdXRvIG1hdGNo
QmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltiLWRdXCJ9fSwiCisgICAgICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhp
ZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2EtbV1cIn19XSIpOworCisg
ICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJiOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAg
dGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJtOi8vd3d3Lndl
YmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlO
b25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJuOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJj
aEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltiLWRdXCJ9fSwiCisgICAgICAgICJ7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhp
ZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYS1tXVwifX1dIik7CisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmEueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5iLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5tLnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cubi54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVz
dCwgUmFuZ2VPdmVybGFwQ2FzZTQpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5sXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJj
c3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJeW2EtbV1cIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7Cisg
ICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJrOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJsOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJtOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJuOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcImxcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5
LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIlthLW1dXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qo
c2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmsueHh4LyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5sLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cubS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3Lm4ueHh4LyIpLCB7IH0pOworfQorCitURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlT3ZlcmxhcENhc2U1KQoreworICAgIGF1dG8g
bWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2EtZV1cIn19LCIKKyAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6
XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bZS1oXVwifX1dIik7
CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImE6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJpOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tl
bmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIlthLWVdXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbZS1oXVwifX1dIik7CisgICAgdGVzdFJl
cXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5mLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuaC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmkueHh4LyIp
LCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlT3ZlcmxhcENh
c2U2KQoreworICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeZVwi
fX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwi
LFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XltlLWhdXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiZjovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaDovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaTovL3d3
dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJh
Y2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJlXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJj
c3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJbZS1oXVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5kLnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmYueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5oLnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuaS54eHgvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVz
dCwgUmFuZ2VPdmVybGFwQ2FzZTcpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFj
a2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5bYS1lXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXmVcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImQ6Ly93d3cud2Via2l0Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZjovL3d3
dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJh
Y2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJbYS1lXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiZVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2Vh
cmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5mLnh4
eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJs
YXBDYXNlOCkKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XltlLWhdXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxh
eS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeW2EtZV1cIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImg6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwor
CisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbZS1oXVwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwi
c2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2Et
ZV1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZC54eHgvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUu
eHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5mLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5oLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5pLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlOSkKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1h
a2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiXmVcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIl5bYS1lXVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdCht
YXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9
KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImQ6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKwor
ICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiZVwifX0sIgorICAg
ICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0
b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2EtZV1cIn19
XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5hLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmUueHh4LyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5mLnh4
eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJs
YXBDYXNlMTApCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
Il5bZS1oXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3Bs
YXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiXmVcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImg6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0p
OworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbZS1oXVwi
fX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwi
LFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
ZVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuZS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlO
b25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmYueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgienp6Oi8vd3d3LmgueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgienp6Oi8vd3d3LmkueHh4LyIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIFJhbmdlT3ZlcmxhcENhc2UxMSkKK3sKKyAgICBhdXRvIG1hdGNoQmFja2Vu
ZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltlLWddXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2QtZl1cIn19XSIpOworCisgICAgdGVz
dFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtp
dC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJmOi8vd3d3LndlYmtpdC5vcmcv
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0
b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJnOi8vd3d3LndlYmtp
dC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImg6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VC
YWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiW2UtZ11cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIltkLWZdXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYy54eHgvIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgvIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmcueHh4LyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmgueHh4LyIpLCB7IH0pOwor
fQorCisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VPdmVybGFwQ2FzZTEyKQor
eworICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeW2UtZ11cIn19
LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixc
InNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5b
ZC1nXVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdCht
YXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9
KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImU6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImc6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImg6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIGF1dG8g
c2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2UtZ11cIn19LCIKKyAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6
XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltkLWddXCJ9fV0iKTsK
KyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6
Ly93d3cuYy54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmQueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvciwg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZi54eHgv
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0
b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3Lmcu
eHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5oLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5n
ZU92ZXJsYXBDYXNlMTMpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIl5bYi1kXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3Nz
LWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiXltjLWVdXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwor
ICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYjovL3d3
dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qo
bWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIlti
LWRdXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1u
b25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJbYy1lXVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iLnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jLnh4
eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxl
Y3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cu
ZC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25l
U2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cisg
ICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8v
d3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5oLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMTQpCit7CisgICAgYXV0byBtYXRjaEJh
Y2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5bYi1lXVwifX0sIgorICAgICAgICAie1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRk
ZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltjLWVdXCJ9fV0iKTsKKworICAg
IHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53
ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiYjovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
bWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJlOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Is
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJoOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIltiLWVdXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlz
cGxheS1ub25lXCIsXCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJbYy1lXVwifX1dIik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmEueHh4LyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iLnh4
eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5jLnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5v
bmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6
Ly93d3cuZC54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
enp6Oi8vd3d3LmUueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NE
aXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoInp6ejovL3d3dy5oLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBSYW5nZU92ZXJsYXBDYXNlMTUpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBt
YWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIl5bYy1mXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXltjLWZdXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1
ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYTovL3d3dy53ZWJraXQub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYjovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZDovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
LCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZjovL3d3dy53
ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5
Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZzov
L3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFr
ZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7
XCJ1cmwtZmlsdGVyXCI6XCJbYy1mXVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2VsZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiW2MtZl1cIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hLnh4eC8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
eno6Ly93d3cuYi54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmMueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kLnh4eC8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZS54eHgvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2Vh
cmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmYueHh4LyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5nLnh4eC8iKSwg
eyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSYW5nZU92ZXJsYXBDYXNl
MTYpCit7CisgICAgYXV0byBtYXRjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5jXCJ9
fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJjc3MtZGlzcGxheS1ub25lXCIs
XCJzZWxlY3RvclwiOlwiLmhpZGRlblwifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJe
Y1wifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRj
aEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImI6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9
KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImM6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImQ6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsK
KworICAgIGF1dG8gc2VhcmNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiY1wifX0sIgor
ICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2Vs
ZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiY1wifX1d
Iik7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
enp6Oi8vd3d3LmEueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iLnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYy54
eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmQueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5lLnh4eC8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBRdWFudGlmaWVkT25lT3JNb3JlUmFuZ2VzQ2FzZTExQW5kMTMpCit7
CisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0
eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJbYy1lXStbZy1p
XStZWVlcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImNzcy1kaXNwbGF5
LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIltiLWRdK1toLWpdK1lZWVwifX1dIik7CisKKyAgICAvLyBUaGUgaW50ZXJlc3Rpbmcg
cmFuZ2VzIG9ubHkgbWF0Y2ggYmV0d2VlbiAnYicgYW5kICdrJywgcGx1cyBhIGdhcCBpbiAnZicu
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmFheXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWJ5eXkueHh4LyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5hY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFkeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWV5
eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5hZnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFneXl5Lnh4
eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYWh5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5haXl5eS54eHgvIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgienp6Oi8vd3d3LmFqeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWt5eXkueHh4LyIpLCB7IH0p
OworCisgICAgLy8gJ2InIGlzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlY29uZCBydWxl
LgorICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5ieXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmF5eXkueHh4LyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5iYnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJjeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmR5
eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5iZXl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJmeXl5Lnh4
eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYmd5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iaHl5eS54eHgvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3Ig
fSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
enp6Oi8vd3d3LmJpeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmp5eXkueHh4LyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRl
c3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5i
a3l5eS54eHgvIiksIHsgfSk7CisKKyAgICAvLyAnYycgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBv
ZiB0aGUgZmlyc3QgcnVsZSwgYW5kIGl0IG92ZXJsYXBzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Yg
dGhlIHNlY29uZCBydWxlLgorICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5jeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVz
dChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2F5eXkueHh4
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoInp6ejovL3d3dy5jYnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2Vh
cmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNjeXl5Lnh4eC8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuY2R5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jZXl5eS54eHgvIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmNmeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2d5eXkueHh4LyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2Vh
cmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNoeXl5Lnh4eC8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvciwg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2l5eXku
eHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNl
bGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5janl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNreXl5Lnh4eC8iKSwgeyB9KTsKKworICAgIC8vICdk
JyBpcyBpbiB0aGUgZmlyc3QgcmFuZ2Ugb2YgYm90aCBydWxlLiBUaGlzIHNlcmllcyBjb3ZlciBv
dmVybGFwcyBiZXR3ZWVuIHRoZSB0d28gcnVsZXMuCisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRneXl5Lnh4eC8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGd5eXkueHh4
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmRkaHl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
enp6Oi8vd3d3LmRkaGh5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5kZWd5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRlaHl5eS54eHgvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGZneXl5Lnh4eC8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuZGZoeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGp5eXkueHh4LyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejov
L3d3dy5kZGp5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NE
aXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGpqeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKK30KKworVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBRdWFudGlmaWVkT25lT3JNb3JlUmFuZ2VzQ2FzZTEx
QW5kMTNJbkdyb3VwcykKK3sKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIihbYy1lXSkrKFtnLWldK1lZWSlcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntc
InR5cGVcIjpcImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIltiLWRdK1toLWpdK1lZWVwifX1dIik7CisKKyAg
ICAvLyBUaGUgaW50ZXJlc3RpbmcgcmFuZ2VzIG9ubHkgbWF0Y2ggYmV0d2VlbiAnYicgYW5kICdr
JywgcGx1cyBhIGdhcCBpbiAnZicuCisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFheXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWJ5
eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5hY3l5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFkeXl5Lnh4
eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYWV5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5hZnl5eS54eHgvIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgienp6Oi8vd3d3LmFneXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYWh5eXkueHh4LyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5haXl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmFqeXl5Lnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuYWt5eXkueHh4LyIpLCB7IH0pOworCisgICAgLy8gJ2InIGlzIHRoZSBmaXJzdCBjaGFyYWN0
ZXIgb2YgdGhlIHNlY29uZCBydWxlLgorICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5ieXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmF5
eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5iYnl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJjeXl5Lnh4
eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6eno6Ly93d3cuYmR5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5iZXl5eS54eHgvIiks
IHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgienp6Oi8vd3d3LmJmeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hC
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmd5eXkueHh4LyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6
ejovL3d3dy5iaHl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmJpeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvciB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuYmp5
eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoInp6ejovL3d3dy5ia3l5eS54eHgvIiksIHsgfSk7CisKKyAgICAvLyAnYycgaXMg
dGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgcnVsZSwgYW5kIGl0IG92ZXJsYXBzIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlY29uZCBydWxlLgorICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jeXl5Lnh4eC8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJ6eno6Ly93d3cuY2F5eXkueHh4LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5jYnl5eS54eHgvIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmNjeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2R5eXkueHh4LyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3
dy5jZXl5eS54eHgvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNmeXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuY2d5
eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6
Oi8vd3d3LmNoeXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NT
RGlzcGxheU5vbmVTZWxlY3RvciwgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJ6eno6Ly93d3cuY2l5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoInp6ejovL3d3dy5janl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IgfSk7CisgICAgdGVzdFJlcXVlc3Qo
c2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmNreXl5Lnh4eC8i
KSwgeyB9KTsKKworICAgIC8vICdkJyBpcyBpbiB0aGUgZmlyc3QgcmFuZ2Ugb2YgYm90aCBydWxl
LiBUaGlzIHNlcmllcyBjb3ZlciBvdmVybGFwcyBiZXR3ZWVuIHRoZSB0d28gcnVsZXMuCisgICAg
dGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3
LmRneXl5Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp6ejovL3d3dy5kZGd5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgienp6Oi8vd3d3LmRkaHl5eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpB
Y3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRkaGh5eXkueHh4LyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yLCBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJj
aEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZWd5eXkueHh4LyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgienp6Oi8vd3d3LmRlaHl5
eS54eHgvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6
Ly93d3cuZGZneXl5Lnh4eC8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93d3cuZGZoeXl5Lnh4eC8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6eno6Ly93
d3cuZGp5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpDU1NEaXNw
bGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGp5eXkueHh4LyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yIH0pOworICAgIHRlc3RSZXF1
ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoInp6ejovL3d3dy5kZGpqeXl5
Lnh4eC8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVT
ZWxlY3RvciB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>