<?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>162929</bug_id>
          
          <creation_ts>2016-10-04 12:15:30 -0700</creation_ts>
          <short_desc>[Bindings] Declare dictionary / enumeration template specializations in the header</short_desc>
          <delta_ts>2016-10-05 09:11:56 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>162912</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236316</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 12:15:30 -0700</bug_when>
    <thetext>Move convertDictionary&lt;&gt;() template specializations to the header in order to:
- Allow them to be used from custom bindings code.
- Prepare for moving dictionaries to their own IDL files (Bug 162912).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236351</commentid>
    <comment_count>1</comment_count>
      <attachid>290643</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 14:23:06 -0700</bug_when>
    <thetext>Created attachment 290643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236361</commentid>
    <comment_count>2</comment_count>
      <attachid>290645</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 14:37:42 -0700</bug_when>
    <thetext>Created attachment 290645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236402</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-04 15:37:38 -0700</bug_when>
    <thetext>Do the implementations really have to go in the header? Can&apos;t we just forward declare what we want to call?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236410</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 15:45:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do the implementations really have to go in the header? Can&apos;t we just
&gt; forward declare what we want to call?

Your comment only applies to jsStringWithCache() right? All other functions are templated so I believe they will need to be defined in the header if we want them to be callable from other compilation units.

I do think we can move the definition of jsStringWithCache() to the cpp though and only keep its declaration in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236411</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 15:47:05 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Do the implementations really have to go in the header? Can&apos;t we just
&gt; &gt; forward declare what we want to call?
&gt; 
&gt; Your comment only applies to jsStringWithCache() right? All other functions
&gt; are templated so I believe they will need to be defined in the header if we
&gt; want them to be callable from other compilation units.
&gt; 
&gt; I do think we can move the definition of jsStringWithCache() to the cpp
&gt; though and only keep its declaration in the header.

Although I don&apos;t know about the performance impact of doing so given that the function was likely being inlined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236439</commentid>
    <comment_count>6</comment_count>
      <attachid>290665</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 16:27:13 -0700</bug_when>
    <thetext>Created attachment 290665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236443</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 16:31:00 -0700</bug_when>
    <thetext>I have moved jsStringWithCache() implementation back to the cpp. I haven&apos;t tried instantiating the template functions in the header and moving the template specializations to the cpp yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236445</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 16:34:18 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I haven&apos;t
&gt; tried instantiating the template functions in the header and moving the
&gt; template specializations to the cpp yet.

The thing is that I worry it will lead to linking errors when actually calling the specialization from another compilation unit (which we do not do yet so I won&apos;t notice) or about getting weird compilation trouble on Windows.

When I have tried tricks like this in the past, it usually hasn&apos;t gone well :/

Do you mind if we try doing so in a follow-up, once we actually start sharing dictionaries (i.e. after Bug 161932 is fixed)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236529</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 20:54:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I haven&apos;t
&gt; &gt; tried instantiating the template functions in the header and moving the
&gt; &gt; template specializations to the cpp yet.
&gt; 
&gt; The thing is that I worry it will lead to linking errors when actually
&gt; calling the specialization from another compilation unit (which we do not do
&gt; yet so I won&apos;t notice) or about getting weird compilation trouble on Windows.
&gt; 
&gt; When I have tried tricks like this in the past, it usually hasn&apos;t gone well
&gt; :/
&gt; 
&gt; Do you mind if we try doing so in a follow-up, once we actually start
&gt; sharing dictionaries (i.e. after Bug 161932 is fixed)?

Oh, it looks like it is easier than I thought. I&apos;ll try and do it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236532</commentid>
    <comment_count>10</comment_count>
      <attachid>290688</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-04 22:04:13 -0700</bug_when>
    <thetext>Created attachment 290688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236652</commentid>
    <comment_count>11</comment_count>
      <attachid>290688</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-05 09:11:50 -0700</bug_when>
    <thetext>Comment on attachment 290688
Patch

Clearing flags on attachment: 290688

Committed r206812: &lt;http://trac.webkit.org/changeset/206812&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236653</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-05 09:11:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290643</attachid>
            <date>2016-10-04 14:23:06 -0700</date>
            <delta_ts>2016-10-04 14:37:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162929-20161004141956.patch</filename>
            <type>text/plain</type>
            <size>105564</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRlNWY4N2VhMDJhNzZh
YjRjMjY2NGM0OWZmZDg5MTZhYzA0NjEwZi4uNmU3NmQyMTJmOTdiZDI5NGUwNTU2MzRjMTRiN2Zh
NzExNmU4YjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDg3IEBACiAyMDE2LTEwLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBjb252ZXJ0RGljdGlv
bmFyeTw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIHRoZSBoZWFkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29udmVydERpY3Rp
b25hcnk8PigpIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyB0byB0aGUgaGVhZGVyIGluIG9yZGVy
IHRvOgorICAgICAgICAtIEFsbG93IHRoZW0gdG8gYmUgdXNlZCBmcm9tIGN1c3RvbSBiaW5kaW5n
cyBjb2RlLgorICAgICAgICAtIFByZXBhcmUgZm9yIG1vdmluZyBkaWN0aW9uYXJpZXMgdG8gdGhl
aXIgb3duIElETCBmaWxlcyAoQnVnIDE2MjkxMikuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWJhc2VsaW5lZCBiaW5kaW5ncyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZUludGVyZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVt
ZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0
aW9uQ29udGVudCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKGFkZFVuc2Nv
cGFibGVQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
alByb3RvdHlwZTo6SlNUZXN0T2JqUHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
Ymo6OkpTVGVzdE9iaik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNy
ZWF0ZVByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnBy
b3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmRlc3Ryb3kp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaDoKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nV2l0aENhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bVR5cGU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6T3B0aW9uYWw+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8QWx0ZXJuYXRlRW51bU5hbWU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUE+OjphcnJheUpTVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnZlcnQ8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFs
dWVUcmFpdHM8VGVzdE9iajo6RW51bUI+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2U8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVz
dE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVz
dE9iajo6RW51bUM+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVz
dE9iajo6RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bUM+
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2luZD46
OmFycmF5SlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZTxUZXN0T2JqOjpLaW5kPik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0PFRlc3RPYmo6OktpbmQ+KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpTaXplPjo6YXJyYXlKU1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlPFRlc3RPYmo6OlNpemU+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4pOgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaXplPik6CisgICAgICAgIChXZWJDb3JlOjpKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6Q29uZmlkZW5jZT4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydDxUZXN0T2JqOjpDb25maWRlbmNlPik6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkNvbmZpZGVuY2U+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlv
bmFyeT4pOgorCisyMDE2LTEwLTA0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
ICAgICAgICAgW1dlYiBJRExdIEFkZCBzdXBwb3J0IGZvciBkaWN0aW9uYXJ5IGluaGVyaXRhbmNl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5MDcK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDc2YThkZWQ4Y2E4MTdiMWE0MzY3MTNiMWE0ZTgzNDBiYzdlNTdlMDMuLjc5MjBhMzgy
ZjRjNWIxYTAyZTIyNjQwZDdkMjVlOWE5M2I3YTgyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NzIsNyArMjc3Miw3IEBA
CiAJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOTNGMzRD
MUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlEQkZFRDFBOUM0OUIx
MDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5REJGRUIxQTlDNDlCMTAwMEQ2QjI1IC8q
IEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJN0M5REJGRUUxQTlDNDlCMTAw
MEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEQkZFQzFBOUM0OUIxMDAwRDZCMjUgLyogSlNI
VE1MQXR0YWNobWVudEVsZW1lbnQuaCAqLzsgfTsKLQkJN0NDMTZGRkIxRDc3Mzc1MzAwQ0UwODc3
IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURMVHlwZXMuaCAqLzsgfTsKKwkJN0ND
MTZGRkIxRDc3Mzc1MzAwQ0UwODc3IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURM
VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3Q0MyODlERjFBQTBGRTVEMDA5QTlDRTMgLyogVVJMUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERUUzOTM4MTc5NzQyNzQwMDFENzU4
MCAvKiBVUkxSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJE
ZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yLmggKi87
IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rv
ckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29h
LmNwcCAqLzsgfTsKQEAgLTMwOTksNyArMzA5OSw3IEBACiAJCTkzMDcwNUVCMDlFMEM5RjYwMEIx
N0ZFNCAvKiBKU0NTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVFQTA5RTBDOUY2MDBCMTdGRTQgLyogSlNDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwogCQk5MzA3RjFENzBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVz
dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzA3RjFENTBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJ
CTkzMDdGMUQ4MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3RjFENjBBRjJENTkwMDBEQkEz
MUEgLyogSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTkzMDg0MTM0MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDg0MTMz
MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLzsgfTsKKwkJOTMwODQxMzQxQ0RE
QjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwODQxMzMxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29u
dmVydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMDkwODkxMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwOTA4OTAwQUY3RURFNDAwODFE
RjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTMwQzkwREQxOUNGOTY1MzAwRDZDMjFBIC8qIElubGluZUl0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAgKi87IH07CiAJCTkz
MTUzQkRBMTQxODFGN0EwMEZDRjVCRSAvKiBtaXNzaW5nSW1hZ2VAMngucG5nIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE1M0JEOTE0MTgxRjdBMDBG
Q0Y1QkUgLyogbWlzc2luZ0ltYWdlQDJ4LnBuZyAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvSURMVHlwZXMuaAppbmRleCAzNzNmOTNkNjVlZTRhNTk1NzRkYjQ3YzI2YzY5
ZWM3MmM0YTdkY2I3Li44ODdjMWU2NzRlNWVlNGI2NWRhOTFhMjMxMzlkMDIxOWI3ZDA4ZGVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzOTVjN2E4YzNjMmVkMzhhMzBiOGI4ZmEyN2U5
MDM1MzIzOGJlNDUwLi5iYjg1M2VkZDQ5MzVlOTM3MWY4MjUzNmE2ZmE3MDI1MGUzZGQxYmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTI4LDExICsxMjgsMTEgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgQWRk
U3RyaW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIAogICAgIGlmICgkaW50
ZXJmYWNlLT5pc0NhbGxiYWNrKSB7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tI
ZWFkZXIoJGludGVyZmFjZSk7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBs
ZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAg
ICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlcigkaW50ZXJmYWNlLCAkZW51bWVy
YXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRvYmpl
Y3QtPkdlbmVyYXRlSGVhZGVyKCRpbnRlcmZhY2UpOwotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0
ZUltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMp
OworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlLCAkZW51bWVyYXRp
b25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRh
dGlvbigkaW50ZXJmYWNlKTsKICAgICB9CiB9CiAKQEAgLTgxMyw3ICs4MTMsNyBAQCBzdWIgR2Vu
ZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogCiAgICAgbXkgJHJlc3VsdCA9
ICIiOwogCi0gICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4g
cGFyc2UoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7XG4iOworICAgICRyZXN1bHQgLj0gInRlbXBsYXRl
PHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTtcbiI7CiAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpO1xuXG4iOwogCiAgICAgZm9yZWFjaCBteSAk
ZW51bWVyYXRpb24gKEAkZW51bWVyYXRpb25zKSB7CkBAIC04MjIsMTcgKzgyMiwxNyBAQCBzdWIg
R2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICBteSAkY2xh
c3NOYW1lID0gR2V0RW51bWVyYXRpb25DbGFzc05hbWUoJGludGVyZmFjZSwgJG5hbWUpOwogCiAg
ICAgICAgICMgRklYTUU6IEEgbGl0dGxlIHVnbHkgdG8gaGF2ZSB0aGlzIGJlIGEgc2lkZSBlZmZl
Y3QgaW5zdGVhZCBvZiBhIHJldHVybiB2YWx1ZS4KLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxydW50aW1lL0pTU3RyaW5nLmg+Iik7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRp
bWUvSlNTdHJpbmcuaD4ifSA9IDE7CiAKICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0g
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGVudW1lcmF0aW9uKTsK
ICAgICAgICAgJHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwogCiAgICAgICAgICMgRGVjbGFyZSB0aGlzIGluc3RlYWQgb2YgdXNp
bmcgInN0YXRpYyIgYmVjYXVzZSBpdCBtYXkgYmUgdW51c2VkIGFuZCB3ZSBkb24ndCB3YW50IHdh
cm5pbmdzIGFib3V0IHRoYXQuCi0gICAgICAgICRyZXN1bHQgLj0gIkpTU3RyaW5nKiBqc1N0cmlu
Z1dpdGhDYWNoZShFeGVjU3RhdGUqLCAkY2xhc3NOYW1lKTtcblxuIjsKKyAgICAgICAgJHJlc3Vs
dCAuPSAiSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCAk
Y2xhc3NOYW1lKTtcblxuIjsKIAogICAgICAgICAjIFRha2UgYW4gRXhlY1N0YXRlKiBpbnN0ZWFk
IG9mIGFuIEV4ZWNTdGF0ZSYgdG8gbWF0Y2ggdGhlIGpzU3RyaW5nV2l0aENhY2hlIGZyb20gSlNT
dHJpbmcuaC4KICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGluc3RlYWQgb2Yg
RXhlY1N0YXRlKi4KLSAgICAgICAgJHJlc3VsdCAuPSAiSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1ZSlcbiI7Cisg
ICAgICAgICRyZXN1bHQgLj0gImlubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1ZSlcbiI7
CiAgICAgICAgICRyZXN1bHQgLj0gIntcbiI7CiAgICAgICAgICMgRklYTUU6IE1pZ2h0IGJlIG5p
Y2UgdG8gbWFrZSB0aGlzIGdsb2JhbCBiZSAiY29uc3QiLCBidXQgTmV2ZXJEZXN0cm95ZWQgZG9l
cyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhhdC4KICAgICAgICAgIyBGSVhNRTogTWlnaHQgYmUg
bmljZSB0byBtYWtlIHRoZSBlbnRpcmUgYXJyYXkgYmUgTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCBv
ZiBlYWNoIHZhbHVlLCBidXQgbm90IHN1cmUgd2hhdCB0aGUgc3ludGF4IGZvciB0aGF0IGlzLgpA
QCAtODU2LDEzICs4NTYsMTMgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlv
bkNvbnRlbnQKICAgICAgICAgJHJlc3VsdCAuPSAifVxuXG4iOwogCiAgICAgICAgICRyZXN1bHQg
Lj0gInRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8JGNsYXNzTmFtZT4ge1xuIjsKLSAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGNsYXNzTmFtZSB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfVxuIjsKKyAgICAgICAgJHJlc3Vs
dCAuPSAiICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosICRjbGFzc05hbWUgdmFsdWUpIHsgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH1cbiI7CiAgICAgICAgICRyZXN1bHQg
Lj0gIn07XG5cbiI7CiAKICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGluc3Rl
YWQgb2YgRXhlY1N0YXRlJi4KICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgdG9TdHJp
bmdPck51bGwgdG8gbWFrZSBleGNlcHRpb24gY2hlY2tpbmcgZmFzdGVyLgogICAgICAgICAjIEZJ
WE1FOiBDb25zaWRlciBmaW5kaW5nIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIG1hdGNoIGFnYWlu
c3QgYWxsIHRoZSBzdHJpbmdzIHF1aWNrbHkuCi0gICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRl
PD4gT3B0aW9uYWw8JGNsYXNzTmFtZT4gcGFyc2U8JGNsYXNzTmFtZT4oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSlcbiI7CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gaW5s
aW5lIE9wdGlvbmFsPCRjbGFzc05hbWU+IHBhcnNlPCRjbGFzc05hbWU+KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xu
IjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpO1xuIjsKICAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JGVudW1l
cmF0aW9uLT52YWx1ZXN9KSB7CkBAIC04NzgsMTEgKzg3OCwxMSBAQCBzdWIgR2VuZXJhdGVFbnVt
ZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7
CiAKICAgICAgICAgIyBGSVhNRTogQSBsaXR0bGUgdWdseSB0byBoYXZlIHRoaXMgYmUgYSBzaWRl
IGVmZmVjdCBpbnN0ZWFkIG9mIGEgcmV0dXJuIHZhbHVlLgotICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01Db252ZXJ0LmgiKTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUNv
bnZlcnQuaCJ9ID0gMTsKIAotICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICRjbGFzc05h
bWUgY29udmVydDwkY2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxu
IjsKKyAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiAkY2xhc3NOYW1lIGNvbnZlcnQ8JGNs
YXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpXG4iOwog
ICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICIgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAg
YXV0byByZXN1bHQgPSBwYXJzZTwkY2xhc3NOYW1lPihzdGF0ZSwgdmFsdWUpO1xuIjsKICAgICAg
ICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkge1xuIjsKQEAgLTk2Mywx
NCArOTYzLDE1IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQK
ICAgICAgICAgJHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwogCiAgICAgICAgIG15ICRjbGFzc05hbWUgPSBHZXREaWN0aW9uYXJ5
Q2xhc3NOYW1lKCRpbnRlcmZhY2UsICRuYW1lKTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyRp
bnRlcmZhY2UtPm5hbWUgLiAiLmgifSA9IDE7CiAKICAgICAgICAgIyBGSVhNRTogQSBsaXR0bGUg
dWdseSB0byBoYXZlIHRoaXMgYmUgYSBzaWRlIGVmZmVjdCBpbnN0ZWFkIG9mIGEgcmV0dXJuIHZh
bHVlLgotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0LmgiKTsKKyAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUNvbnZlcnQuaCJ9ID0gMTsKIAogICAgICAgICAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWRpY3Rpb25hcnkKLSAgICAgICAgJHJl
c3VsdCAuPSAidGVtcGxhdGU8PiBPcHRpb25hbDwkY2xhc3NOYW1lPiBjb252ZXJ0RGljdGlvbmFy
eTwkY2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxuIjsKKyAgICAg
ICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8JGNsYXNzTmFtZT4gY29u
dmVydERpY3Rpb25hcnk8JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOwotICAgICAgICAkcmVz
dWx0IC49ICIgICAgVk0mIHZtID0gc3RhdGUudm0oKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0g
IiAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iOwogICAgICAg
ICAkcmVzdWx0IC49ICIgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byogb2JqZWN0ID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7XG4iOwpAQCAt
OTgyLDcgKzk4Myw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRl
bnQKIAogICAgICAgICAjIDIuIElmIFYgaXMgYSBuYXRpdmUgUmVnRXhwIG9iamVjdCwgdGhlbiB0
aHJvdyBhIFR5cGVFcnJvci4KICAgICAgICAgIyBGSVhNRTogVGhpcyBSZWdFeHAgc3BlY2lhbCBo
YW5kbGluZyBpcyBsaWtlbHkgdG8gZ28gYXdheSBpbiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAgICAg
ICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBlKCkg
PT0gUmVnRXhwT2JqZWN0VHlwZSkpIHtcbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAo
VU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IEpTQzo6UmVnRXhwT2JqZWN0VHlw
ZSkpIHtcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTtcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmV0dXJu
IE51bGxvcHQ7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgfVxuIjsKQEAgLTEwMTQsNyAr
MTAxNSw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAg
ICAgICAgICAgICAgICBteSAka2V5ID0gJG1lbWJlci0+bmFtZTsKIAogICAgICAgICAgICAgICAg
ICMgNS4yLiBMZXQgdmFsdWUgYmUgYW4gRUNNQVNjcmlwdCB2YWx1ZSwgZGVwZW5kaW5nIG9uIFR5
cGUoVik6Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIEpTVmFsdWUgJHtrZXl9VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBcIiR7a2V5fVwiKSk7XG4iOworICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBKU0M6OkpTVmFsdWUgJHtrZXl9VmFsdWUgPSBp
c051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIke2tleX1cIikpO1xuIjsK
IAogICAgICAgICAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZUZyb21TaWdu
YXR1cmUoJGludGVyZmFjZSwgJG1lbWJlcik7CiAgICAgICAgICAgICAgICAgaWYgKCRtZW1iZXIt
PmlzT3B0aW9uYWwgJiYgIWRlZmluZWQgJG1lbWJlci0+ZGVmYXVsdCkgewpAQCAtMTAyNyw3ICsx
MDI4LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAogICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAoISR7a2V5fVZhbHVlLmlzVW5kZWZpbmVk
KCkpIHtcbiI7CiAgICAgICAgICAgICAgICAgIyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIHdh
bnQgdGhpcyB0byBzaGFyZSBhIGxvdCBtb3JlIGNvZGUgd2l0aCBKU1ZhbHVlVG9OYXRpdmUuCiAg
ICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkg
ewotICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMke3R5cGV9LmgiKTsK
KyAgICAgICAgICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKUyR7dHlwZX0uaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICAgICAgZGllICJEaWN0aW9uYXJ5IG1lbWJlcnMgb2Ygbm9uLW51bGxh
YmxlIHdyYXBwZXIgdHlwZXMgbXVzdCBiZSBtYXJrZWQgYXMgcmVxdWlyZWQiIGlmICEkbWVtYmVy
LT5pc051bGxhYmxlICYmICRtZW1iZXItPmlzT3B0aW9uYWw7CiAgICAgICAgICAgICAgICAgICAg
IG15ICRudWxsYWJsZVBhcmFtZXRlciA9ICRtZW1iZXItPmlzTnVsbGFibGUgPyAiSXNOdWxsYWJs
ZTo6WWVzIiA6ICJJc051bGxhYmxlOjpObyI7CiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQg
Lj0gIiAgICAgICAgJGtleSA9IGNvbnZlcnRXcmFwcGVyVHlwZTwkdHlwZSwgSlMke3R5cGV9Pihz
dGF0ZSwgJHtrZXl9VmFsdWUsICRudWxsYWJsZVBhcmFtZXRlcik7XG4iOwpAQCAtMTA3OSw3ICsx
MDgwLDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudAogCiBz
dWIgR2VuZXJhdGVIZWFkZXIKIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSkgPSBAXzsK
KyAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmll
cykgPSBAXzsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKICAg
ICBteSAkY2xhc3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOwpAQCAtMTU3MSw2ICsxNTcyLDkg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9O1xu
Iik7CiAgICAgfQogCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVFbnVtZXJhdGlv
bkltcGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKSk7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250
ZW50KCRpbnRlcmZhY2UsICRkaWN0aW9uYXJpZXMpKTsKKwogICAgIG15ICRjb25kaXRpb25hbFN0
cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZh
Y2UpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVc
biIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFs
U3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwpAQCAtMjI1Nyw3ICsyMjYxLDcgQEAg
c3ViIGFkZFVuc2NvcGFibGVQcm9wZXJ0aWVzCiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9u
YXJpZXMpID0gQF87CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0gQF87CiAKICAgICBt
eSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9
ICJKUyRpbnRlcmZhY2VOYW1lIjsKQEAgLTIyODksOSArMjI5Myw2IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5nIG5hbWVzcGFjZSBK
U0M7XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUge1xu
XG4iKTsKIAotICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVt
ZW50YXRpb25Db250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50KCRpbnRl
cmZhY2UsICRkaWN0aW9uYXJpZXMpKTsKLQogICAgIG15IEBmdW5jdGlvbnMgPSBAeyRpbnRlcmZh
Y2UtPmZ1bmN0aW9uc307CiAgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJh
YmxlLT5mdW5jdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFj
ZSk7CiAgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+ZnVu
Y3Rpb25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwpAQCAtNDEyNiw3ICs0MTI3LDcg
QEAgc3ViIEdlbmVyYXRlUmV0dXJuUGFyYW1ldGVycwogCiBzdWIgR2VuZXJhdGVDYWxsYmFja0hl
YWRlcgogewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOworICAgIG15ICgkb2Jq
ZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKSA9IEBfOwogCiAg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwogICAgIG15ICRjbGFzc05h
bWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CkBAIC00MTg1LDYgKzQxODYsOSBAQCBzdWIgR2VuZXJh
dGVDYWxsYmFja0hlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGludGVyZmFjZU5hbWUm
KTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCAkaW50ZXJmYWNlTmFtZSogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfVxuXG4iKTsKIAorICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQoJGlu
dGVyZmFjZSwgJGVudW1lcmF0aW9ucykpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVy
YXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZGljdGlvbmFy
aWVzKSk7CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZVxuIik7CiAKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKQEAgLTQxOTMsNyArNDE5Nyw3IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAKIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVt
ZW50YXRpb24KIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucykg
PSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSkgPSBAXzsKIAogICAgIG15ICRpbnRl
cmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5h
bWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7
CkBAIC00MjEwLDggKzQyMTQsNiBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9u
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbnVzaW5nIG5hbWVzcGFjZSBKU0M7XG5cbiIpOwog
ICAgIHB1c2goQGltcGxDb250ZW50LCAibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKTsKIAotICAg
IHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250
ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKLQogICAgICMgQ29uc3RydWN0b3IKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JHtjbGFzc05hbWV9KEpTT2JqZWN0
KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOwogICAgIGlm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDYWxsYmFja05lZWRzT3BlcmF0b3JF
cXVhbH0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNDg2ZmU1MjA5MzdjMmUwNDEzOGZmMTVlMWFlZmU5Y2E1
ZTRkNzBlMS4uMDg2ZWM4ZGIwN2NjYjY5MzMyYWZjZjM1N2M4ODkzMDI5ZDUzYzQ2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgpAQCAtNDQsNyArNDMs
NiBAQAogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIkpTRmV0Y2hSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5j
bHVkZSAiSlNTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKICNpbmNsdWRl
ICJKU1Rlc3RDYWxsYmFjay5oIgpAQCAtNjcsNyArNjUsNiBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtOTIsODMzICs4
OSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4gcGFyc2UoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzKCk7Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2Jq
OjpFbnVtVHlwZSk7Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0
YXRlLCBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewotICAgICAgICBlbXB0eVN0
cmluZygpLAotICAgICAgICBBU0NJSUxpdGVyYWwoImVudW1WYWx1ZTEiKSwKLSAgICAgICAgQVND
SUlMaXRlcmFsKCJFbnVtVmFsdWUyIiksCi0gICAgICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVl
MyIpLAotICAgIH07Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RP
Ymo6OkVudW1UeXBlOjpFbXB0eVN0cmluZykgPT0gMCwgIlRlc3RPYmo6OkVudW1UeXBlOjpFbXB0
eVN0cmluZyBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMSkgPT0gMSwgIlRlc3RP
Ymo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7Ci0gICAgc3Rh
dGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFs
dWUyKSA9PSAyLCAiVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTIgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6
RW51bVR5cGU6OkVudW1WYWx1ZTMpID09IDMsICJUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVl
MyBpcyBub3QgMyBhcyBleHBlY3RlZCIpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVu
dW1lcmF0aW9uVmFsdWUpXSk7Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8
VGVzdE9iajo6RW51bVR5cGU+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1UeXBlIHZh
bHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10
ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBwYXJzZTxUZXN0T2JqOjpFbnVt
VHlwZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RyaW5nVmFsdWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3RyaW5n
OwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiZW51bVZhbHVlMSIpCi0gICAgICAgIHJldHVybiBU
ZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMTsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVu
dW1WYWx1ZTIiKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTI7
Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUzIikKLSAgICAgICAgcmV0dXJuIFRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUzOwotICAgIHJldHVybiBOdWxsb3B0OwotfQotCi10
ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1UeXBlIGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgdmFsdWUpOwotICAg
IGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0LnZhbHVlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkKLXsKLSAgICByZXR1cm4gIlwi
XCIsIFwiZW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiwgXCJFbnVtVmFsdWUzXCIiOwotfQot
Ci1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6T3B0aW9u
YWwpOwotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVz
dE9iajo6T3B0aW9uYWwgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAgZW1wdHlTdHJpbmcoKSwK
LSAgICAgICAgQVNDSUlMaXRlcmFsKCJPcHRpb25hbFZhbHVlMSIpLAotICAgICAgICBBU0NJSUxp
dGVyYWwoIk9wdGlvbmFsVmFsdWUyIiksCi0gICAgICAgIEFTQ0lJTGl0ZXJhbCgiT3B0aW9uYWxW
YWx1ZTMiKSwKLSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihU
ZXN0T2JqOjpPcHRpb25hbDo6RW1wdHlTdHJpbmcpID09IDAsICJUZXN0T2JqOjpPcHRpb25hbDo6
RW1wdHlTdHJpbmcgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUxKSA9PSAx
LCAiVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUxIGlzIG5vdCAxIGFzIGV4cGVjdGVk
Iik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6Ok9wdGlv
bmFsOjpPcHRpb25hbFZhbHVlMikgPT0gMiwgIlRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZh
bHVlMiBpcyBub3QgMiBhcyBleHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTMpID09IDMsICJUZXN0
T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTMgaXMgbm90IDMgYXMgZXhwZWN0ZWQiKTsKLSAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJB
WV9MRU5HVEgodmFsdWVzKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2
YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwotfQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6Ok9wdGlvbmFsPiB7Ci0gICAgc3Rh
dGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0T2JqOjpPcHRpb25hbCB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpP
cHRpb25hbD4gcGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFRl
c3RPYmo6Ok9wdGlvbmFsOjpFbXB0eVN0cmluZzsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIk9w
dGlvbmFsVmFsdWUxIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25h
bFZhbHVlMTsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIk9wdGlvbmFsVmFsdWUyIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMjsKLSAgICBpZiAoc3Ry
aW5nVmFsdWUgPT0gIk9wdGlvbmFsVmFsdWUzIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6Ok9w
dGlvbmFsOjpPcHRpb25hbFZhbHVlMzsKLSAgICByZXR1cm4gTnVsbG9wdDsKLX0KLQotdGVtcGxh
dGU8PiBUZXN0T2JqOjpPcHRpb25hbCBjb252ZXJ0PFRlc3RPYmo6Ok9wdGlvbmFsPihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byBy
ZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAo
VU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC52
YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpCi17Ci0gICAgcmV0dXJuICJcIlwiLCBc
Ik9wdGlvbmFsVmFsdWUxXCIsIFwiT3B0aW9uYWxWYWx1ZTJcIiwgXCJPcHRpb25hbFZhbHVlM1wi
IjsKLX0KLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIEFsdGVybmF0
ZUVudW1OYW1lKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEFsdGVybmF0ZUVudW1OYW1lIGVudW1lcmF0aW9uVmFsdWUpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Ci0gICAgICAgIEFTQ0lJTGl0
ZXJhbCgiZW51bVZhbHVlMSIpLAotICAgICAgICBBU0NJSUxpdGVyYWwoIkVudW1WYWx1ZTIiKSwK
LSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihBbHRlcm5hdGVF
bnVtTmFtZTo6RW51bVZhbHVlMSkgPT0gMCwgIkFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUx
IGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxz
aXplX3Q+KEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUyKSA9PSAxLCAiQWx0ZXJuYXRlRW51
bU5hbWU6OkVudW1WYWx1ZTIgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKLSAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFs
dWVzKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwotfQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU1ZhbHVlVHJhaXRzPEFsdGVybmF0ZUVudW1OYW1lPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5n
KiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBBbHRl
cm5hdGVFbnVtTmFtZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZh
bHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVFbnVtTmFtZT4gcGFy
c2U8QWx0ZXJuYXRlRW51bU5hbWU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
aWYgKHN0cmluZ1ZhbHVlID09ICJlbnVtVmFsdWUxIikKLSAgICAgICAgcmV0dXJuIEFsdGVybmF0
ZUVudW1OYW1lOjpFbnVtVmFsdWUxOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVl
MiIpCi0gICAgICAgIHJldHVybiBBbHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVlMjsKLSAgICBy
ZXR1cm4gTnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PiBBbHRlcm5hdGVFbnVtTmFtZSBjb252ZXJ0
PEFsdGVybmF0ZUVudW1OYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFt
ZT4oc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGlu
ZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPEFsdGVybmF0ZUVudW1OYW1l
PigpCi17Ci0gICAgcmV0dXJuICJcImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIiOwotfQot
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShF
eGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQSk7Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQSBlbnVtZXJhdGlvblZhbHVlKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewotICAg
ICAgICBBU0NJSUxpdGVyYWwoIkEiKSwKLSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtQTo6QSkgPT0gMCwgIlRlc3RPYmo6OkVudW1BOjpB
IGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4o
ZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcykpOwotICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51
bWVyYXRpb25WYWx1ZSldKTsKLX0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxU
ZXN0T2JqOjpFbnVtQT4gewotICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6RW51bUEgdmFsdWUpIHsg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUE+IHBhcnNlPFRlc3RPYmo6OkVudW1BPihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiQSIpCi0gICAg
ICAgIHJldHVybiBUZXN0T2JqOjpFbnVtQTo6QTsKLSAgICByZXR1cm4gTnVsbG9wdDsKLX0KLQot
dGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtQSBjb252ZXJ0PFRlc3RPYmo6OkVudW1BPihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byBy
ZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtQT4oc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC52YWx1
ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1BPigpCi17Ci0gICAgcmV0dXJuICJcIkFcIiI7Ci19Ci0K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQot
Ci1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUIp
OwotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9i
ajo6RW51bUIgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJCIiksCi0g
ICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6RW51
bUI6OkIpID09IDAsICJUZXN0T2JqOjpFbnVtQjo6QiBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwot
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FS
UkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7Ci19Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUI+IHsKLSAgICBzdGF0
aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RPYmo6OkVudW1CIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1C
PiBwYXJzZTxUZXN0T2JqOjpFbnVtQj4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICBpZiAoc3RyaW5nVmFsdWUgPT0gIkIiKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bUI6
OkI7Ci0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6RW51bUIg
Y29udmVydDxUZXN0T2JqOjpFbnVtQj4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6RW51
bUI+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxp
bmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQj4o
KQotewotICAgIHJldHVybiAiXCJCXCIiOwotfQotCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1DKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0
aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OkVudW1DIGVudW1lcmF0aW9uVmFsdWUp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7
Ci0gICAgICAgIEFTQ0lJTGl0ZXJhbCgiQyIpLAotICAgIH07Ci0gICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OkVudW1DOjpDKSA9PSAwLCAiVGVzdE9iajo6RW51
bUM6OkMgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihlbnVtZXJhdGlvblZhbHVlKV0pOwotfQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJh
aXRzPFRlc3RPYmo6OkVudW1DPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQyB2YWx1
ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVt
cGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQz4gcGFyc2U8VGVzdE9iajo6RW51bUM+KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJDIikK
LSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1DOjpDOwotICAgIHJldHVybiBOdWxsb3B0Owot
fQotCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1DIGNvbnZlcnQ8VGVzdE9iajo6RW51bUM+KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1DPihzdGF0ZSwgdmFsdWUpOwotICAgIGlm
IChVTkxJS0VMWSghcmVzdWx0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRo
cm93U2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
LnZhbHVlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCkKLXsKLSAgICByZXR1cm4gIlwiQ1wiIjsK
LX0KLQotI2VuZGlmCi0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBU
ZXN0T2JqOjpLaW5kKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSog
c3RhdGUsIFRlc3RPYmo6OktpbmQgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAgQVNDSUlMaXRl
cmFsKCJxdWljayIpLAotICAgICAgICBBU0NJSUxpdGVyYWwoImRlYWQiKSwKLSAgICB9OwotICAg
IHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpLaW5kOjpRdWljaykg
PT0gMCwgIlRlc3RPYmo6OktpbmQ6OlF1aWNrIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Ci0gICAg
c3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OktpbmQ6OkRlYWQpID09
IDEsICJUZXN0T2JqOjpLaW5kOjpEZWFkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7Ci0gICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKHZhbHVlcykpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVz
W3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0KLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpLaW5kPiB7Ci0gICAgc3RhdGljIEpTU3Ry
aW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFs
dWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OktpbmQ+IHBhcnNlPFRl
c3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmlu
Z1ZhbHVlID09ICJxdWljayIpCi0gICAgICAgIHJldHVybiBUZXN0T2JqOjpLaW5kOjpRdWljazsK
LSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImRlYWQiKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6
S2luZDo6RGVhZDsKLSAgICByZXR1cm4gTnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2Jq
OjpLaW5kIGNvbnZlcnQ8VGVzdE9iajo6S2luZD4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9i
ajo6S2luZD4oc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+
IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6Oktp
bmQ+KCkKLXsKLSAgICByZXR1cm4gIlwicXVpY2tcIiwgXCJkZWFkXCIiOwotfQotCi1KU1N0cmlu
ZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6U2l6ZSk7Ci0KLUpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpTaXplIGVu
dW1lcmF0aW9uVmFsdWUpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdmFsdWVzW10gPSB7Ci0gICAgICAgIEFTQ0lJTGl0ZXJhbCgic21hbGwiKSwKLSAgICAgICAg
QVNDSUlMaXRlcmFsKCJtdWNoLW11Y2gtbGFyZ2VyIiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6U2l6ZTo6U21hbGwpID09IDAsICJUZXN0
T2JqOjpTaXplOjpTbWFsbCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpTaXplOjpNdWNoTXVjaExhcmdlcikgPT0g
MSwgIlRlc3RPYmo6OlNpemU6Ok11Y2hNdWNoTGFyZ2VyIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7
Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcykpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0KLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpTaXplPiB7Ci0gICAgc3Rh
dGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0T2JqOjpTaXplIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlNpemU+
IHBhcnNlPFRlc3RPYmo6OlNpemU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
aWYgKHN0cmluZ1ZhbHVlID09ICJzbWFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0T2JqOjpTaXpl
OjpTbWFsbDsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIm11Y2gtbXVjaC1sYXJnZXIiKQotICAg
ICAgICByZXR1cm4gVGVzdE9iajo6U2l6ZTo6TXVjaE11Y2hMYXJnZXI7Ci0gICAgcmV0dXJuIE51
bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6U2l6ZSBjb252ZXJ0PFRlc3RPYmo6OlNp
emU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OlNpemU+KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaXplPigpCi17Ci0gICAgcmV0dXJuICJcInNt
YWxsXCIsIFwibXVjaC1tdWNoLWxhcmdlclwiIjsKLX0KLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0
aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6OkNvbmZpZGVuY2UpOwotCi1KU1N0cmluZyoganNT
dHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6Q29uZmlkZW5jZSBlbnVt
ZXJhdGlvblZhbHVlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IHZhbHVlc1tdID0gewotICAgICAgICBBU0NJSUxpdGVyYWwoImhpZ2giKSwKLSAgICAgICAgQVND
SUlMaXRlcmFsKCJraW5kYS1sb3ciKSwKLSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpDb25maWRlbmNlOjpIaWdoKSA9PSAwLCAiVGVzdE9iajo6
Q29uZmlkZW5jZTo6SGlnaCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpDb25maWRlbmNlOjpLaW5kYUxvdykgPT0g
MSwgIlRlc3RPYmo6OkNvbmZpZGVuY2U6OktpbmRhTG93IGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7
Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcykpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0KLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpDb25maWRlbmNlPiB7Ci0g
ICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0T2JqOjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRl
c3RPYmo6OkNvbmZpZGVuY2U+IHBhcnNlPFRlc3RPYmo6OkNvbmZpZGVuY2U+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJoaWdoIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RPYmo6OkNvbmZpZGVuY2U6OkhpZ2g7Ci0gICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJraW5kYS1sb3ciKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6Q29uZmlkZW5jZTo6S2lu
ZGFMb3c7Ci0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6Q29u
ZmlkZW5jZSBjb252ZXJ0PFRlc3RPYmo6OkNvbmZpZGVuY2U+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
PFRlc3RPYmo6OkNvbmZpZGVuY2U+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0K
LQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czxUZXN0T2JqOjpDb25maWRlbmNlPigpCi17Ci0gICAgcmV0dXJuICJcImhpZ2hcIiwgXCJraW5k
YS1sb3dcIiI7Ci19Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4g
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGJvb2wgaXNOdWxsT3JVbmRl
ZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwotICAgIGF1dG8qIG9iamVjdCA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwotICAgIGlmIChV
TkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0g
ICAgfQotICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBlKCkgPT0gUmVnRXhw
T2JqZWN0VHlwZSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3Bl
KTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIEpTVmFsdWUgYW55VHlwZWRl
ZlZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZh
bHVlIikpOwotICAgIEpTQzo6SlNWYWx1ZSBhbnlUeXBlZGVmVmFsdWU7Ci0gICAgaWYgKCFhbnlU
eXBlZGVmVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGFueVR5cGVkZWZWYWx1
ZSA9IGNvbnZlcnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VHlwZWRlZlZhbHVlVmFsdWUpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0g
ZWxzZQotICAgICAgICBhbnlUeXBlZGVmVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVmFs
dWUgYW55VmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1
ZSIpKTsKLSAgICBKU0M6OkpTVmFsdWUgYW55VmFsdWU7Ci0gICAgaWYgKCFhbnlWYWx1ZVZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYW55VmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1
ZT4oc3RhdGUsIGFueVZhbHVlVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBhbnlWYWx1ZSA9IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aERlZmF1bHQiKSk7Ci0gICAgYm9vbCBi
b29sZWFuV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFib29sZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4o
c3RhdGUsIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYm9vbGVhbldp
dGhEZWZhdWx0ID0gZmFsc2U7Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1
ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQi
KSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVm
YXVsdDsKLSAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwg
Ym9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGRpY3Rpb25hcnlNZW1i
ZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0aW9uYXJ5TWVtYmVy
IikpOwotICAgIENvbnZlcnRlcjxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRl
TnVsbD46Ok9wdGlvbmFsVmFsdWUgZGljdGlvbmFyeU1lbWJlcjsKLSAgICBpZiAoIWRpY3Rpb25h
cnlNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGRpY3Rpb25hcnlNZW1iZXIg
PSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRl
TnVsbD4oc3RhdGUsIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgZW51bWVy
YXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZp
bmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IikpOwotICAgIFRlc3RPYmo6OkVudW1UeXBl
IGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdDsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0
aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0ID0gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7Ci0gICAgSlNWYWx1
ZSBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZh
dWx0IikpOwotICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlT
dHJpbmdEZWZhdWx0OwotICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0Rl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRo
RW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAg
ICBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1U
eXBlOjpFbXB0eVN0cmluZzsKLSAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFs
dWVXaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpP
cHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKLSAgICBpZiAoIWVu
dW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVt
VHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAg
SlNWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50
ZWdlciIpKTsKLSAgICBDb252ZXJ0ZXI8aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgaW50ZWdlcjsK
LSAgICBpZiAoIWludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGludGVnZXIg
PSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBpbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAg
IH0KLSAgICBKU1ZhbHVlIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImludGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBpbnQzMl90IGludGVn
ZXJXaXRoRGVmYXVsdDsKLSAgICBpZiAoIWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKLSAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQzMl90Pihz
dGF0ZSwgaW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQot
ICAgICAgICBpbnRlZ2VyV2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgbGFyZ2VJbnRlZ2Vy
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOwot
ICAgIENvbnZlcnRlcjxpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSBsYXJnZUludGVnZXI7Ci0gICAg
aWYgKCFsYXJnZUludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGxhcmdlSW50
ZWdlciA9IGNvbnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldpdGhEZWZhdWx0Iikp
OwotICAgIGludDY0X3QgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFsYXJnZUlu
dGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgbGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJXaXRo
RGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgbnVsbGFibGVOb2RlVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVOb2RlIikpOwotICAgIE5vZGUqIG51
bGxhYmxlTm9kZTsKLSAgICBpZiAoIW51bGxhYmxlTm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgbnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4o
c3RhdGUsIG51bGxhYmxlTm9kZVZhbHVlLCBJc051bGxhYmxlOjpZZXMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAg
ICBudWxsYWJsZU5vZGUgPSBudWxscHRyOwotICAgIEpTVmFsdWUgcmVzdHJpY3RlZERvdWJsZVZh
bHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7
Ci0gICAgQ29udmVydGVyPGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZERvdWJsZTsK
LSAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3Vi
bGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7Ci0gICAgZG91YmxlIHJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdDsKLSAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1
ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0ID0gMDsKLSAgICBKU1ZhbHVlIHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKLSAgICBD
b252ZXJ0ZXI8ZmxvYXQ+OjpPcHRpb25hbFZhbHVlIHJlc3RyaWN0ZWRGbG9hdDsKLSAgICBpZiAo
IXJlc3RyaWN0ZWRGbG9hdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJpY3Rl
ZEZsb2F0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRGbG9hdFZhbHVlLCBTaG91
bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQiKSk7Ci0gICAgZmxvYXQgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7
Ci0gICAgaWYgKCFyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0PGZsb2F0Pihz
dGF0ZSwgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5p
dGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOwot
ICAgIEpTVmFsdWUgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzZXF1ZW5jZU9mU3RyaW5ncyIpKTsKLSAgICBDb252ZXJ0ZXI8VmVjdG9yPFN0
cmluZz4+OjpPcHRpb25hbFZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzOwotICAgIGlmICghc2VxdWVu
Y2VPZlN0cmluZ3NWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNlcXVlbmNlT2ZTdHJp
bmdzID0gY29udmVydDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFs
dWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwot
ICAgIH0KLSAgICBKU1ZhbHVlIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSA9IGlzTnVsbE9yVW5k
ZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpOwotICAgIENvbnZlcnRl
cjxpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsSW50ZWdlckNsYW1wZWQ7Ci0gICAgaWYgKCFz
bWFsbEludGVnZXJDbGFtcGVkVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBzbWFsbElu
dGVnZXJDbGFtcGVkID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJDbGFtcGVk
VmFsdWUsIENsYW1wKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBO
dWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0
IikpOwotICAgIENvbnZlcnRlcjxpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsSW50ZWdlcldp
dGhEZWZhdWx0OwotICAgIGlmICghc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQ4
X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAg
ICB9Ci0gICAgSlNWYWx1ZSBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9
IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2UiKSk7Ci0gICAgQ29udmVydGVyPHVpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxs
VW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZTsKLSAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRl
Z2VyRW5mb3JjZWRSYW5nZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc21hbGxVbnNp
Z25lZEludGVnZXJFbmZvcmNlZFJhbmdlID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxV
bnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpT
VmFsdWUgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0g
ICAgdWludDhfdCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlmICghc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3Rh
dGUsIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOwot
ICAgIEpTVmFsdWUgc3RyaW5nV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKTsKLSAgICBTdHJpbmcgc3RyaW5nV2l0aERl
ZmF1bHQ7Ci0gICAgaWYgKCFzdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgc3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmlu
Z1dpdGhEZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdCA9ICJk
ZWZhdWx0U3RyaW5nIjsKLSAgICBKU1ZhbHVlIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBp
c051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7Ci0g
ICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlvbmFsVmFsdWUgc3RyaW5nV2l0aG91dERlZmF1bHQ7
Ci0gICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAg
ICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmlu
Z1dpdGhvdXREZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZERvdWJsZVZh
bHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIp
KTsKLSAgICBDb252ZXJ0ZXI8ZG91YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3Vi
bGU7Ci0gICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0g
ICAgICAgIHVucmVzdHJpY3RlZERvdWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0
cmljdGVkRG91YmxlVmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1Zh
bHVlIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5l
ZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7Ci0gICAgZG91
YmxlIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0OwotICAgIGlmICghdW5yZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVs
c2UKLSAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFs
dWUgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKLSAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpPcHRpb25hbFZh
bHVlIHVucmVzdHJpY3RlZEZsb2F0OwotICAgIGlmICghdW5yZXN0cmljdGVkRmxvYXRWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxmbG9h
dD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZ
ZXMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwot
ICAgIH0KLSAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0
IikpOwotICAgIGZsb2F0IHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7Ci0gICAgaWYgKCF1
bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHVu
cmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olll
cyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOwotICAg
IEpTVmFsdWUgdW5zaWduZWRJbnRlZ2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpOwotICAgIENvbnZlcnRlcjx1aW50MzJfdD46Ok9wdGlv
bmFsVmFsdWUgdW5zaWduZWRJbnRlZ2VyOwotICAgIGlmICghdW5zaWduZWRJbnRlZ2VyVmFsdWUu
aXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZEludGVnZXIgPSBjb252ZXJ0PHVpbnQz
Ml90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAg
ICBKU1ZhbHVlIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgdWlu
dDMyX3QgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCF1bnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2Vy
V2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKLSAgICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRl
Z2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUlu
dGVnZXIiKSk7Ci0gICAgQ29udmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSB1bnNpZ25l
ZExhcmdlSW50ZWdlcjsKLSAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRl
ZmluZWQoKSkgewotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNvbnZlcnQ8dWludDY0
X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9
Ci0gICAgSlNWYWx1ZSB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dCIpKTsKLSAgICB1aW50NjRfdCB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0OwotICAg
IGlmICghdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWlu
dDY0X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZh
dWx0ID0gMDsKLSAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeSB7IFdURk1vdmUoZW51bWVy
YXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aERl
ZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KSwg
V1RGTW92ZShzdHJpbmdXaXRoRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aG91dERlZmF1bHQp
LCBXVEZNb3ZlKGJvb2xlYW5XaXRoRGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZh
dWx0KSwgV1RGTW92ZShzZXF1ZW5jZU9mU3RyaW5ncyksIFdURk1vdmUocmVzdHJpY3RlZERvdWJs
ZSksIFdURk1vdmUodW5yZXN0cmljdGVkRG91YmxlKSwgV1RGTW92ZShyZXN0cmljdGVkRG91Ymxl
V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RG
TW92ZShyZXN0cmljdGVkRmxvYXQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92
ZShyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxJbnRlZ2VyQ2xhbXBlZCksIFdURk1vdmUoc21hbGxJ
bnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRS
YW5nZSksIFdURk1vdmUoc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUo
aW50ZWdlciksIFdURk1vdmUoaW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZElu
dGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShsYXJn
ZUludGVnZXIpLCBXVEZNb3ZlKGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNp
Z25lZExhcmdlSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dCksIFdURk1vdmUobnVsbGFibGVOb2RlKSwgV1RGTW92ZShhbnlWYWx1ZSksIFdURk1vdmUoYW55
VHlwZWRlZlZhbHVlKSwgZGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07Ci19Ci0KLXRlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJh
dGVOdWxsPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFs
dWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAh
b2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwot
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKG9iamVjdCAm
JiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAg
ICB9Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5k
ZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVy
dGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKLSAgICBpZiAo
IWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9v
bGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhvdXRE
ZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKTsKLSAgICBOb2RlKiBu
b25OdWxsYWJsZU5vZGU7Ci0gICAgaWYgKCFub25OdWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIG5vbk51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2Rl
LCBKU05vZGU+KHN0YXRlLCBub25OdWxsYWJsZU5vZGVWYWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAg
ICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBKU1ZhbHVlIHJlcXVpcmVkRGljdGlvbmFy
eU1lbWJlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGlj
dGlvbmFyeU1lbWJlciIpKTsKLSAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlcXVpcmVkRGljdGlv
bmFyeU1lbWJlcjsKLSAgICBpZiAoIXJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERp
Y3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oc3RhdGUsIHJlcXVpcmVkRGljdGlvbmFyeU1l
bWJlclZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXF1
aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgcmVx
dWlyZWRFbnVtZXJhdGlvblZhbHVlOwotICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUg
PSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gVGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVk
RW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51
bGxhYmxlTm9kZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsKLX0KLQotdGVt
cGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVs
bD4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0
ZU51bGw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KTsKLSAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1
ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFv
YmplY3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0g
ICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYm
IG9iamVjdC0+dHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAg
IH0KLSAgICBKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0
ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OwotICAgIGlmICgh
Ym9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29s
ZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVy
dGVyPFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwot
ICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
ZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVt
ZXJhdGlvblZhbHVlVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOwotICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGRUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJv
b2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKLX0KLQotdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5h
dGVEaWN0aW9uYXJ5TmFtZT4gY29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5h
bWU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsK
LSAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5n
ZXRPYmplY3QoKTsKLSAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmpl
Y3QpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAg
ICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9i
amVjdC0+dHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpKSB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0K
LSAgICBKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8
Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OwotICAgIGlmICghYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29sZWFu
V2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1
bHRWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9w
dCk7Ci0gICAgfQotICAgIEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVydGVy
PFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwotICAg
IGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51
bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJh
dGlvblZhbHVlVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOwotICAgIH0KLSAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBX
VEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkg
fTsKLX0KLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PiBj
b252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc051bGxP
clVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgYXV0byogb2JqZWN0
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAg
aWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9w
dDsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBS
ZWdFeHBPYmplY3RUeXBlKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93
U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBwYXJl
bnRNZW1iZXIxVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVt
YmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVy
MTsKLSAgICBpZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHBhcmVudE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAg
IH0KLSAgICBKU1ZhbHVlIHBhcmVudE1lbWJlcjJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJwYXJlbnRNZW1iZXIyIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9u
YWxWYWx1ZSBwYXJlbnRNZW1iZXIyOwotICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUs
IHBhcmVudE1lbWJlcjJWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIHJldHVybiBUZXN0T2JqOjpQYXJlbnREaWN0aW9u
YXJ5IHsgV1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSB9Owot
fQotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4gY29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVm
aW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNO
dWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVO
TElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAg
ICB9Ci0gICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBP
YmplY3RUeXBlKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUp
OwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBwYXJlbnRNZW1i
ZXIxVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIp
KTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKLSAg
ICBpZiAoIXBhcmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVu
dE1lbWJlcjEgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAg
ICBKU1ZhbHVlIHBhcmVudE1lbWJlcjJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJwYXJlbnRNZW1iZXIyIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1
ZSBwYXJlbnRNZW1iZXIyOwotICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKLSAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVu
dE1lbWJlcjJWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
TnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgY2hpbGRNZW1iZXIxVmFsdWUgPSBpc051bGxP
clVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIxIikpOwotICAgIENvbnZlcnRlcjxi
b29sPjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjE7Ci0gICAgaWYgKCFjaGlsZE1lbWJlcjFW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMSA9IGNvbnZlcnQ8Ym9v
bD4oc3RhdGUsIGNoaWxkTWVtYmVyMVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBjaGlsZE1lbWJlcjJW
YWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7Ci0g
ICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGNoaWxkTWVtYmVyMjsKLSAgICBpZiAo
IWNoaWxkTWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgY2hpbGRNZW1iZXIy
ID0gY29udmVydDxib29sPihzdGF0ZSwgY2hpbGRNZW1iZXIyVmFsdWUpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICByZXR1cm4g
VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5IHsgV1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92
ZShwYXJlbnRNZW1iZXIxKSwgV1RGTW92ZShjaGlsZE1lbWJlcjIpLCBXVEZNb3ZlKGNoaWxkTWVt
YmVyMSkgfTsKLX0KLQogLy8gRnVuY3Rpb25zCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCmluZGV4IDkxZDdlYTljMTk4MDRhMTQwYjNlYmI3MjRiODU1ZDFiZWMyY2FkMTkuLjA2Y2Ux
MTNjN2Y0YzBlNzZmZDhkNDc4Y2U2YzE0ZmNkZjcwZTBmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTIwLDggKzIw
LDExIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiVGVz
dE9iai5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA0LDUgKzEwNyw4MzIg
QEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGcKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0T2JqPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNU
ZXN0T2JqOwogfTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKworSlNDOjpKU1N0cmluZyoganNTdHJp
bmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtVHlwZSk7CisKK2lubGlu
ZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIGVtcHR5U3RyaW5n
KCksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiZW51bVZhbHVlMSIpLAorICAgICAgICBBU0NJSUxp
dGVyYWwoIkVudW1WYWx1ZTIiKSwKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJFbnVtVmFsdWUzIiks
CisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6
RW51bVR5cGU6OkVtcHR5U3RyaW5nKSA9PSAwLCAiVGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3Ry
aW5nIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2Fz
dDxzaXplX3Q+KFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxKSA9PSAxLCAiVGVzdE9iajo6
RW51bVR5cGU6OkVudW1WYWx1ZTEgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTIp
ID09IDIsICJUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMiBpcyBub3QgMiBhcyBleHBlY3Rl
ZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVt
VHlwZTo6RW51bVZhbHVlMykgPT0gMywgIlRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUzIGlz
IG5vdCAzIGFzIGV4cGVjdGVkIik7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51
bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcykpOworICAgIHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVy
YXRpb25WYWx1ZSldKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0
T2JqOjpFbnVtVHlwZT4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1U
eXBlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9
OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gcGFyc2U8
VGVzdE9iajo6RW51bVR5cGU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OworICAgIGlmIChzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBUZXN0T2Jq
OjpFbnVtVHlwZTo6RW1wdHlTdHJpbmc7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJlbnVtVmFs
dWUxIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOworICAg
IGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCisgICAgICAgIHJldHVybiBUZXN0T2Jq
OjpFbnVtVHlwZTo6RW51bVZhbHVlMjsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1
ZTMiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTM7CisgICAg
cmV0dXJuIE51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gVGVzdE9iajo6RW51bVR5cGUgY29udmVy
dDxUZXN0T2JqOjpFbnVtVHlwZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8
VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1
bHQpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwor
dGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxU
ZXN0T2JqOjpFbnVtVHlwZT4oKQoreworICAgIHJldHVybiAiXCJcIiwgXCJlbnVtVmFsdWUxXCIs
IFwiRW51bVZhbHVlMlwiLCBcIkVudW1WYWx1ZTNcIiI7Cit9CisKK0pTQzo6SlNTdHJpbmcqIGpz
U3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6T3B0aW9uYWwpOworCitp
bmxpbmUgSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBUZXN0T2JqOjpPcHRpb25hbCBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBlbXB0eVN0
cmluZygpLAorICAgICAgICBBU0NJSUxpdGVyYWwoIk9wdGlvbmFsVmFsdWUxIiksCisgICAgICAg
IEFTQ0lJTGl0ZXJhbCgiT3B0aW9uYWxWYWx1ZTIiKSwKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJP
cHRpb25hbFZhbHVlMyIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxz
aXplX3Q+KFRlc3RPYmo6Ok9wdGlvbmFsOjpFbXB0eVN0cmluZykgPT0gMCwgIlRlc3RPYmo6Ok9w
dGlvbmFsOjpFbXB0eVN0cmluZyBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19h
c3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1
ZTEpID09IDEsICJUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTEgaXMgbm90IDEgYXMg
ZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9i
ajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUyKSA9PSAyLCAiVGVzdE9iajo6T3B0aW9uYWw6Ok9w
dGlvbmFsVmFsdWUyIGlzIG5vdCAyIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChz
dGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMykgPT0g
MywgIlRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMyBpcyBub3QgMyBhcyBleHBlY3Rl
ZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwg
V1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7Cit9
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6T3B0aW9uYWw+IHsK
KyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpPcHRpb25hbCB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBp
bmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6T3B0aW9uYWw+IHBhcnNlPFRlc3RPYmo6Ok9wdGlvbmFs
PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5n
VmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6T3B0aW9uYWw6OkVtcHR5
U3RyaW5nOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxWYWx1ZTEiKQorICAgICAg
ICByZXR1cm4gVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUxOworICAgIGlmIChzdHJp
bmdWYWx1ZSA9PSAiT3B0aW9uYWxWYWx1ZTIiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6T3B0
aW9uYWw6Ok9wdGlvbmFsVmFsdWUyOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxW
YWx1ZTMiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUz
OworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IFRlc3RPYmo6Ok9wdGlvbmFs
IGNvbnZlcnQ8VGVzdE9iajo6T3B0aW9uYWw+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9
IHBhcnNlPFRlc3RPYmo6Ok9wdGlvbmFsPihzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VM
WSghcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7
Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+KCkKK3sKKyAgICByZXR1cm4gIlwiXCIsIFwiT3B0aW9u
YWxWYWx1ZTFcIiwgXCJPcHRpb25hbFZhbHVlMlwiLCBcIk9wdGlvbmFsVmFsdWUzXCIiOworfQor
CitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIEFsdGVy
bmF0ZUVudW1OYW1lKTsKKworaW5saW5lIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQWx0ZXJuYXRlRW51bU5hbWUgZW51bWVyYXRpb25WYWx1
ZSkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9
IHsKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJlbnVtVmFsdWUxIiksCisgICAgICAgIEFTQ0lJTGl0
ZXJhbCgiRW51bVZhbHVlMiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2Fz
dDxzaXplX3Q+KEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUxKSA9PSAwLCAiQWx0ZXJuYXRl
RW51bU5hbWU6OkVudW1WYWx1ZTEgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oQWx0ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTIp
ID09IDEsICJBbHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVlMiBpcyBub3QgMSBhcyBleHBlY3Rl
ZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwg
V1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7Cit9
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8QWx0ZXJuYXRlRW51bU5hbWU+IHsK
KyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBBbHRlcm5hdGVFbnVtTmFtZSB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBp
bmxpbmUgT3B0aW9uYWw8QWx0ZXJuYXRlRW51bU5hbWU+IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1l
PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5n
VmFsdWUgPT0gImVudW1WYWx1ZTEiKQorICAgICAgICByZXR1cm4gQWx0ZXJuYXRlRW51bU5hbWU6
OkVudW1WYWx1ZTE7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUyIikKKyAgICAg
ICAgcmV0dXJuIEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUyOworICAgIHJldHVybiBOdWxs
b3B0OworfQorCit0ZW1wbGF0ZTw+IEFsdGVybmF0ZUVudW1OYW1lIGNvbnZlcnQ8QWx0ZXJuYXRl
RW51bU5hbWU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPEFsdGVybmF0ZUVu
dW1OYW1lPihzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4g
aW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8QWx0ZXJuYXRlRW51
bU5hbWU+KCkKK3sKKyAgICByZXR1cm4gIlwiZW51bVZhbHVlMVwiLCBcIkVudW1WYWx1ZTJcIiI7
Cit9CisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKworSlNDOjpKU1N0cmluZyoganNTdHJpbmdX
aXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQSk7CisKK2lubGluZSBKU0M6
OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RP
Ymo6OkVudW1BIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiQSIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OkVu
dW1BOjpBKSA9PSAwLCAiVGVzdE9iajo6RW51bUE6OkEgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9B
UlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOworfQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1BPiB7CisgICAgc3Rh
dGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6RW51bUEgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KK307CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlv
bmFsPFRlc3RPYmo6OkVudW1BPiBwYXJzZTxUZXN0T2JqOjpFbnVtQT4oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJBIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1BOjpBOworICAgIHJldHVybiBOdWxsb3B0OworfQor
Cit0ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1BIGNvbnZlcnQ8VGVzdE9iajo6RW51bUE+KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1BPihzdGF0ZSwgdmFs
dWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KCkKK3sKKyAgICByZXR1
cm4gIlwiQVwiIjsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpCisKK0pTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6
RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUIpOworCitpbmxpbmUgSlNDOjpKU1N0cmluZyoganNT
dHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQiBlbnVt
ZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+
IHZhbHVlc1tdID0geworICAgICAgICBBU0NJSUxpdGVyYWwoIkIiKSwKKyAgICB9OworICAgIHN0
YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtQjo6QikgPT0gMCwg
IlRlc3RPYmo6OkVudW1COjpCIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZh
bHVlcykpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRp
Y19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQj4geworICAgIHN0YXRpYyBKU0M6OkpTU3Ry
aW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RPYmo6OkVudW1CIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpF
bnVtQj4gcGFyc2U8VGVzdE9iajo6RW51bUI+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiQiIpCisgICAgICAgIHJldHVybiBU
ZXN0T2JqOjpFbnVtQjo6QjsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBU
ZXN0T2JqOjpFbnVtQiBjb252ZXJ0PFRlc3RPYmo6OkVudW1CPihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtQj4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAo
VU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52
YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1CPigpCit7CisgICAgcmV0dXJuICJcIkJcIiI7Cit9
CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQorCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRl
c3RPYmo6OkVudW1DKTsKKworaW5saW5lIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUMgZW51bWVyYXRpb25WYWx1ZSkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsK
KyAgICAgICAgQVNDSUlMaXRlcmFsKCJDIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6RW51bUM6OkMpID09IDAsICJUZXN0T2JqOjpFbnVt
Qzo6QyBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXpl
X3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpXSk7Cit9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFp
dHM8VGVzdE9iajo6RW51bUM+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpF
bnVtQyB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQor
fTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlPFRl
c3RPYmo6OkVudW1DPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAg
ICBpZiAoc3RyaW5nVmFsdWUgPT0gIkMiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bUM6
OkM7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gVGVzdE9iajo6RW51bUMg
Y29udmVydDxUZXN0T2JqOjpFbnVtQz4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0ID0gcGFy
c2U8VGVzdE9iajo6RW51bUM+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1
bHQpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwor
dGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxU
ZXN0T2JqOjpFbnVtQz4oKQoreworICAgIHJldHVybiAiXCJDXCIiOworfQorCisjZW5kaWYKKwor
SlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2Jq
OjpLaW5kKTsKKworaW5saW5lIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAg
ICBBU0NJSUxpdGVyYWwoInF1aWNrIiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiZGVhZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6Oktp
bmQ6OlF1aWNrKSA9PSAwLCAiVGVzdE9iajo6S2luZDo6UXVpY2sgaXMgbm90IDAgYXMgZXhwZWN0
ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6S2lu
ZDo6RGVhZCkgPT0gMSwgIlRlc3RPYmo6OktpbmQ6OkRlYWQgaXMgbm90IDEgYXMgZXhwZWN0ZWQi
KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdU
Rl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOworfQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OktpbmQ+IHsKKyAgICBz
dGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRp
b25hbDxUZXN0T2JqOjpLaW5kPiBwYXJzZTxUZXN0T2JqOjpLaW5kPihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gInF1aWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OktpbmQ6OlF1aWNrOworICAgIGlmIChzdHJpbmdWYWx1
ZSA9PSAiZGVhZCIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpLaW5kOjpEZWFkOworICAgIHJl
dHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IFRlc3RPYmo6OktpbmQgY29udmVydDxUZXN0
T2JqOjpLaW5kPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpL
aW5kPihzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5s
aW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4o
KQoreworICAgIHJldHVybiAiXCJxdWlja1wiLCBcImRlYWRcIiI7Cit9CisKK0pTQzo6SlNTdHJp
bmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6U2l6ZSk7CisK
K2lubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIFRlc3RPYmo6OlNpemUgZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgQVNDSUlMaXRl
cmFsKCJzbWFsbCIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoIm11Y2gtbXVjaC1sYXJnZXIiKSwK
KyAgICB9OworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpT
aXplOjpTbWFsbCkgPT0gMCwgIlRlc3RPYmo6OlNpemU6OlNtYWxsIGlzIG5vdCAwIGFzIGV4cGVj
dGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OlNp
emU6Ok11Y2hNdWNoTGFyZ2VyKSA9PSAxLCAiVGVzdE9iajo6U2l6ZTo6TXVjaE11Y2hMYXJnZXIg
aXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pihl
bnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVt
ZXJhdGlvblZhbHVlKV0pOworfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRl
c3RPYmo6OlNpemU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpTaXplIHZh
bHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0
ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpTaXplPiBwYXJzZTxUZXN0T2JqOjpT
aXplPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3Ry
aW5nVmFsdWUgPT0gInNtYWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNpemU6OlNtYWxs
OworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAibXVjaC1tdWNoLWxhcmdlciIpCisgICAgICAgIHJl
dHVybiBUZXN0T2JqOjpTaXplOjpNdWNoTXVjaExhcmdlcjsKKyAgICByZXR1cm4gTnVsbG9wdDsK
K30KKwordGVtcGxhdGU8PiBUZXN0T2JqOjpTaXplIGNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6U2l6ZT4oc3RhdGUsIHZh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OlNpemU+KCkKK3sKKyAgICByZXR1
cm4gIlwic21hbGxcIiwgXCJtdWNoLW11Y2gtbGFyZ2VyXCIiOworfQorCitKU0M6OkpTU3RyaW5n
KiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkNvbmZpZGVuY2Up
OworCitpbmxpbmUgSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBUZXN0T2JqOjpDb25maWRlbmNlIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAg
IEFTQ0lJTGl0ZXJhbCgiaGlnaCIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoImtpbmRhLWxvdyIp
LAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6
OkNvbmZpZGVuY2U6OkhpZ2gpID09IDAsICJUZXN0T2JqOjpDb25maWRlbmNlOjpIaWdoIGlzIG5v
dCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+
KFRlc3RPYmo6OkNvbmZpZGVuY2U6OktpbmRhTG93KSA9PSAxLCAiVGVzdE9iajo6Q29uZmlkZW5j
ZTo6S2luZGFMb3cgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7
CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOworfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmlu
ZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0T2JqOjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2Jq
OjpDb25maWRlbmNlPiBwYXJzZTxUZXN0T2JqOjpDb25maWRlbmNlPihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImhpZ2giKQor
ICAgICAgICByZXR1cm4gVGVzdE9iajo6Q29uZmlkZW5jZTo6SGlnaDsKKyAgICBpZiAoc3RyaW5n
VmFsdWUgPT0gImtpbmRhLWxvdyIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpDb25maWRlbmNl
OjpLaW5kYUxvdzsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBUZXN0T2Jq
OjpDb25maWRlbmNlIGNvbnZlcnQ8VGVzdE9iajo6Q29uZmlkZW5jZT4oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6Q29uZmlkZW5jZT4oc3RhdGUsIHZhbHVlKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkNvbmZpZGVuY2U+KCkKK3sKKyAgICByZXR1
cm4gIlwiaGlnaFwiLCBcImtpbmRhLWxvd1wiIjsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0
aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGlj
dGlvbmFyeT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpOworICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVk
ID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxs
T3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChV
TkxJS0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBl
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIGFueVR5cGVkZWZWYWx1
ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlUeXBl
ZGVmVmFsdWUiKSk7CisgICAgSlNDOjpKU1ZhbHVlIGFueVR5cGVkZWZWYWx1ZTsKKyAgICBpZiAo
IWFueVR5cGVkZWZWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgYW55VHlwZWRl
ZlZhbHVlID0gY29udmVydDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBhbnlUeXBlZGVmVmFsdWVWYWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGFueVR5cGVkZWZWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAg
SlNDOjpKU1ZhbHVlIGFueVZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNV
bmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImFueVZhbHVlIikpOworICAgIEpTQzo6SlNWYWx1ZSBhbnlWYWx1ZTsKKyAg
ICBpZiAoIWFueVZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBhbnlWYWx1ZSA9
IGNvbnZlcnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VmFsdWVWYWx1ZSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGFueVZhbHVlID0ganNVbmRlZmluZWQoKTsKKyAgICBKU0M6OkpTVmFsdWUgYm9vbGVhbldp
dGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRoRGVmYXVsdCIpKTsKKyAgICBib29sIGJvb2xlYW5XaXRoRGVmYXVsdDsKKyAg
ICBpZiAoIWJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
Ym9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhEZWZh
dWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOworICAgIH0gZWxzZQorICAgICAgICBib29sZWFuV2l0aERlZmF1bHQgPSBmYWxzZTsKKyAg
ICBKU0M6OkpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAg
ICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0Owor
ICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFu
V2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBkaWN0aW9uYXJ5TWVtYmVy
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImRpY3Rpb25h
cnlNZW1iZXIiKSk7CisgICAgQ29udmVydGVyPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPjo6T3B0aW9uYWxWYWx1ZSBkaWN0aW9uYXJ5TWVtYmVyOworICAgIGlmICgh
ZGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZGljdGlvbmFy
eU1lbWJlciA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPihzdGF0ZSwgZGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpK
U1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQiKSk7
CisgICAgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0OworICAg
IGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewor
ICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0PFRlc3RPYmo6OkVu
dW1UeXBlPihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0VmFsdWUpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQor
ICAgICAgICBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQgPSBUZXN0T2JqOjpFbnVtVHlwZTo6
RW51bVZhbHVlMTsKKyAgICBKU0M6OkpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0
cmluZ0RlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSk7CisgICAgVGVzdE9i
ajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQ7CisgICAg
aWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQg
PSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhF
bXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVX
aXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0gVGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3RyaW5nOwor
ICAgIEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdp
dGhvdXREZWZhdWx0IikpOworICAgIENvbnZlcnRlcjxUZXN0T2JqOjpFbnVtVHlwZT46Ok9wdGlv
bmFsVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0OworICAgIGlmICghZW51bWVy
YXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBl
bnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBl
PihzdGF0ZSwgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6
OkpTVmFsdWUgaW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZp
bmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJpbnRlZ2VyIikpOworICAgIENvbnZlcnRlcjxpbnQzMl90Pjo6T3B0aW9uYWxWYWx1
ZSBpbnRlZ2VyOworICAgIGlmICghaW50ZWdlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAg
ICAgaW50ZWdlciA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIGludGVnZXJWYWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9
IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0
YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50ZWdlcldpdGhEZWZh
dWx0IikpOworICAgIGludDMyX3QgaW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghaW50ZWdl
cldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBpbnRlZ2VyV2l0aERl
ZmF1bHQgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIGludGVnZXJXaXRoRGVmYXVsdCA9IDA7
CisgICAgSlNDOjpKU1ZhbHVlIGxhcmdlSW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIiKSk7CisgICAgQ29udmVydGVyPGlu
dDY0X3Q+OjpPcHRpb25hbFZhbHVlIGxhcmdlSW50ZWdlcjsKKyAgICBpZiAoIWxhcmdlSW50ZWdl
clZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgbGFyZ2VJbnRlZ2VyID0gY29udmVydDxp
bnQ2NF90PihzdGF0ZSwgbGFyZ2VJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAg
ICBKU0M6OkpTVmFsdWUgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5k
ZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSk7
CisgICAgaW50NjRfdCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdDsKKyAgICBpZiAoIWxhcmdlSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBsYXJnZUludGVn
ZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBsYXJnZUludGVn
ZXJXaXRoRGVmYXVsdCA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIG51bGxhYmxlTm9kZVZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJudWxsYWJsZU5vZGUiKSk7
CisgICAgTm9kZSogbnVsbGFibGVOb2RlOworICAgIGlmICghbnVsbGFibGVOb2RlVmFsdWUuaXNV
bmRlZmluZWQoKSkgeworICAgICAgICBudWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8
Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbnVsbGFibGVOb2RlVmFsdWUsIElzTnVsbGFibGU6Olllcyk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAg
fSBlbHNlCisgICAgICAgIG51bGxhYmxlTm9kZSA9IG51bGxwdHI7CisgICAgSlNDOjpKU1ZhbHVl
IHJlc3RyaWN0ZWREb3VibGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICBDb252ZXJ0ZXI8ZG91YmxlPjo6T3B0
aW9uYWxWYWx1ZSByZXN0cmljdGVkRG91YmxlOworICAgIGlmICghcmVzdHJpY3RlZERvdWJsZVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmVzdHJpY3RlZERvdWJsZSA9IGNvbnZlcnQ8
ZG91YmxlPihzdGF0ZSwgcmVzdHJpY3RlZERvdWJsZVZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0
ZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQp
OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdCIpKTsKKyAgICBkb3VibGUgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0OworICAgIGlmICghcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmlu
ZWQoKSkgeworICAgICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0PGRv
dWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxv
d05vbkZpbml0ZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1
bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSByZXN0cmljdGVkRmxvYXRWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0IikpOworICAg
IENvbnZlcnRlcjxmbG9hdD46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZEZsb2F0OworICAgIGlm
ICghcmVzdHJpY3RlZEZsb2F0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXN0cmlj
dGVkRmxvYXQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpObyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSByZXN0cmljdGVkRmxv
YXRXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpKTsKKyAgICBmbG9hdCByZXN0cmljdGVk
RmxvYXRXaXRoRGVmYXVsdDsKKyAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9
IGNvbnZlcnQ8ZmxvYXQ+KHN0YXRlLCByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLCBT
aG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICByZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdCA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNlcXVlbmNlT2ZTdHJp
bmdzIikpOworICAgIENvbnZlcnRlcjxWZWN0b3I8U3RyaW5nPj46Ok9wdGlvbmFsVmFsdWUgc2Vx
dWVuY2VPZlN0cmluZ3M7CisgICAgaWYgKCFzZXF1ZW5jZU9mU3RyaW5nc1ZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0PFZlY3RvcjxTdHJp
bmc+PihzdGF0ZSwgc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBz
bWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInNtYWxsSW50ZWdlckNsYW1wZWQiKSk7CisgICAgQ29udmVydGVyPGludDhfdD46
Ok9wdGlvbmFsVmFsdWUgc21hbGxJbnRlZ2VyQ2xhbXBlZDsKKyAgICBpZiAoIXNtYWxsSW50ZWdl
ckNsYW1wZWRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHNtYWxsSW50ZWdlckNsYW1w
ZWQgPSBjb252ZXJ0PGludDhfdD4oc3RhdGUsIHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSwgQ2xh
bXApOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwor
ICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyV2l0aERl
ZmF1bHQiKSk7CisgICAgQ29udmVydGVyPGludDhfdD46Ok9wdGlvbmFsVmFsdWUgc21hbGxJbnRl
Z2VyV2l0aERlZmF1bHQ7CisgICAgaWYgKCFzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0
PGludDhfdD4oc3RhdGUsIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQp
OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJh
bmdlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxs
VW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIpKTsKKyAgICBDb252ZXJ0ZXI8dWludDhfdD46
Ok9wdGlvbmFsVmFsdWUgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlOworICAgIGlm
ICghc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlVmFsdWUuaXNVbmRlZmluZWQoKSkg
eworICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0PHVp
bnQ4X3Q+KHN0YXRlLCBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSwgRW5m
b3JjZVJhbmdlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICB1aW50OF90IHNtYWxsVW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHQ7CisgICAgaWYgKCFzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdl
cldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVn
ZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHN0cmlu
Z1dpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInN0cmluZ1dpdGhEZWZhdWx0IikpOworICAgIFN0cmluZyBzdHJpbmdXaXRoRGVmYXVsdDsK
KyAgICBpZiAoIXN0cmluZ1dpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAg
ICBzdHJpbmdXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8U3RyaW5nPihzdGF0ZSwgc3RyaW5nV2l0aERl
ZmF1bHRWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0ID0gImRlZmF1bHRT
dHJpbmciOworICAgIEpTQzo6SlNWYWx1ZSBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlID0gaXNO
dWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVmYXVs
dCIpKTsKKyAgICBDb252ZXJ0ZXI8U3RyaW5nPjo6T3B0aW9uYWxWYWx1ZSBzdHJpbmdXaXRob3V0
RGVmYXVsdDsKKyAgICBpZiAoIXN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQo
KSkgeworICAgICAgICBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8U3RyaW5nPihzdGF0
ZSwgc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSB1bnJlc3Ry
aWN0ZWREb3VibGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAidW5yZXN0cmljdGVkRG91YmxlIikpOworICAgIENvbnZlcnRlcjxkb3VibGU+OjpPcHRpb25h
bFZhbHVlIHVucmVzdHJpY3RlZERvdWJsZTsKKyAgICBpZiAoIXVucmVzdHJpY3RlZERvdWJsZVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlID0gY29udmVy
dDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3VibGVWYWx1ZSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Olllcyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKTsKKyAgICBkb3VibGUgdW5yZXN0cmljdGVkRG91
YmxlV2l0aERlZmF1bHQ7CisgICAgaWYgKCF1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1
bHQgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICB1bnJlc3Ry
aWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHVucmVzdHJpY3Rl
ZEZsb2F0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVu
cmVzdHJpY3RlZEZsb2F0IikpOworICAgIENvbnZlcnRlcjxmbG9hdD46Ok9wdGlvbmFsVmFsdWUg
dW5yZXN0cmljdGVkRmxvYXQ7CisgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgdW5yZXN0cmljdGVkRmxvYXQgPSBjb252ZXJ0PGZsb2F0Pihz
dGF0ZSwgdW5yZXN0cmljdGVkRmxvYXRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAg
fQorICAgIEpTQzo6SlNWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBp
c051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQiKSk7CisgICAgZmxvYXQgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdDsK
KyAgICBpZiAoIXVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0PGZsb2F0
PihzdGF0ZSwgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05v
bkZpbml0ZTo6WWVzKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBO
dWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVs
dCA9IDA7CisgICAgSlNDOjpKU1ZhbHVlIHVuc2lnbmVkSW50ZWdlclZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVnZXIiKSk7CisgICAg
Q29udmVydGVyPHVpbnQzMl90Pjo6T3B0aW9uYWxWYWx1ZSB1bnNpZ25lZEludGVnZXI7CisgICAg
aWYgKCF1bnNpZ25lZEludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVuc2ln
bmVkSW50ZWdlciA9IGNvbnZlcnQ8dWludDMyX3Q+KHN0YXRlLCB1bnNpZ25lZEludGVnZXJWYWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSB1bnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICB1aW50MzJfdCB1bnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdDsKKyAgICBpZiAoIXVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9
IGNvbnZlcnQ8dWludDMyX3Q+KHN0YXRlLCB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0aERl
ZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50
ZWdlciIpKTsKKyAgICBDb252ZXJ0ZXI8dWludDY0X3Q+OjpPcHRpb25hbFZhbHVlIHVuc2lnbmVk
TGFyZ2VJbnRlZ2VyOworICAgIGlmICghdW5zaWduZWRMYXJnZUludGVnZXJWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CisgICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydDx1aW50NjRf
dD4oc3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0K
KyAgICBKU0M6OkpTVmFsdWUgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50
ZWdlcldpdGhEZWZhdWx0IikpOworICAgIHVpbnQ2NF90IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0
aERlZmF1bHQ7CisgICAgaWYgKCF1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUu
aXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydDx1aW50NjRfdD4oc3RhdGUsIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5IHsg
V1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0
aW9uVmFsdWVXaXRoRGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0
cmluZ0RlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdX
aXRob3V0RGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhEZWZhdWx0KSwgV1RGTW92ZShib29s
ZWFuV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSwgV1RGTW92ZShy
ZXN0cmljdGVkRG91YmxlKSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUodW5yZXN0cmljdGVk
RmxvYXQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbEludGVnZXJDbGFtcGVkKSwg
V1RGTW92ZShzbWFsbEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxVbnNpZ25lZElu
dGVnZXJFbmZvcmNlZFJhbmdlKSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZh
dWx0KSwgV1RGTW92ZShpbnRlZ2VyKSwgV1RGTW92ZShpbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHVuc2lnbmVkSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKGxhcmdlSW50ZWdlciksIFdURk1vdmUobGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50
ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShudWxsYWJsZU5vZGUpLCBXVEZNb3ZlKGFueVZhbHVl
KSwgV1RGTW92ZShhbnlUeXBlZGVmVmFsdWUpLCBkaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsK
K30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGROb3RUb2xlcmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25h
cnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051bGxP
clVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2JqZWN0
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAg
aWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9w
dDsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBK
U0M6OlJlZ0V4cE9iamVjdFR5cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
dGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6OkpT
VmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpT
Qzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0
ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OworICAgIGlmICgh
Ym9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBib29s
ZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERl
ZmF1bHRWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBub25OdWxsYWJsZU5vZGVWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibm9uTnVsbGFibGVOb2RlIikp
OworICAgIE5vZGUqIG5vbk51bGxhYmxlTm9kZTsKKyAgICBpZiAoIW5vbk51bGxhYmxlTm9kZVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgbm9uTnVsbGFibGVOb2RlID0gY29udmVydFdy
YXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG5vbk51bGxhYmxlTm9kZVZhbHVlLCBJc051
bGxhYmxlOjpObyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVs
bG9wdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIEpTQzo6SlNWYWx1
ZSByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlND
Ojpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyIikpOworICAgIFRlc3RP
Ymo6OkRpY3Rpb25hcnkgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyOworICAgIGlmICghcmVxdWly
ZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXF1aXJl
ZERpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5
PihzdGF0ZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxs
b3B0OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRW51
bWVyYXRpb25WYWx1ZSIpKTsKKyAgICBUZXN0T2JqOjpFbnVtVHlwZSByZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWU7CisgICAgaWYgKCFyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CisgICAgICAgIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVz
dE9iajo6RW51bVR5cGU+KHN0YXRlLCByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWVWYWx1ZSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5
VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbCB7IFdURk1vdmUocmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpLCAqbm9uTnVsbGFibGVOb2RlLCBy
ZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OworfQorCit0ZW1wbGF0ZTw+IGlubGlu
ZSBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4gY29u
dmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKKyAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxw
dHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZp
bmVkICYmICFvYmplY3QpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBpZiAoVU5MSUtFTFko
b2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IEpTQzo6UmVnRXhwT2JqZWN0VHlwZSkpIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRW
YWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldp
dGhvdXREZWZhdWx0IikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29s
ZWFuV2l0aG91dERlZmF1bHQ7CisgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8
Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1Zh
bHVlIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1Vu
ZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKTsKKyAgICBDb252ZXJ0ZXI8VGVzdE9iajo6
RW51bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWU7CisgICAgaWYgKCFlbnVt
ZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBlbnVtZXJhdGlvblZh
bHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVW
YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7
CisgICAgfQorICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRl
TnVsbCB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXRE
ZWZhdWx0KSB9OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxBbHRlcm5hdGVEaWN0
aW9uYXJ5TmFtZT4gY29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKTsKKyAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIg
OiB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVk
ICYmICFvYmplY3QpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29w
ZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkob2Jq
ZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IEpTQzo6UmVnRXhwT2JqZWN0VHlwZSkpIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1
ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQo
JnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhv
dXREZWZhdWx0IikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFu
V2l0aG91dERlZmF1bHQ7CisgICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7CisgICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9v
bD4oc3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVl
IGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKTsKKyAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51
bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWU7CisgICAgaWYgKCFlbnVtZXJh
dGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBlbnVtZXJhdGlvblZhbHVl
ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVWYWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Cisg
ICAgfQorICAgIHJldHVybiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSB7IFdURk1vdmUoZW51bWVy
YXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSB9OworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PiBjb252ZXJ0
RGljdGlvbmFyeTxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9v
bCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0
byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0
KCk7CisgICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5
cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVjdFR5cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAg
ICBKU0M6OkpTVmFsdWUgcGFyZW50TWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBK
U0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJwYXJlbnRNZW1iZXIxIikpOworICAgIENvbnZlcnRlcjxib29s
Pjo6T3B0aW9uYWxWYWx1ZSBwYXJlbnRNZW1iZXIxOworICAgIGlmICghcGFyZW50TWVtYmVyMVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8Ym9v
bD4oc3RhdGUsIHBhcmVudE1lbWJlcjFWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBwYXJlbnRN
ZW1iZXIyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBh
cmVudE1lbWJlcjIiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBhcmVu
dE1lbWJlcjI7CisgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgewor
ICAgICAgICBwYXJlbnRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVtYmVy
MlZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKKyAgICB9CisgICAgcmV0dXJuIFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnkgeyBXVEZNb3Zl
KHBhcmVudE1lbWJlcjIpLCBXVEZNb3ZlKHBhcmVudE1lbWJlcjEpIH07Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4gY29udmVydERpY3Rp
b25hcnk8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051
bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2Jq
ZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Cisg
ICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVs
bG9wdDsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9
PSBKU0M6OlJlZ0V4cE9iamVjdFR5cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6
OkpTVmFsdWUgcGFyZW50TWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6Ompz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJwYXJlbnRNZW1iZXIxIikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0
aW9uYWxWYWx1ZSBwYXJlbnRNZW1iZXIxOworICAgIGlmICghcGFyZW50TWVtYmVyMVZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMSA9IGNvbnZlcnQ8Ym9vbD4oc3Rh
dGUsIHBhcmVudE1lbWJlcjFWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBwYXJlbnRNZW1iZXIy
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1l
bWJlcjIiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBhcmVudE1lbWJl
cjI7CisgICAgaWYgKCFwYXJlbnRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAg
ICBwYXJlbnRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVtYmVyMlZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAg
ICB9CisgICAgSlNDOjpKU1ZhbHVlIGNoaWxkTWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjEiKSk7CisgICAgQ29udmVydGVy
PGJvb2w+OjpPcHRpb25hbFZhbHVlIGNoaWxkTWVtYmVyMTsKKyAgICBpZiAoIWNoaWxkTWVtYmVy
MVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgY2hpbGRNZW1iZXIxID0gY29udmVydDxi
b29sPihzdGF0ZSwgY2hpbGRNZW1iZXIxVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgY2hpbGRN
ZW1iZXIyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNo
aWxkTWVtYmVyMiIpKTsKKyAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgY2hpbGRN
ZW1iZXIyOworICAgIGlmICghY2hpbGRNZW1iZXIyVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBjaGlsZE1lbWJlcjIgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBjaGlsZE1lbWJlcjJWYWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Cisg
ICAgfQorICAgIHJldHVybiBUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnkgeyBXVEZNb3ZlKHBhcmVu
dE1lbWJlcjIpLCBXVEZNb3ZlKHBhcmVudE1lbWJlcjEpLCBXVEZNb3ZlKGNoaWxkTWVtYmVyMiks
IFdURk1vdmUoY2hpbGRNZW1iZXIxKSB9OworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290645</attachid>
            <date>2016-10-04 14:37:42 -0700</date>
            <delta_ts>2016-10-04 16:27:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162929-20161004143431.patch</filename>
            <type>text/plain</type>
            <size>105634</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRlNWY4N2VhMDJhNzZh
YjRjMjY2NGM0OWZmZDg5MTZhYzA0NjEwZi4uNmU3NmQyMTJmOTdiZDI5NGUwNTU2MzRjMTRiN2Zh
NzExNmU4YjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDg3IEBACiAyMDE2LTEwLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBjb252ZXJ0RGljdGlv
bmFyeTw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIHRoZSBoZWFkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29udmVydERpY3Rp
b25hcnk8PigpIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyB0byB0aGUgaGVhZGVyIGluIG9yZGVy
IHRvOgorICAgICAgICAtIEFsbG93IHRoZW0gdG8gYmUgdXNlZCBmcm9tIGN1c3RvbSBiaW5kaW5n
cyBjb2RlLgorICAgICAgICAtIFByZXBhcmUgZm9yIG1vdmluZyBkaWN0aW9uYXJpZXMgdG8gdGhl
aXIgb3duIElETCBmaWxlcyAoQnVnIDE2MjkxMikuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWJhc2VsaW5lZCBiaW5kaW5ncyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZUludGVyZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVt
ZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0
aW9uQ29udGVudCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKGFkZFVuc2Nv
cGFibGVQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
alByb3RvdHlwZTo6SlNUZXN0T2JqUHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
Ymo6OkpTVGVzdE9iaik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNy
ZWF0ZVByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnBy
b3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmRlc3Ryb3kp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaDoKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nV2l0aENhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bVR5cGU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6T3B0aW9uYWw+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8QWx0ZXJuYXRlRW51bU5hbWU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUE+OjphcnJheUpTVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnZlcnQ8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFs
dWVUcmFpdHM8VGVzdE9iajo6RW51bUI+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2U8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVz
dE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVz
dE9iajo6RW51bUM+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVz
dE9iajo6RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bUM+
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2luZD46
OmFycmF5SlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZTxUZXN0T2JqOjpLaW5kPik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0PFRlc3RPYmo6OktpbmQ+KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpTaXplPjo6YXJyYXlKU1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlPFRlc3RPYmo6OlNpemU+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4pOgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaXplPik6CisgICAgICAgIChXZWJDb3JlOjpKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6Q29uZmlkZW5jZT4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydDxUZXN0T2JqOjpDb25maWRlbmNlPik6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkNvbmZpZGVuY2U+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlv
bmFyeT4pOgorCisyMDE2LTEwLTA0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
ICAgICAgICAgW1dlYiBJRExdIEFkZCBzdXBwb3J0IGZvciBkaWN0aW9uYXJ5IGluaGVyaXRhbmNl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5MDcK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDc2YThkZWQ4Y2E4MTdiMWE0MzY3MTNiMWE0ZTgzNDBiYzdlNTdlMDMuLjc5MjBhMzgy
ZjRjNWIxYTAyZTIyNjQwZDdkMjVlOWE5M2I3YTgyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NzIsNyArMjc3Miw3IEBA
CiAJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOTNGMzRD
MUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlEQkZFRDFBOUM0OUIx
MDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5REJGRUIxQTlDNDlCMTAwMEQ2QjI1IC8q
IEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJN0M5REJGRUUxQTlDNDlCMTAw
MEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEQkZFQzFBOUM0OUIxMDAwRDZCMjUgLyogSlNI
VE1MQXR0YWNobWVudEVsZW1lbnQuaCAqLzsgfTsKLQkJN0NDMTZGRkIxRDc3Mzc1MzAwQ0UwODc3
IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURMVHlwZXMuaCAqLzsgfTsKKwkJN0ND
MTZGRkIxRDc3Mzc1MzAwQ0UwODc3IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURM
VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3Q0MyODlERjFBQTBGRTVEMDA5QTlDRTMgLyogVVJMUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERUUzOTM4MTc5NzQyNzQwMDFENzU4
MCAvKiBVUkxSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJE
ZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yLmggKi87
IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rv
ckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29h
LmNwcCAqLzsgfTsKQEAgLTMwOTksNyArMzA5OSw3IEBACiAJCTkzMDcwNUVCMDlFMEM5RjYwMEIx
N0ZFNCAvKiBKU0NTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVFQTA5RTBDOUY2MDBCMTdGRTQgLyogSlNDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwogCQk5MzA3RjFENzBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVz
dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzA3RjFENTBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJ
CTkzMDdGMUQ4MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3RjFENjBBRjJENTkwMDBEQkEz
MUEgLyogSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTkzMDg0MTM0MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDg0MTMz
MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLzsgfTsKKwkJOTMwODQxMzQxQ0RE
QjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwODQxMzMxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29u
dmVydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMDkwODkxMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwOTA4OTAwQUY3RURFNDAwODFE
RjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTMwQzkwREQxOUNGOTY1MzAwRDZDMjFBIC8qIElubGluZUl0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAgKi87IH07CiAJCTkz
MTUzQkRBMTQxODFGN0EwMEZDRjVCRSAvKiBtaXNzaW5nSW1hZ2VAMngucG5nIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE1M0JEOTE0MTgxRjdBMDBG
Q0Y1QkUgLyogbWlzc2luZ0ltYWdlQDJ4LnBuZyAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvSURMVHlwZXMuaAppbmRleCAzNzNmOTNkNjVlZTRhNTk1NzRkYjQ3YzI2YzY5
ZWM3MmM0YTdkY2I3Li44ODdjMWU2NzRlNWVlNGI2NWRhOTFhMjMxMzlkMDIxOWI3ZDA4ZGVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzOTVjN2E4YzNjMmVkMzhhMzBiOGI4ZmEyN2U5
MDM1MzIzOGJlNDUwLi5kMjkzOTIzZTc5ZDIwOWFjYTI0Y2E4NmIyODdlNmEzNjNlYWYyZDgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTI4LDExICsxMjgsMTEgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgQWRk
U3RyaW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIAogICAgIGlmICgkaW50
ZXJmYWNlLT5pc0NhbGxiYWNrKSB7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tI
ZWFkZXIoJGludGVyZmFjZSk7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBs
ZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAg
ICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlcigkaW50ZXJmYWNlLCAkZW51bWVy
YXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRvYmpl
Y3QtPkdlbmVyYXRlSGVhZGVyKCRpbnRlcmZhY2UpOwotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0
ZUltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMp
OworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlLCAkZW51bWVyYXRp
b25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVJbXBsZW1lbnRh
dGlvbigkaW50ZXJmYWNlKTsKICAgICB9CiB9CiAKQEAgLTgxMyw3ICs4MTMsNyBAQCBzdWIgR2Vu
ZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogCiAgICAgbXkgJHJlc3VsdCA9
ICIiOwogCi0gICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4g
cGFyc2UoRXhlY1N0YXRlJiwgSlNWYWx1ZSk7XG4iOworICAgICRyZXN1bHQgLj0gInRlbXBsYXRl
PHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTtcbiI7CiAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpO1xuXG4iOwogCiAgICAgZm9yZWFjaCBteSAk
ZW51bWVyYXRpb24gKEAkZW51bWVyYXRpb25zKSB7CkBAIC04MjIsMTcgKzgyMiwxNyBAQCBzdWIg
R2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICBteSAkY2xh
c3NOYW1lID0gR2V0RW51bWVyYXRpb25DbGFzc05hbWUoJGludGVyZmFjZSwgJG5hbWUpOwogCiAg
ICAgICAgICMgRklYTUU6IEEgbGl0dGxlIHVnbHkgdG8gaGF2ZSB0aGlzIGJlIGEgc2lkZSBlZmZl
Y3QgaW5zdGVhZCBvZiBhIHJldHVybiB2YWx1ZS4KLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxydW50aW1lL0pTU3RyaW5nLmg+Iik7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRp
bWUvSlNTdHJpbmcuaD4ifSA9IDE7CiAKICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0g
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGVudW1lcmF0aW9uKTsK
ICAgICAgICAgJHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwogCiAgICAgICAgICMgRGVjbGFyZSB0aGlzIGluc3RlYWQgb2YgdXNp
bmcgInN0YXRpYyIgYmVjYXVzZSBpdCBtYXkgYmUgdW51c2VkIGFuZCB3ZSBkb24ndCB3YW50IHdh
cm5pbmdzIGFib3V0IHRoYXQuCi0gICAgICAgICRyZXN1bHQgLj0gIkpTU3RyaW5nKiBqc1N0cmlu
Z1dpdGhDYWNoZShFeGVjU3RhdGUqLCAkY2xhc3NOYW1lKTtcblxuIjsKKyAgICAgICAgJHJlc3Vs
dCAuPSAiSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCAk
Y2xhc3NOYW1lKTtcblxuIjsKIAogICAgICAgICAjIFRha2UgYW4gRXhlY1N0YXRlKiBpbnN0ZWFk
IG9mIGFuIEV4ZWNTdGF0ZSYgdG8gbWF0Y2ggdGhlIGpzU3RyaW5nV2l0aENhY2hlIGZyb20gSlNT
dHJpbmcuaC4KICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGluc3RlYWQgb2Yg
RXhlY1N0YXRlKi4KLSAgICAgICAgJHJlc3VsdCAuPSAiSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1ZSlcbiI7Cisg
ICAgICAgICRyZXN1bHQgLj0gImlubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRpb25WYWx1ZSlcbiI7
CiAgICAgICAgICRyZXN1bHQgLj0gIntcbiI7CiAgICAgICAgICMgRklYTUU6IE1pZ2h0IGJlIG5p
Y2UgdG8gbWFrZSB0aGlzIGdsb2JhbCBiZSAiY29uc3QiLCBidXQgTmV2ZXJEZXN0cm95ZWQgZG9l
cyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhhdC4KICAgICAgICAgIyBGSVhNRTogTWlnaHQgYmUg
bmljZSB0byBtYWtlIHRoZSBlbnRpcmUgYXJyYXkgYmUgTmV2ZXJEZXN0cm95ZWQgaW5zdGVhZCBv
ZiBlYWNoIHZhbHVlLCBidXQgbm90IHN1cmUgd2hhdCB0aGUgc3ludGF4IGZvciB0aGF0IGlzLgpA
QCAtODU2LDEzICs4NTYsMTMgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlv
bkNvbnRlbnQKICAgICAgICAgJHJlc3VsdCAuPSAifVxuXG4iOwogCiAgICAgICAgICRyZXN1bHQg
Lj0gInRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8JGNsYXNzTmFtZT4ge1xuIjsKLSAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGNsYXNzTmFtZSB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfVxuIjsKKyAgICAgICAgJHJlc3Vs
dCAuPSAiICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosICRjbGFzc05hbWUgdmFsdWUpIHsgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH1cbiI7CiAgICAgICAgICRyZXN1bHQg
Lj0gIn07XG5cbiI7CiAKICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2UgVk0mIGluc3Rl
YWQgb2YgRXhlY1N0YXRlJi4KICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgdXNpbmcgdG9TdHJp
bmdPck51bGwgdG8gbWFrZSBleGNlcHRpb24gY2hlY2tpbmcgZmFzdGVyLgogICAgICAgICAjIEZJ
WE1FOiBDb25zaWRlciBmaW5kaW5nIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIG1hdGNoIGFnYWlu
c3QgYWxsIHRoZSBzdHJpbmdzIHF1aWNrbHkuCi0gICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRl
PD4gT3B0aW9uYWw8JGNsYXNzTmFtZT4gcGFyc2U8JGNsYXNzTmFtZT4oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSlcbiI7CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gaW5s
aW5lIE9wdGlvbmFsPCRjbGFzc05hbWU+IHBhcnNlPCRjbGFzc05hbWU+KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xu
IjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpO1xuIjsKICAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKEB7JGVudW1l
cmF0aW9uLT52YWx1ZXN9KSB7CkBAIC04NzgsMTEgKzg3OCwxMSBAQCBzdWIgR2VuZXJhdGVFbnVt
ZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudAogICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7
CiAKICAgICAgICAgIyBGSVhNRTogQSBsaXR0bGUgdWdseSB0byBoYXZlIHRoaXMgYmUgYSBzaWRl
IGVmZmVjdCBpbnN0ZWFkIG9mIGEgcmV0dXJuIHZhbHVlLgotICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01Db252ZXJ0LmgiKTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUNv
bnZlcnQuaCJ9ID0gMTsKIAotICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICRjbGFzc05h
bWUgY29udmVydDwkY2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxu
IjsKKyAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiBpbmxpbmUgJGNsYXNzTmFtZSBjb252
ZXJ0PCRjbGFzc05hbWU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsKLSAgICAgICAgJHJlc3VsdCAuPSAiICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpO1xuIjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIjsKICAgICAgICAgJHJlc3VsdCAu
PSAiICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8JGNsYXNzTmFtZT4oc3RhdGUsIHZhbHVlKTtcbiI7
CiAgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHtcbiI7CkBA
IC05NjMsMTQgKzk2MywxNSBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25D
b250ZW50CiAgICAgICAgICRyZXN1bHQgLj0gIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4i
IGlmICRjb25kaXRpb25hbFN0cmluZzsKIAogICAgICAgICBteSAkY2xhc3NOYW1lID0gR2V0RGlj
dGlvbmFyeUNsYXNzTmFtZSgkaW50ZXJmYWNlLCAkbmFtZSk7CisgICAgICAgICRoZWFkZXJJbmNs
dWRlc3skaW50ZXJmYWNlLT5uYW1lIC4gIi5oIn0gPSAxOwogCiAgICAgICAgICMgRklYTUU6IEEg
bGl0dGxlIHVnbHkgdG8gaGF2ZSB0aGlzIGJlIGEgc2lkZSBlZmZlY3QgaW5zdGVhZCBvZiBhIHJl
dHVybiB2YWx1ZS4KLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQ29udmVydC5oIik7
CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01Db252ZXJ0LmgifSA9IDE7CiAKICAgICAg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNlcy1kaWN0aW9uYXJ5Ci0gICAg
ICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gT3B0aW9uYWw8JGNsYXNzTmFtZT4gY29udmVydERp
Y3Rpb25hcnk8JGNsYXNzTmFtZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSlcbiI7
CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPCRjbGFzc05h
bWU+IGNvbnZlcnREaWN0aW9uYXJ5PCRjbGFzc05hbWU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsKLSAgICAg
ICAgJHJlc3VsdCAuPSAiICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7XG4iOworICAgICAgICAkcmVz
dWx0IC49ICIgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpO1xuIjsKICAgICAgICAgJHJlc3Vs
dCAuPSAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIjsK
ICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpO1xuIjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGF1dG8qIG9i
amVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpO1xu
IjsKQEAgLTk4Miw3ICs5ODMsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRp
b25Db250ZW50CiAKICAgICAgICAgIyAyLiBJZiBWIGlzIGEgbmF0aXZlIFJlZ0V4cCBvYmplY3Qs
IHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICMgRklYTUU6IFRoaXMgUmVnRXhwIHNw
ZWNpYWwgaGFuZGxpbmcgaXMgbGlrZWx5IHRvIGdvIGF3YXkgaW4gdGhlIHNwZWNpZmljYXRpb24u
Ci0gICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+
dHlwZSgpID09IFJlZ0V4cE9iamVjdFR5cGUpKSB7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIg
ICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9i
amVjdFR5cGUpKSB7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgICAg
IHJldHVybiBOdWxsb3B0O1xuIjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIH1cbiI7CkBAIC0x
MDE0LDcgKzEwMTUsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250
ZW50CiAgICAgICAgICAgICAgICAgbXkgJGtleSA9ICRtZW1iZXItPm5hbWU7CiAKICAgICAgICAg
ICAgICAgICAjIDUuMi4gTGV0IHZhbHVlIGJlIGFuIEVDTUFTY3JpcHQgdmFsdWUsIGRlcGVuZGlu
ZyBvbiBUeXBlKFYpOgotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBKU1ZhbHVlICR7
a2V5fVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIke2tleX1cIikpO1xu
IjsKKyAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgSlNDOjpKU1ZhbHVlICR7a2V5fVZh
bHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJHtrZXl9XCIp
KTtcbiI7CiAKICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVG
cm9tU2lnbmF0dXJlKCRpbnRlcmZhY2UsICRtZW1iZXIpOwogICAgICAgICAgICAgICAgIGlmICgk
bWVtYmVyLT5pc09wdGlvbmFsICYmICFkZWZpbmVkICRtZW1iZXItPmRlZmF1bHQpIHsKQEAgLTEw
MjcsNyArMTAyOCw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRl
bnQKICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKCEke2tleX1WYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7XG4iOwogICAgICAgICAgICAgICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ug
d2lsbCB3YW50IHRoaXMgdG8gc2hhcmUgYSBsb3QgbW9yZSBjb2RlIHdpdGggSlNWYWx1ZVRvTmF0
aXZlLgogICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgk
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHt0eXBl
fS5oIik7CisgICAgICAgICAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlMke3R5cGV9Lmgi
fSA9IDE7CiAgICAgICAgICAgICAgICAgICAgIGRpZSAiRGljdGlvbmFyeSBtZW1iZXJzIG9mIG5v
bi1udWxsYWJsZSB3cmFwcGVyIHR5cGVzIG11c3QgYmUgbWFya2VkIGFzIHJlcXVpcmVkIiBpZiAh
JG1lbWJlci0+aXNOdWxsYWJsZSAmJiAkbWVtYmVyLT5pc09wdGlvbmFsOwogICAgICAgICAgICAg
ICAgICAgICBteSAkbnVsbGFibGVQYXJhbWV0ZXIgPSAkbWVtYmVyLT5pc051bGxhYmxlID8gIklz
TnVsbGFibGU6OlllcyIgOiAiSXNOdWxsYWJsZTo6Tm8iOwogICAgICAgICAgICAgICAgICAgICAk
cmVzdWx0IC49ICIgICAgICAgICRrZXkgPSBjb252ZXJ0V3JhcHBlclR5cGU8JHR5cGUsIEpTJHt0
eXBlfT4oc3RhdGUsICR7a2V5fVZhbHVlLCAkbnVsbGFibGVQYXJhbWV0ZXIpO1xuIjsKQEAgLTEw
NzksNyArMTA4MCw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRl
bnQKIAogc3ViIEdlbmVyYXRlSGVhZGVyCiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2Up
ID0gQF87CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0
aW9uYXJpZXMpID0gQF87CiAKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5h
bWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKQEAgLTE1NzEsNiAr
MTU3Miw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAifTtcbiIpOwogICAgIH0KIAorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRW51
bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQoJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucykp
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0
aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSk7CisKICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygk
aW50ZXJmYWNlKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25k
aXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKQEAgLTIyNTcsNyArMjI2
MSw3IEBAIHN1YiBhZGRVbnNjb3BhYmxlUHJvcGVydGllcwogCiBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAk
ZGljdGlvbmFyaWVzKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlKSA9IEBfOwog
CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwogICAgIG15ICRjbGFz
c05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CkBAIC0yMjg5LDkgKzIyOTMsNiBAQCBzdWIgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG51c2luZyBuYW1l
c3BhY2UgSlNDO1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFjZSBXZWJD
b3JlIHtcblxuIik7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFbnVtZXJhdGlv
bkltcGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKSk7Ci0gICAg
cHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVu
dCgkaW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSk7Ci0KICAgICBteSBAZnVuY3Rpb25zID0gQHsk
aW50ZXJmYWNlLT5mdW5jdGlvbnN9OwogICAgIHB1c2goQGZ1bmN0aW9ucywgQHskaW50ZXJmYWNl
LT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSkgaWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRp
bnRlcmZhY2UpOwogICAgIHB1c2goQGZ1bmN0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUtPmZ1bmN0aW9uc30pIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKQEAgLTQxMjYsNyAr
NDEyNyw3IEBAIHN1YiBHZW5lcmF0ZVJldHVyblBhcmFtZXRlcnMKIAogc3ViIEdlbmVyYXRlQ2Fs
bGJhY2tIZWFkZXIKIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSkgPSBAXzsKKyAgICBt
eSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcykgPSBA
XzsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKICAgICBteSAk
Y2xhc3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOwpAQCAtNDE4NSw2ICs0MTg2LDkgQEAgc3Vi
IEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbnRlcmZh
Y2VOYW1lJik7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgJGludGVyZmFjZU5hbWUqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH1cblxuIik7CiAKKyAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250
ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQoJGludGVyZmFjZSwgJGRp
Y3Rpb25hcmllcykpOworCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVcbiIpOwogCiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0
b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7CkBAIC00MTkzLDcgKzQx
OTcsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogCiBzdWIgR2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uCiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJh
dGlvbnMpID0gQF87CisgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0gQF87CiAKICAgICBt
eSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkgJHZpc2libGVJbnRl
cmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRl
cmZhY2UpOwpAQCAtNDIxMCw4ICs0MjE0LDYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbgogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG51c2luZyBuYW1lc3BhY2UgSlNDO1xu
XG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7
CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0
aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKSk7Ci0KICAgICAjIENvbnN0cnVj
dG9yCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7Y2xhc3NOYW1lfShK
U09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsK
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2FsbGJhY2tOZWVkc09w
ZXJhdG9yRXF1YWx9KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDQ4NmZlNTIwOTM3YzJlMDQxMzhmZjE1ZTFh
ZWZlOWNhNWU0ZDcwZTEuLjA4NmVjOGRiMDdjY2I2OTMzMmFmY2YzNTdjODg5MzAyOWQ1M2M0NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKQEAgLTQ0
LDcgKzQzLDYgQEAKICNpbmNsdWRlICJKU0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJKU0ZldGNoUmVxdWVzdC5oIgotI2luY2x1ZGUgIkpTTm9kZS5o
IgogI2luY2x1ZGUgIkpTU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50LmgiCiAj
aW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKQEAgLTY3LDcgKzY1LDYgQEAKICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcu
aD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KQEAgLTky
LDgzMyArODksNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEV4ZWNTdGF0ZSYsIEpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJh
dGlvblZhbHVlcygpOwotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwg
VGVzdE9iajo6RW51bVR5cGUpOwotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0
YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bVR5cGUgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAg
ZW1wdHlTdHJpbmcoKSwKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJlbnVtVmFsdWUxIiksCi0gICAg
ICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMiIpLAotICAgICAgICBBU0NJSUxpdGVyYWwoIkVu
dW1WYWx1ZTMiKSwKLSAgICB9OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90
PihUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpID09IDAsICJUZXN0T2JqOjpFbnVtVHlw
ZTo6RW1wdHlTdHJpbmcgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEpID09IDEs
ICJUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMSBpcyBub3QgMSBhcyBleHBlY3RlZCIpOwot
ICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtVHlwZTo6
RW51bVZhbHVlMikgPT0gMiwgIlRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUyIGlzIG5vdCAy
IGFzIGV4cGVjdGVkIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUzKSA9PSAzLCAiVGVzdE9iajo6RW51bVR5cGU6OkVu
dW1WYWx1ZTMgaXMgbm90IDMgYXMgZXhwZWN0ZWQiKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwotfQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVl
VHJhaXRzPFRlc3RPYmo6OkVudW1UeXBlPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpT
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVt
VHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQot
fTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gcGFyc2U8VGVzdE9i
ajo6RW51bVR5cGU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmlu
Z1ZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbXB0
eVN0cmluZzsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImVudW1WYWx1ZTEiKQotICAgICAgICBy
ZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7Ci0gICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJFbnVtVmFsdWUyIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVt
VmFsdWUyOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMyIpCi0gICAgICAgIHJl
dHVybiBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMzsKLSAgICByZXR1cm4gTnVsbG9wdDsK
LX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtVHlwZSBjb252ZXJ0PFRlc3RPYmo6OkVudW1U
eXBlPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBl
eHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpCi17Ci0gICAgcmV0
dXJuICJcIlwiLCBcImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wi
IjsKLX0KLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6
Ok9wdGlvbmFsKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3Rh
dGUsIFRlc3RPYmo6Ok9wdGlvbmFsIGVudW1lcmF0aW9uVmFsdWUpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Ci0gICAgICAgIGVtcHR5U3Ry
aW5nKCksCi0gICAgICAgIEFTQ0lJTGl0ZXJhbCgiT3B0aW9uYWxWYWx1ZTEiKSwKLSAgICAgICAg
QVNDSUlMaXRlcmFsKCJPcHRpb25hbFZhbHVlMiIpLAotICAgICAgICBBU0NJSUxpdGVyYWwoIk9w
dGlvbmFsVmFsdWUzIiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNp
emVfdD4oVGVzdE9iajo6T3B0aW9uYWw6OkVtcHR5U3RyaW5nKSA9PSAwLCAiVGVzdE9iajo6T3B0
aW9uYWw6OkVtcHR5U3RyaW5nIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Ci0gICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVl
MSkgPT0gMSwgIlRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMSBpcyBub3QgMSBhcyBl
eHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2Jq
OjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTIpID09IDIsICJUZXN0T2JqOjpPcHRpb25hbDo6T3B0
aW9uYWxWYWx1ZTIgaXMgbm90IDIgYXMgZXhwZWN0ZWQiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0
YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUzKSA9PSAz
LCAiVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUzIGlzIG5vdCAzIGFzIGV4cGVjdGVk
Iik7Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBX
VEZfQVJSQVlfTEVOR1RIKHZhbHVlcykpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0K
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpPcHRpb25hbD4gewot
ICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6T3B0aW9uYWwgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVz
dE9iajo6T3B0aW9uYWw+IHBhcnNlPFRlc3RPYmo6Ok9wdGlvbmFsPihFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIGlmIChzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBUZXN0T2JqOjpPcHRpb25hbDo6RW1wdHlTdHJpbmc7Ci0gICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJPcHRpb25hbFZhbHVlMSIpCi0gICAgICAgIHJldHVybiBUZXN0T2JqOjpPcHRpb25hbDo6
T3B0aW9uYWxWYWx1ZTE7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJPcHRpb25hbFZhbHVlMiIp
Ci0gICAgICAgIHJldHVybiBUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTI7Ci0gICAg
aWYgKHN0cmluZ1ZhbHVlID09ICJPcHRpb25hbFZhbHVlMyIpCi0gICAgICAgIHJldHVybiBUZXN0
T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTM7Ci0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0K
LXRlbXBsYXRlPD4gVGVzdE9iajo6T3B0aW9uYWwgY29udmVydDxUZXN0T2JqOjpPcHRpb25hbD4o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpPcHRpb25hbD4oKQotewotICAgIHJldHVybiAi
XCJcIiwgXCJPcHRpb25hbFZhbHVlMVwiLCBcIk9wdGlvbmFsVmFsdWUyXCIsIFwiT3B0aW9uYWxW
YWx1ZTNcIiI7Ci19Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBB
bHRlcm5hdGVFbnVtTmFtZSk7Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3Rh
dGUqIHN0YXRlLCBBbHRlcm5hdGVFbnVtTmFtZSBlbnVtZXJhdGlvblZhbHVlKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewotICAgICAgICBB
U0NJSUxpdGVyYWwoImVudW1WYWx1ZTEiKSwKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJFbnVtVmFs
dWUyIiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oQWx0
ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTEpID09IDAsICJBbHRlcm5hdGVFbnVtTmFtZTo6RW51
bVZhbHVlMSBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihBbHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVlMikgPT0gMSwgIkFsdGVy
bmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUyIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7Ci0gICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVO
R1RIKHZhbHVlcykpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVz
W3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0KLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxBbHRlcm5hdGVFbnVtTmFtZT4gewotICAgIHN0YXRpYyBK
U1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiwgQWx0ZXJuYXRlRW51bU5hbWUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCB2YWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJuYXRlRW51bU5h
bWU+IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiZW51bVZhbHVlMSIpCi0gICAgICAgIHJldHVybiBB
bHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVlMTsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVu
dW1WYWx1ZTIiKQotICAgICAgICByZXR1cm4gQWx0ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTI7
Ci0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gQWx0ZXJuYXRlRW51bU5hbWUg
Y29udmVydDxBbHRlcm5hdGVFbnVtTmFtZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8QWx0ZXJuYXRl
RW51bU5hbWU+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0g
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8
PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxBbHRlcm5hdGVF
bnVtTmFtZT4oKQotewotICAgIHJldHVybiAiXCJlbnVtVmFsdWUxXCIsIFwiRW51bVZhbHVlMlwi
IjsKLX0KLQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotCi1KU1N0cmluZyoganNTdHJpbmdXaXRo
Q2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUEpOwotCi1KU1N0cmluZyoganNTdHJpbmdX
aXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUEgZW51bWVyYXRpb25WYWx1
ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9
IHsKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJBIiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6RW51bUE6OkEpID09IDAsICJUZXN0T2JqOjpF
bnVtQTo6QSBpcyBub3QgMCBhcyBleHBlY3RlZCIpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxz
aXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVU
cmFpdHM8VGVzdE9iajo6RW51bUE+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1
ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1BIHZh
bHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10
ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1BPiBwYXJzZTxUZXN0T2JqOjpFbnVtQT4o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHN0cmluZ1ZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkEi
KQotICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bUE6OkE7Ci0gICAgcmV0dXJuIE51bGxvcHQ7
Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6RW51bUEgY29udmVydDxUZXN0T2JqOjpFbnVtQT4o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6RW51bUE+KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
dGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQT4oKQotewotICAgIHJldHVybiAiXCJBXCIi
OwotfQotCi0jZW5kaWYKLQotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMikKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6
OkVudW1CKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUs
IFRlc3RPYmo6OkVudW1CIGVudW1lcmF0aW9uVmFsdWUpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Ci0gICAgICAgIEFTQ0lJTGl0ZXJhbCgi
QiIpLAotICAgIH07Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RP
Ymo6OkVudW1COjpCKSA9PSAwLCAiVGVzdE9iajo6RW51bUI6OkIgaXMgbm90IDAgYXMgZXhwZWN0
ZWQiKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8
IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwot
fQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1CPiB7Ci0g
ICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQiB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2Jq
OjpFbnVtQj4gcGFyc2U8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0
ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJCIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6
OkVudW1COjpCOwotICAgIHJldHVybiBOdWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+IFRlc3RPYmo6
OkVudW1CIGNvbnZlcnQ8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RP
Ymo6OkVudW1CPihzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Ci19Ci0KLXRlbXBsYXRl
PD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUI+KCkKLXsKLSAgICByZXR1cm4gIlwiQlwiIjsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLUpTU3RyaW5nKiBqc1N0cmlu
Z1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQyk7Ci0KLUpTU3RyaW5nKiBqc1N0
cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQyBlbnVtZXJhdGlv
blZhbHVlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVl
c1tdID0gewotICAgICAgICBBU0NJSUxpdGVyYWwoIkMiKSwKLSAgICB9OwotICAgIHN0YXRpY19h
c3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtQzo6QykgPT0gMCwgIlRlc3RP
Ymo6OkVudW1DOjpDIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Ci0gICAgQVNTRVJUKHN0YXRpY19j
YXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcykp
OwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0
PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKLX0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNW
YWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQz4gewotICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlK
U1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6RW51
bUMgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07
Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlPFRlc3RPYmo6OkVu
dW1DPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gc3RyaW5n
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9
PSAiQyIpCi0gICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtQzo6QzsKLSAgICByZXR1cm4gTnVs
bG9wdDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtQyBjb252ZXJ0PFRlc3RPYmo6OkVu
dW1DPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtQz4oc3RhdGUsIHZhbHVlKTsK
LSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1DPigpCi17Ci0gICAgcmV0dXJuICJc
IkNcIiI7Ci19Ci0KLSNlbmRpZgotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0
YXRlKiwgVGVzdE9iajo6S2luZCk7Ci0KLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVj
U3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpLaW5kIGVudW1lcmF0aW9uVmFsdWUpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Ci0gICAgICAgIEFT
Q0lJTGl0ZXJhbCgicXVpY2siKSwKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJkZWFkIiksCi0gICAg
fTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6S2luZDo6
UXVpY2spID09IDAsICJUZXN0T2JqOjpLaW5kOjpRdWljayBpcyBub3QgMCBhcyBleHBlY3RlZCIp
OwotICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpLaW5kOjpE
ZWFkKSA9PSAxLCAiVGVzdE9iajo6S2luZDo6RGVhZCBpcyBub3QgMSBhcyBleHBlY3RlZCIpOwot
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FS
UkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7Ci19Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2luZD4gewotICAgIHN0YXRp
YyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdE9iajo6S2luZCB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpLaW5kPiBw
YXJzZTxUZXN0T2JqOjpLaW5kPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlm
IChzdHJpbmdWYWx1ZSA9PSAicXVpY2siKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6S2luZDo6
UXVpY2s7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJkZWFkIikKLSAgICAgICAgcmV0dXJuIFRl
c3RPYmo6OktpbmQ6OkRlYWQ7Ci0gICAgcmV0dXJuIE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4g
VGVzdE9iajo6S2luZCBjb252ZXJ0PFRlc3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
PFRlc3RPYmo6OktpbmQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQp
KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0KLQotdGVt
cGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0
T2JqOjpLaW5kPigpCi17Ci0gICAgcmV0dXJuICJcInF1aWNrXCIsIFwiZGVhZFwiIjsKLX0KLQot
SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6OlNpemUpOwot
Ci1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6
U2l6ZSBlbnVtZXJhdGlvblZhbHVlKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZhbHVlc1tdID0gewotICAgICAgICBBU0NJSUxpdGVyYWwoInNtYWxsIiksCi0g
ICAgICAgIEFTQ0lJTGl0ZXJhbCgibXVjaC1tdWNoLWxhcmdlciIpLAotICAgIH07Ci0gICAgc3Rh
dGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OlNpemU6OlNtYWxsKSA9PSAw
LCAiVGVzdE9iajo6U2l6ZTo6U21hbGwgaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6U2l6ZTo6TXVjaE11Y2hMYXJn
ZXIpID09IDEsICJUZXN0T2JqOjpTaXplOjpNdWNoTXVjaExhcmdlciBpcyBub3QgMSBhcyBleHBl
Y3RlZCIpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUp
IDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7
Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6U2l6ZT4gewot
ICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6U2l6ZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2Jq
OjpTaXplPiBwYXJzZTxUZXN0T2JqOjpTaXplPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAic21hbGwiKQotICAgICAgICByZXR1cm4gVGVzdE9i
ajo6U2l6ZTo6U21hbGw7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJtdWNoLW11Y2gtbGFyZ2Vy
IikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNpemU6Ok11Y2hNdWNoTGFyZ2VyOwotICAgIHJl
dHVybiBOdWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OlNpemUgY29udmVydDxUZXN0
T2JqOjpTaXplPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpTaXplPihzdGF0ZSwgdmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0LnZhbHVlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6U2l6ZT4oKQotewotICAgIHJldHVy
biAiXCJzbWFsbFwiLCBcIm11Y2gtbXVjaC1sYXJnZXJcIiI7Ci19Ci0KLUpTU3RyaW5nKiBqc1N0
cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpDb25maWRlbmNlKTsKLQotSlNTdHJp
bmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OkNvbmZpZGVu
Y2UgZW51bWVyYXRpb25WYWx1ZSkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB2YWx1ZXNbXSA9IHsKLSAgICAgICAgQVNDSUlMaXRlcmFsKCJoaWdoIiksCi0gICAg
ICAgIEFTQ0lJTGl0ZXJhbCgia2luZGEtbG93IiksCi0gICAgfTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6Q29uZmlkZW5jZTo6SGlnaCkgPT0gMCwgIlRl
c3RPYmo6OkNvbmZpZGVuY2U6OkhpZ2ggaXMgbm90IDAgYXMgZXhwZWN0ZWQiKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6Q29uZmlkZW5jZTo6S2luZGFM
b3cpID09IDEsICJUZXN0T2JqOjpDb25maWRlbmNlOjpLaW5kYUxvdyBpcyBub3QgMSBhcyBleHBl
Y3RlZCIpOwotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUp
IDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7
Ci19Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6Q29uZmlkZW5j
ZT4gewotICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6Q29uZmlkZW5jZSB2YWx1ZSkgeyByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRp
b25hbDxUZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZTxUZXN0T2JqOjpDb25maWRlbmNlPihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiaGlnaCIp
Ci0gICAgICAgIHJldHVybiBUZXN0T2JqOjpDb25maWRlbmNlOjpIaWdoOwotICAgIGlmIChzdHJp
bmdWYWx1ZSA9PSAia2luZGEtbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkNvbmZpZGVu
Y2U6OktpbmRhTG93OwotICAgIHJldHVybiBOdWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+IFRlc3RP
Ymo6OkNvbmZpZGVuY2UgY29udmVydDxUZXN0T2JqOjpDb25maWRlbmNlPihFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byByZXN1bHQg
PSBwYXJzZTxUZXN0T2JqOjpDb25maWRlbmNlPihzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJ
S0VMWSghcmVzdWx0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2Nv
cGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnZhbHVl
KCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRp
b25WYWx1ZXM8VGVzdE9iajo6Q29uZmlkZW5jZT4oKQotewotICAgIHJldHVybiAiXCJoaWdoXCIs
IFwia2luZGEtbG93XCIiOwotfQotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rp
b25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBib29sIGlzTnVs
bE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBhdXRvKiBvYmpl
Y3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxs
b3B0OwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09
IFJlZ0V4cE9iamVjdFR5cGUpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhy
b3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBKU1ZhbHVlIGFu
eVR5cGVkZWZWYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDog
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVR5
cGVkZWZWYWx1ZSIpKTsKLSAgICBKU0M6OkpTVmFsdWUgYW55VHlwZWRlZlZhbHVlOwotICAgIGlm
ICghYW55VHlwZWRlZlZhbHVlVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBhbnlUeXBl
ZGVmVmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVR5cGVkZWZWYWx1ZVZh
bHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
LSAgICB9IGVsc2UKLSAgICAgICAgYW55VHlwZWRlZlZhbHVlID0ganNVbmRlZmluZWQoKTsKLSAg
ICBKU1ZhbHVlIGFueVZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
YW55VmFsdWUiKSk7Ci0gICAgSlNDOjpKU1ZhbHVlIGFueVZhbHVlOwotICAgIGlmICghYW55VmFs
dWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGFueVZhbHVlID0gY29udmVydDxKU0M6
OkpTVmFsdWU+KHN0YXRlLCBhbnlWYWx1ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYW55VmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVmFsdWUgYm9vbGVhbldpdGhEZWZhdWx0VmFsdWUgPSBp
c051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhEZWZhdWx0IikpOwotICAg
IGJvb2wgYm9vbGVhbldpdGhEZWZhdWx0OwotICAgIGlmICghYm9vbGVhbldpdGhEZWZhdWx0VmFs
dWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29sZWFuV2l0aERlZmF1bHQgPSBjb252ZXJ0
PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJv
b2xlYW5XaXRoRGVmYXVsdCA9IGZhbHNlOwotICAgIEpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXRE
ZWZhdWx0IikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFuV2l0
aG91dERlZmF1bHQ7Ci0gICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4o
c3RhdGUsIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBkaWN0aW9u
YXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFy
eU1lbWJlciIpKTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRU
b2xlcmF0ZU51bGw+OjpPcHRpb25hbFZhbHVlIGRpY3Rpb25hcnlNZW1iZXI7Ci0gICAgaWYgKCFk
aWN0aW9uYXJ5TWVtYmVyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBkaWN0aW9uYXJ5
TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRU
b2xlcmF0ZU51bGw+KHN0YXRlLCBkaWN0aW9uYXJ5TWVtYmVyVmFsdWUpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVl
IGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBq
c1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKTsKLSAgICBUZXN0T2JqOjpF
bnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFlbnVtZXJhdGlv
blZhbHVlV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGVudW1lcmF0
aW9uVmFsdWVXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBl
bnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVudW1lcmF0
aW9uVmFsdWVXaXRoRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwotICAg
IEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3Ry
aW5nRGVmYXVsdCIpKTsKLSAgICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlV2l0
aEVtcHR5U3RyaW5nRGVmYXVsdDsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlT
dHJpbmdEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBlbnVtZXJhdGlvblZh
bHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0
YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQgPSBUZXN0T2Jq
OjpFbnVtVHlwZTo6RW1wdHlTdHJpbmc7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0
aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJh
dGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPFRlc3RPYmo6OkVudW1U
eXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQ7Ci0gICAg
aWYgKCFlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8VGVzdE9i
ajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHRWYWx1ZSk7
Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAg
fQotICAgIEpTVmFsdWUgaW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImludGVnZXIiKSk7Ci0gICAgQ29udmVydGVyPGludDMyX3Q+OjpPcHRpb25hbFZhbHVlIGlu
dGVnZXI7Ci0gICAgaWYgKCFpbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBp
bnRlZ2VyID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlclZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgaW50MzJf
dCBpbnRlZ2VyV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFpbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8aW50
MzJfdD4oc3RhdGUsIGludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgaW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKLSAgICBKU1ZhbHVlIGxhcmdl
SW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdl
ciIpKTsKLSAgICBDb252ZXJ0ZXI8aW50NjRfdD46Ok9wdGlvbmFsVmFsdWUgbGFyZ2VJbnRlZ2Vy
OwotICAgIGlmICghbGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBs
YXJnZUludGVnZXIgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRW
YWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVm
YXVsdCIpKTsKLSAgICBpbnQ2NF90IGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlmICgh
bGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGxh
cmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQ2NF90PihzdGF0ZSwgbGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxh
cmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKLSAgICBKU1ZhbHVlIG51bGxhYmxlTm9kZVZhbHVl
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxlTm9kZSIpKTsKLSAgICBO
b2RlKiBudWxsYWJsZU5vZGU7Ci0gICAgaWYgKCFudWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIG51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBK
U05vZGU+KHN0YXRlLCBudWxsYWJsZU5vZGVWYWx1ZSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbnVsbGFibGVOb2RlID0gbnVsbHB0cjsKLSAgICBKU1ZhbHVlIHJlc3RyaWN0ZWRE
b3VibGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRG91
YmxlIikpOwotICAgIENvbnZlcnRlcjxkb3VibGU+OjpPcHRpb25hbFZhbHVlIHJlc3RyaWN0ZWRE
b3VibGU7Ci0gICAgaWYgKCFyZXN0cmljdGVkRG91YmxlVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICByZXN0cmljdGVkRG91YmxlID0gY29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmlj
dGVkRG91YmxlVmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUg
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOwotICAgIGRvdWJsZSByZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFyZXN0cmljdGVkRG91YmxlV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3RyaWN0ZWREb3VibGVXaXRo
RGVmYXVsdCA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3Ry
aWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IDA7Ci0gICAgSlNWYWx1ZSByZXN0cmljdGVkRmxvYXRW
YWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRmxvYXQiKSk7
Ci0gICAgQ29udmVydGVyPGZsb2F0Pjo6T3B0aW9uYWxWYWx1ZSByZXN0cmljdGVkRmxvYXQ7Ci0g
ICAgaWYgKCFyZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJl
c3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnQ8ZmxvYXQ+KHN0YXRlLCByZXN0cmljdGVkRmxvYXRWYWx1
ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXN0cmljdGVkRmxv
YXRXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDog
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3Ry
aWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwotICAgIGZsb2F0IHJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0OwotICAgIGlmICghcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0gY29udmVydDxm
bG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93
Tm9uRmluaXRlOjpObyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
TnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0
ID0gMDsKLSAgICBKU1ZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3MiKSk7Ci0gICAgQ29udmVydGVyPFZl
Y3RvcjxTdHJpbmc+Pjo6T3B0aW9uYWxWYWx1ZSBzZXF1ZW5jZU9mU3RyaW5nczsKLSAgICBpZiAo
IXNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBzZXF1ZW5j
ZU9mU3RyaW5ncyA9IGNvbnZlcnQ8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBzZXF1ZW5jZU9mU3Ry
aW5nc1ZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIpKTsKLSAgICBD
b252ZXJ0ZXI8aW50OF90Pjo6T3B0aW9uYWxWYWx1ZSBzbWFsbEludGVnZXJDbGFtcGVkOwotICAg
IGlmICghc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
c21hbGxJbnRlZ2VyQ2xhbXBlZCA9IGNvbnZlcnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2Vy
Q2xhbXBlZFZhbHVlLCBDbGFtcCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgc21hbGxJbnRlZ2VyV2l0aERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJXaXRo
RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8aW50OF90Pjo6T3B0aW9uYWxWYWx1ZSBzbWFsbElu
dGVnZXJXaXRoRGVmYXVsdDsKLSAgICBpZiAoIXNtYWxsSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUu
aXNVbmRlZmluZWQoKSkgewotICAgICAgICBzbWFsbEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZl
cnQ8aW50OF90PihzdGF0ZSwgc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9w
dCk7Ci0gICAgfQotICAgIEpTVmFsdWUgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVn
ZXJFbmZvcmNlZFJhbmdlIikpOwotICAgIENvbnZlcnRlcjx1aW50OF90Pjo6T3B0aW9uYWxWYWx1
ZSBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2U7Ci0gICAgaWYgKCFzbWFsbFVuc2ln
bmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNt
YWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUs
IHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlLCBFbmZvcmNlUmFuZ2UpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0K
LSAgICBKU1ZhbHVlIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0
IikpOwotICAgIHVpbnQ4X3Qgc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdDsKLSAgICBp
ZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQ4
X3Q+KHN0YXRlLCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwotICAgIH0gZWxzZQotICAgICAgICBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0
ID0gMDsKLSAgICBKU1ZhbHVlIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aERlZmF1bHQiKSk7Ci0gICAgU3RyaW5nIHN0cmlu
Z1dpdGhEZWZhdWx0OwotICAgIGlmICghc3RyaW5nV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7Ci0gICAgICAgIHN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydDxTdHJpbmc+KHN0YXRl
LCBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5nV2l0aERlZmF1
bHQgPSAiZGVmYXVsdFN0cmluZyI7Ci0gICAgSlNWYWx1ZSBzdHJpbmdXaXRob3V0RGVmYXVsdFZh
bHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhvdXREZWZhdWx0
IikpOwotICAgIENvbnZlcnRlcjxTdHJpbmc+OjpPcHRpb25hbFZhbHVlIHN0cmluZ1dpdGhvdXRE
ZWZhdWx0OwotICAgIGlmICghc3RyaW5nV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIHN0cmluZ1dpdGhvdXREZWZhdWx0ID0gY29udmVydDxTdHJpbmc+KHN0YXRl
LCBzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWRE
b3VibGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRE
b3VibGUiKSk7Ci0gICAgQ29udmVydGVyPGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgdW5yZXN0cmlj
dGVkRG91YmxlOwotICAgIGlmICghdW5yZXN0cmljdGVkRG91YmxlVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICB1bnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUs
IHVucmVzdHJpY3RlZERvdWJsZVZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0g
ICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpOwot
ICAgIGRvdWJsZSB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdDsKLSAgICBpZiAoIXVucmVz
dHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1
bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olll
cyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gMDsKLSAg
ICBKU1ZhbHVlIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXQiKSk7Ci0gICAgQ29udmVydGVyPGZsb2F0Pjo6T3B0
aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdDsKLSAgICBpZiAoIXVucmVzdHJpY3RlZEZsb2F0
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZl
cnQ8ZmxvYXQ+KHN0YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6WWVzKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCIpKTsKLSAgICBmbG9hdCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0OwotICAg
IGlmICghdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8ZmxvYXQ+KHN0
YXRlLCB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmlu
aXRlOjpZZXMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwotICAgIH0gZWxzZQotICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0g
MDsKLSAgICBKU1ZhbHVlIHVuc2lnbmVkSW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlciIpKTsKLSAgICBDb252ZXJ0ZXI8dWludDMyX3Q+
OjpPcHRpb25hbFZhbHVlIHVuc2lnbmVkSW50ZWdlcjsKLSAgICBpZiAoIXVuc2lnbmVkSW50ZWdl
clZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWRJbnRlZ2VyID0gY29udmVy
dDx1aW50MzJfdD4oc3RhdGUsIHVuc2lnbmVkSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAg
ICB9Ci0gICAgSlNWYWx1ZSB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpOwot
ICAgIHVpbnQzMl90IHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlmICghdW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVuc2ln
bmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDx1aW50MzJfdD4oc3RhdGUsIHVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAg
ICB1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IDA7Ci0gICAgSlNWYWx1ZSB1bnNpZ25lZExh
cmdlSW50ZWdlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVk
TGFyZ2VJbnRlZ2VyIikpOwotICAgIENvbnZlcnRlcjx1aW50NjRfdD46Ok9wdGlvbmFsVmFsdWUg
dW5zaWduZWRMYXJnZUludGVnZXI7Ci0gICAgaWYgKCF1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWRMYXJnZUludGVnZXIgPSBjb252ZXJ0
PHVpbnQ2NF90PihzdGF0ZSwgdW5zaWduZWRMYXJnZUludGVnZXJWYWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7
Ci0gICAgfQotICAgIEpTVmFsdWUgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVl
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0
aERlZmF1bHQiKSk7Ci0gICAgdWludDY0X3QgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVs
dDsKLSAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252
ZXJ0PHVpbnQ2NF90PihzdGF0ZSwgdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgdW5zaWduZWRMYXJnZUludGVnZXJX
aXRoRGVmYXVsdCA9IDA7Ci0gICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnkgeyBXVEZNb3Zl
KGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVm
YXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhvdXRE
ZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRo
b3V0RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpLCBXVEZNb3ZlKHJlc3RyaWN0
ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUocmVzdHJpY3Rl
ZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVs
dCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWRGbG9hdCks
IFdURk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3Rl
ZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlckNsYW1wZWQpLCBXVEZNb3Zl
KHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlckVu
Zm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBX
VEZNb3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5z
aWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1v
dmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1v
dmUodW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSksIFdURk1vdmUoYW55VmFsdWUpLCBXVEZN
b3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OwotfQotCi10
ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJh
dGVOdWxsPiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5v
dFRvbGVyYXRlTnVsbD4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpOwotICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0
ciA6IHZhbHVlLmdldE9iamVjdCgpOwotICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmlu
ZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShv
YmplY3QgJiYgb2JqZWN0LT50eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxv
cHQ7Ci0gICAgfQotICAgIEpTVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpOwotICAg
IENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHQ7Ci0g
ICAgaWYgKCFib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5X
aXRob3V0RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBub25OdWxsYWJsZU5vZGVWYWx1ZSA9
IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUiKSk7Ci0gICAg
Tm9kZSogbm9uTnVsbGFibGVOb2RlOwotICAgIGlmICghbm9uTnVsbGFibGVOb2RlVmFsdWUuaXNV
bmRlZmluZWQoKSkgewotICAgICAgICBub25OdWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5
cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgbm9uTnVsbGFibGVOb2RlVmFsdWUsIElzTnVsbGFibGU6
Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
LSAgICB9IGVsc2UgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUp
OwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXF1aXJlZERp
Y3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1
aXJlZERpY3Rpb25hcnlNZW1iZXIiKSk7Ci0gICAgVGVzdE9iajo6RGljdGlvbmFyeSByZXF1aXJl
ZERpY3Rpb25hcnlNZW1iZXI7Ci0gICAgaWYgKCFyZXF1aXJlZERpY3Rpb25hcnlNZW1iZXJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciA9IGNv
bnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KHN0YXRlLCByZXF1aXJlZERpY3Rp
b25hcnlNZW1iZXJWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIEpTVmFs
dWUgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlIikpOwotICAgIFRlc3RPYmo6OkVudW1U
eXBlIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZTsKLSAgICBpZiAoIXJlcXVpcmVkRW51bWVyYXRp
b25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVxdWlyZWRFbnVtZXJhdGlv
blZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHJlcXVpcmVkRW51bWVy
YXRpb25WYWx1ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBOdWxsb3B0KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgcmV0dXJu
IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShy
ZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCks
ICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07Ci19
Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xl
cmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRy
IDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5l
ZCAmJiAhb2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2Nv
cGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKG9i
amVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkgewotICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9w
dDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAg
Q29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKLSAg
ICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9
IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlIikpOwotICAg
IENvbnZlcnRlcjxUZXN0T2JqOjpFbnVtVHlwZT46Ok9wdGlvbmFsVmFsdWUgZW51bWVyYXRpb25W
YWx1ZTsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0g
ICAgICAgIGVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0
ZSwgZW51bWVyYXRpb25WYWx1ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25h
cnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RG
TW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07Ci19Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8
QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+IGNvbnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rp
b25hcnlOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDog
dmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAm
JiAhb2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUp
OwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKG9iamVj
dCAmJiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsK
LSAgICB9Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29u
dmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKLSAgICBp
ZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
Ym9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhv
dXREZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlIikpOwotICAgIENv
bnZlcnRlcjxUZXN0T2JqOjpFbnVtVHlwZT46Ok9wdGlvbmFsVmFsdWUgZW51bWVyYXRpb25WYWx1
ZTsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIGVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
ZW51bWVyYXRpb25WYWx1ZVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgcmV0dXJuIEFsdGVybmF0ZURpY3Rpb25hcnlO
YW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERl
ZmF1bHQpIH07Ci19Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6UGFyZW50RGljdGlv
bmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGJvb2wg
aXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwotICAgIGF1dG8q
IG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgp
OwotICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJu
IE51bGxvcHQ7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBl
KCkgPT0gUmVnRXhwT2JqZWN0VHlwZSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIEpTVmFs
dWUgcGFyZW50TWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBh
cmVudE1lbWJlcjEiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBhcmVu
dE1lbWJlcjE7Ci0gICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICBwYXJlbnRNZW1iZXIxID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVtYmVy
MVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIyVmFsdWUgPSBpc051bGxPclVuZGVm
aW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMiIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46
Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMjsKLSAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjIgPSBjb252ZXJ0PGJvb2w+
KHN0YXRlLCBwYXJlbnRNZW1iZXIyVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6UGFyZW50
RGljdGlvbmFyeSB7IFdURk1vdmUocGFyZW50TWVtYmVyMiksIFdURk1vdmUocGFyZW50TWVtYmVy
MSkgfTsKLX0KLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4oRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGJvb2wgaXNOdWxs
T3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwotICAgIGF1dG8qIG9iamVj
dCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwotICAg
IGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxv
cHQ7Ci0gICAgfQotICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBlKCkgPT0g
UmVnRXhwT2JqZWN0VHlwZSkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIEpTVmFsdWUgcGFy
ZW50TWVtYmVyMVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInBhcmVudE1l
bWJlcjEiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIHBhcmVudE1lbWJl
cjE7Ci0gICAgaWYgKCFwYXJlbnRNZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICBwYXJlbnRNZW1iZXIxID0gY29udmVydDxib29sPihzdGF0ZSwgcGFyZW50TWVtYmVyMVZhbHVl
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAg
ICB9Ci0gICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMiIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlv
bmFsVmFsdWUgcGFyZW50TWVtYmVyMjsKLSAgICBpZiAoIXBhcmVudE1lbWJlcjJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjIgPSBjb252ZXJ0PGJvb2w+KHN0YXRl
LCBwYXJlbnRNZW1iZXIyVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGNoaWxkTWVtYmVyMVZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImNoaWxkTWVtYmVyMSIpKTsKLSAgICBDb252
ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgY2hpbGRNZW1iZXIxOwotICAgIGlmICghY2hpbGRN
ZW1iZXIxVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBjaGlsZE1lbWJlcjEgPSBjb252
ZXJ0PGJvb2w+KHN0YXRlLCBjaGlsZE1lbWJlcjFWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgY2hpbGRN
ZW1iZXIyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIy
IikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjI7Ci0g
ICAgaWYgKCFjaGlsZE1lbWJlcjJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGNoaWxk
TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMlZhbHVlKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAg
cmV0dXJuIFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeSB7IFdURk1vdmUocGFyZW50TWVtYmVyMiks
IFdURk1vdmUocGFyZW50TWVtYmVyMSksIFdURk1vdmUoY2hpbGRNZW1iZXIyKSwgV1RGTW92ZShj
aGlsZE1lbWJlcjEpIH07Ci19Ci0KIC8vIEZ1bmN0aW9ucwogCiAjaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaAppbmRleCA5MWQ3ZWE5YzE5ODA0YTE0MGIzZWJiNzI0Yjg1NWQxYmVjMmNhZDE5
Li43ODk2M2Y1MWIxZDdmNTViZDg3NjE1ZGIzMDBlNjYyN2U3OTFmMGIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC0y
MCw4ICsyMCwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5o
IgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1
ZGUgIlRlc3RPYmouaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwNCw1ICsx
MDcsODMyIEBAIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE9iaj4gewogICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdE9iajsKIH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25hbDxUPiBwYXJz
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK0pTQzo6SlNTdHJpbmcq
IGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bVR5cGUpOwor
CitpbmxpbmUgSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBlbXB0
eVN0cmluZygpLAorICAgICAgICBBU0NJSUxpdGVyYWwoImVudW1WYWx1ZTEiKSwKKyAgICAgICAg
QVNDSUlMaXRlcmFsKCJFbnVtVmFsdWUyIiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZh
bHVlMyIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRl
c3RPYmo6OkVudW1UeXBlOjpFbXB0eVN0cmluZykgPT0gMCwgIlRlc3RPYmo6OkVudW1UeXBlOjpF
bXB0eVN0cmluZyBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMSkgPT0gMSwgIlRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAg
c3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OkVudW1UeXBlOjpFbnVt
VmFsdWUyKSA9PSAyLCAiVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTIgaXMgbm90IDIgYXMg
ZXhwZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9i
ajo6RW51bVR5cGU6OkVudW1WYWx1ZTMpID09IDMsICJUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZh
bHVlMyBpcyBub3QgMyBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXpl
X3Q+KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpXSk7Cit9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFp
dHM8VGVzdE9iajo6RW51bVR5cGU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlK
U1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2Jq
OjpFbnVtVHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVl
KTsgfQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+
IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
JnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
VGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3RyaW5nOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAi
ZW51bVZhbHVlMSIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVl
MTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQorICAgICAgICByZXR1cm4g
VGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTI7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJF
bnVtVmFsdWUzIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUz
OworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0T2JqOjpF
bnVtVHlwZSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byBy
ZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAo
VU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52
YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpCit7CisgICAgcmV0dXJuICJcIlwiLCBc
ImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wiIjsKK30KKworSlND
OjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpP
cHRpb25hbCk7CisKK2lubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6Ok9wdGlvbmFsIGVudW1lcmF0aW9uVmFsdWUpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Cisg
ICAgICAgIGVtcHR5U3RyaW5nKCksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiT3B0aW9uYWxWYWx1
ZTEiKSwKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJPcHRpb25hbFZhbHVlMiIpLAorICAgICAgICBB
U0NJSUxpdGVyYWwoIk9wdGlvbmFsVmFsdWUzIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6T3B0aW9uYWw6OkVtcHR5U3RyaW5nKSA9PSAw
LCAiVGVzdE9iajo6T3B0aW9uYWw6OkVtcHR5U3RyaW5nIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7
CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6Ok9wdGlvbmFs
OjpPcHRpb25hbFZhbHVlMSkgPT0gMSwgIlRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVl
MSBpcyBub3QgMSBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTIpID09IDIsICJUZXN0T2Jq
OjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTIgaXMgbm90IDIgYXMgZXhwZWN0ZWQiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlv
bmFsVmFsdWUzKSA9PSAzLCAiVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUzIGlzIG5v
dCAzIGFzIGV4cGVjdGVkIik7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVy
YXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcykpOworICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRp
b25WYWx1ZSldKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2Jq
OjpPcHRpb25hbD4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6Ok9wdGlvbmFs
IHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9Owor
Cit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpPcHRpb25hbD4gcGFyc2U8VGVz
dE9iajo6T3B0aW9uYWw+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwor
ICAgIGlmIChzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpP
cHRpb25hbDo6RW1wdHlTdHJpbmc7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJPcHRpb25hbFZh
bHVlMSIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTE7
CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJPcHRpb25hbFZhbHVlMiIpCisgICAgICAgIHJldHVy
biBUZXN0T2JqOjpPcHRpb25hbDo6T3B0aW9uYWxWYWx1ZTI7CisgICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJPcHRpb25hbFZhbHVlMyIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpPcHRpb25hbDo6
T3B0aW9uYWxWYWx1ZTM7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gaW5s
aW5lIFRlc3RPYmo6Ok9wdGlvbmFsIGNvbnZlcnQ8VGVzdE9iajo6T3B0aW9uYWw+KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6Ok9wdGlvbmFsPihzdGF0ZSwgdmFs
dWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+KCkKK3sKKyAgICBy
ZXR1cm4gIlwiXCIsIFwiT3B0aW9uYWxWYWx1ZTFcIiwgXCJPcHRpb25hbFZhbHVlMlwiLCBcIk9w
dGlvbmFsVmFsdWUzXCIiOworfQorCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShK
U0M6OkV4ZWNTdGF0ZSosIEFsdGVybmF0ZUVudW1OYW1lKTsKKworaW5saW5lIEpTQzo6SlNTdHJp
bmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQWx0ZXJuYXRlRW51
bU5hbWUgZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgQVNDSUlMaXRlcmFsKCJlbnVtVmFsdWUx
IiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRW51bVZhbHVlMiIpLAorICAgIH07CisgICAgc3Rh
dGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFs
dWUxKSA9PSAwLCAiQWx0ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTEgaXMgbm90IDAgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oQWx0ZXJuYXRl
RW51bU5hbWU6OkVudW1WYWx1ZTIpID09IDEsICJBbHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVl
MiBpcyBub3QgMSBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVu
dW1lcmF0aW9uVmFsdWUpXSk7Cit9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8
QWx0ZXJuYXRlRW51bU5hbWU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBBbHRlcm5hdGVF
bnVtTmFtZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsg
fQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8QWx0ZXJuYXRlRW51bU5hbWU+IHBh
cnNlPEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImVudW1WYWx1ZTEiKQorICAgICAgICByZXR1
cm4gQWx0ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTE7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09
ICJFbnVtVmFsdWUyIikKKyAgICAgICAgcmV0dXJuIEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFs
dWUyOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBBbHRlcm5h
dGVFbnVtTmFtZSBjb252ZXJ0PEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byByZXN1bHQgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUsIHZhbHVlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0
aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzPEFsdGVybmF0ZUVudW1OYW1lPigpCit7CisgICAgcmV0dXJuICJcImVu
dW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIiOworfQorCisjaWYgRU5BQkxFKENvbmRpdGlvbjEp
CisKK0pTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVz
dE9iajo6RW51bUEpOworCitpbmxpbmUgSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQSBlbnVtZXJhdGlvblZhbHVlKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewor
ICAgICAgICBBU0NJSUxpdGVyYWwoIkEiKSwKKyAgICB9OworICAgIHN0YXRpY19hc3NlcnQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpFbnVtQTo6QSkgPT0gMCwgIlRlc3RPYmo6OkVudW1B
OjpBIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVf
dD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlfTEVOR1RIKHZhbHVlcykpOworICAgIHJl
dHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4o
ZW51bWVyYXRpb25WYWx1ZSldKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0
czxUZXN0T2JqOjpFbnVtQT4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVu
dW1BIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9
OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQT4gcGFyc2U8VGVz
dE9iajo6RW51bUE+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAg
IGlmIChzdHJpbmdWYWx1ZSA9PSAiQSIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtQTo6
QTsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgVGVzdE9iajo6
RW51bUEgY29udmVydDxUZXN0T2JqOjpFbnVtQT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0
ID0gcGFyc2U8VGVzdE9iajo6RW51bUE+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZ
KCFyZXN1bHQpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsK
K30KKwordGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlczxUZXN0T2JqOjpFbnVtQT4oKQoreworICAgIHJldHVybiAiXCJBXCIiOworfQorCisjZW5k
aWYKKworI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKworSlND
OjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpF
bnVtQik7CisKK2lubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OkVudW1CIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAg
IEFTQ0lJTGl0ZXJhbCgiQiIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2Fz
dDxzaXplX3Q+KFRlc3RPYmo6OkVudW1COjpCKSA9PSAwLCAiVGVzdE9iajo6RW51bUI6OkIgaXMg
bm90IDAgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVt
ZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJh
dGlvblZhbHVlKV0pOworfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RP
Ymo6OkVudW1CPiB7CisgICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6RW51bUIgdmFs
dWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KK307CisKK3Rl
bXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1CPiBwYXJzZTxUZXN0T2JqOjpF
bnVtQj4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAg
YXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgaWYgKHN0
cmluZ1ZhbHVlID09ICJCIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1COjpCOworICAg
IHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0T2JqOjpFbnVtQiBj
b252ZXJ0PFRlc3RPYmo6OkVudW1CPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJz
ZTxUZXN0T2JqOjpFbnVtQj4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3Vs
dCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0
ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3RPYmo6OkVudW1CPigpCit7CisgICAgcmV0dXJuICJcIkJcIiI7Cit9CisKKyNlbmRpZgorCisj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorCitKU0M6OkpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1DKTsK
KworaW5saW5lIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgVGVzdE9iajo6RW51bUMgZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgQVNDSUlM
aXRlcmFsKCJDIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVf
dD4oVGVzdE9iajo6RW51bUM6OkMpID09IDAsICJUZXN0T2JqOjpFbnVtQzo6QyBpcyBub3QgMCBh
cyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9u
VmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFs
dWUpXSk7Cit9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51
bUM+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQyB2YWx1ZSkgeyBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8
PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+IHBhcnNlPFRlc3RPYmo6OkVudW1DPihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0
cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFs
dWUgPT0gIkMiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bUM6OkM7CisgICAgcmV0dXJu
IE51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIFRlc3RPYmo6OkVudW1DIGNvbnZlcnQ8
VGVzdE9iajo6RW51bUM+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RP
Ymo6OkVudW1DPihzdGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUM+KCkKK3sKKyAgICByZXR1cm4gIlwiQ1wiIjsKK30KKworI2VuZGlmCisKK0pTQzo6SlNT
dHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6S2luZCk7
CisKK2lubGluZSBKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIFRlc3RPYmo6OktpbmQgZW51bWVyYXRpb25WYWx1ZSkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKKyAgICAgICAgQVNDSUlM
aXRlcmFsKCJxdWljayIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoImRlYWQiKSwKKyAgICB9Owor
ICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8c2l6ZV90PihUZXN0T2JqOjpLaW5kOjpRdWlj
aykgPT0gMCwgIlRlc3RPYmo6OktpbmQ6OlF1aWNrIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OktpbmQ6OkRlYWQp
ID09IDEsICJUZXN0T2JqOjpLaW5kOjpEZWFkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKHZhbHVlcykpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFs
dWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKK30KKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpLaW5kPiB7CisgICAgc3RhdGljIEpT
Qzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiwgVGVzdE9iajo6S2luZCB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVz
dE9iajo6S2luZD4gcGFyc2U8VGVzdE9iajo6S2luZD4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJxdWljayIpCisgICAgICAg
IHJldHVybiBUZXN0T2JqOjpLaW5kOjpRdWljazsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImRl
YWQiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6S2luZDo6RGVhZDsKKyAgICByZXR1cm4gTnVs
bG9wdDsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgVGVzdE9iajo6S2luZCBjb252ZXJ0PFRlc3RP
Ymo6OktpbmQ+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6Oktp
bmQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7CisgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpLaW5kPigp
Cit7CisgICAgcmV0dXJuICJcInF1aWNrXCIsIFwiZGVhZFwiIjsKK30KKworSlNDOjpKU1N0cmlu
ZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpTaXplKTsKKwor
aW5saW5lIEpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgVGVzdE9iajo6U2l6ZSBlbnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0geworICAgICAgICBBU0NJSUxpdGVy
YWwoInNtYWxsIiksCisgICAgICAgIEFTQ0lJTGl0ZXJhbCgibXVjaC1tdWNoLWxhcmdlciIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRlc3RPYmo6OlNp
emU6OlNtYWxsKSA9PSAwLCAiVGVzdE9iajo6U2l6ZTo6U21hbGwgaXMgbm90IDAgYXMgZXhwZWN0
ZWQiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oVGVzdE9iajo6U2l6
ZTo6TXVjaE11Y2hMYXJnZXIpID09IDEsICJUZXN0T2JqOjpTaXplOjpNdWNoTXVjaExhcmdlciBp
cyBub3QgMSBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGVu
dW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1l
cmF0aW9uVmFsdWUpXSk7Cit9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVz
dE9iajo6U2l6ZT4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OlNpemUgdmFs
dWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KK307CisKK3Rl
bXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OlNpemU+IHBhcnNlPFRlc3RPYmo6OlNp
emU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1
dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGlmIChzdHJp
bmdWYWx1ZSA9PSAic21hbGwiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6U2l6ZTo6U21hbGw7
CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJtdWNoLW11Y2gtbGFyZ2VyIikKKyAgICAgICAgcmV0
dXJuIFRlc3RPYmo6OlNpemU6Ok11Y2hNdWNoTGFyZ2VyOworICAgIHJldHVybiBOdWxsb3B0Owor
fQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0T2JqOjpTaXplIGNvbnZlcnQ8VGVzdE9iajo6U2l6
ZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6U2l6ZT4oc3Rh
dGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25z
dCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OlNpemU+KCkKK3sKKyAg
ICByZXR1cm4gIlwic21hbGxcIiwgXCJtdWNoLW11Y2gtbGFyZ2VyXCIiOworfQorCitKU0M6OkpT
U3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkNvbmZp
ZGVuY2UpOworCitpbmxpbmUgSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpDb25maWRlbmNlIGVudW1lcmF0aW9uVmFsdWUpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7Cisg
ICAgICAgIEFTQ0lJTGl0ZXJhbCgiaGlnaCIpLAorICAgICAgICBBU0NJSUxpdGVyYWwoImtpbmRh
LWxvdyIpLAorICAgIH07CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KFRl
c3RPYmo6OkNvbmZpZGVuY2U6OkhpZ2gpID09IDAsICJUZXN0T2JqOjpDb25maWRlbmNlOjpIaWdo
IGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxz
aXplX3Q+KFRlc3RPYmo6OkNvbmZpZGVuY2U6OktpbmRhTG93KSA9PSAxLCAiVGVzdE9iajo6Q29u
ZmlkZW5jZTo6S2luZGFMb3cgaXMgbm90IDEgYXMgZXhwZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKSA8IFdURl9BUlJBWV9MRU5HVEgodmFs
dWVzKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOworfQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+IHsKKyAgICBzdGF0aWMgSlNDOjpK
U1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0T2JqOjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxU
ZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZTxUZXN0T2JqOjpDb25maWRlbmNlPihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImhp
Z2giKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6Q29uZmlkZW5jZTo6SGlnaDsKKyAgICBpZiAo
c3RyaW5nVmFsdWUgPT0gImtpbmRhLWxvdyIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpDb25m
aWRlbmNlOjpLaW5kYUxvdzsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgVGVzdE9iajo6Q29uZmlkZW5jZSBjb252ZXJ0PFRlc3RPYmo6OkNvbmZpZGVuY2U+KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkNvbmZpZGVuY2U+KHN0
YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7CisgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigp
Cit7CisgICAgcmV0dXJuICJcImhpZ2hcIiwgXCJraW5kYS1sb3dcIiI7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5
PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBib29sIGlzTnVsbE9yVW5kZWZp
bmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICBhdXRvKiBvYmplY3QgPSBpc051
bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
IH0KKyAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IEpTQzo6UmVn
RXhwT2JqZWN0VHlwZSkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBh
bnlUeXBlZGVmVmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpOworICAgIEpTQzo6SlNWYWx1ZSBhbnlUeXBlZGVmVmFs
dWU7CisgICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VHlw
ZWRlZlZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBhbnlUeXBlZGVmVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOworICAgIEpTQzo6SlNWYWx1ZSBhbnlWYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKTsKKyAgICBKU0M6OkpTVmFsdWUg
YW55VmFsdWU7CisgICAgaWYgKCFhbnlWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAg
ICAgYW55VmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlVmFsdWUp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAg
IH0gZWxzZQorICAgICAgICBhbnlWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNDOjpKU1Zh
bHVlIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6Ompz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJib29sZWFuV2l0aERlZmF1bHQiKSk7CisgICAgYm9vbCBib29sZWFuV2l0
aERlZmF1bHQ7CisgICAgaWYgKCFib29sZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJv
b2xlYW5XaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0
ID0gZmFsc2U7CisgICAgSlNDOjpKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERl
ZmF1bHQiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdDsKKyAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihz
dGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgZGlj
dGlvbmFyeU1lbWJlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJkaWN0aW9uYXJ5TWVtYmVyIikpOworICAgIENvbnZlcnRlcjxUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD46Ok9wdGlvbmFsVmFsdWUgZGljdGlvbmFyeU1lbWJl
cjsKKyAgICBpZiAoIWRpY3Rpb25hcnlNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIGRpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oc3RhdGUsIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAg
fQorICAgIEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdp
dGhEZWZhdWx0IikpOworICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRo
RGVmYXVsdDsKKyAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVy
dDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZh
bHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gVGVzdE9i
ajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7CisgICAgSlNDOjpKU1ZhbHVlIGVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0Iikp
OworICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdE
ZWZhdWx0OworICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlT
dHJpbmdEZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0
aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBlbnVt
ZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpF
bXB0eVN0cmluZzsKKyAgICBKU0M6OkpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1l
cmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51
bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKKyAg
ICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0
T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAg
ICB9CisgICAgSlNDOjpKU1ZhbHVlIGludGVnZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
SlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50ZWdlciIpKTsKKyAgICBDb252ZXJ0ZXI8aW50MzJfdD46
Ok9wdGlvbmFsVmFsdWUgaW50ZWdlcjsKKyAgICBpZiAoIWludGVnZXJWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CisgICAgICAgIGludGVnZXIgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBpbnRlZ2Vy
VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgaW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImlu
dGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICBpbnQzMl90IGludGVnZXJXaXRoRGVmYXVsdDsKKyAg
ICBpZiAoIWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
aW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBpbnRlZ2VyV2l0
aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBsYXJnZUludGVnZXJWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOworICAg
IENvbnZlcnRlcjxpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSBsYXJnZUludGVnZXI7CisgICAgaWYg
KCFsYXJnZUludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGxhcmdlSW50ZWdl
ciA9IGNvbnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldp
dGhEZWZhdWx0IikpOworICAgIGludDY0X3QgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQ7CisgICAg
aWYgKCFsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAg
ICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJn
ZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBudWxsYWJs
ZU5vZGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVs
bGFibGVOb2RlIikpOworICAgIE5vZGUqIG51bGxhYmxlTm9kZTsKKyAgICBpZiAoIW51bGxhYmxl
Tm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgbnVsbGFibGVOb2RlID0gY29udmVy
dFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG51bGxhYmxlTm9kZVZhbHVlLCBJc051
bGxhYmxlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBudWxsYWJsZU5vZGUgPSBudWxscHRyOworICAg
IEpTQzo6SlNWYWx1ZSByZXN0cmljdGVkRG91YmxlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgQ29udmVydGVy
PGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZERvdWJsZTsKKyAgICBpZiAoIXJlc3Ry
aWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHJlc3RyaWN0ZWREb3Vi
bGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSwgU2hvdWxk
QWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CisgICAgZG91YmxlIHJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdDsKKyAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1
ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0ID0gMDsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRG
bG9hdCIpKTsKKyAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpPcHRpb25hbFZhbHVlIHJlc3RyaWN0ZWRG
bG9hdDsKKyAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRG
bG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUg
cmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlND
Ojpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSk7CisgICAgZmxv
YXQgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7CisgICAgaWYgKCFyZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBzZXF1ZW5jZU9m
U3RyaW5nc1ZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBv
YmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
ZXF1ZW5jZU9mU3RyaW5ncyIpKTsKKyAgICBDb252ZXJ0ZXI8VmVjdG9yPFN0cmluZz4+OjpPcHRp
b25hbFZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzOworICAgIGlmICghc2VxdWVuY2VPZlN0cmluZ3NW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzID0gY29udmVy
dDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBK
U0M6OkpTVmFsdWUgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpOworICAgIENvbnZl
cnRlcjxpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsSW50ZWdlckNsYW1wZWQ7CisgICAgaWYg
KCFzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBzbWFs
bEludGVnZXJDbGFtcGVkID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJDbGFt
cGVkVmFsdWUsIENsYW1wKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgIENvbnZlcnRlcjxpbnQ4X3Q+OjpPcHRpb25hbFZh
bHVlIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghc21hbGxJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0ID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHNtYWxsVW5zaWduZWRJbnRl
Z2VyRW5mb3JjZWRSYW5nZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZp
bmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSk7CisgICAgQ29udmVy
dGVyPHVpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRS
YW5nZTsKKyAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
ID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJh
bmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBzbWFsbFVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgdWludDhf
dCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghc21hbGxVbnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc21hbGxV
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHNtYWxs
VW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNl
CisgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6
SlNWYWx1ZSBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6
OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKTsKKyAgICBTdHJpbmcgc3RyaW5n
V2l0aERlZmF1bHQ7CisgICAgaWYgKCFzdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgc3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUs
IHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBzdHJpbmdXaXRoRGVmYXVs
dCA9ICJkZWZhdWx0U3RyaW5nIjsKKyAgICBKU0M6OkpTVmFsdWUgc3RyaW5nV2l0aG91dERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5n
V2l0aG91dERlZmF1bHQiKSk7CisgICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlvbmFsVmFsdWUg
c3RyaW5nV2l0aG91dERlZmF1bHQ7CisgICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0
PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpT
VmFsdWUgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICBDb252ZXJ0ZXI8ZG91
YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGU7CisgICAgaWYgKCF1bnJlc3Ry
aWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZERv
dWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUsIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5yZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CisgICAgZG91YmxlIHVu
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0OworICAgIGlmICghdW5yZXN0cmljdGVkRG91Ymxl
V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1
ZSB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpP
cHRpb25hbFZhbHVlIHVucmVzdHJpY3RlZEZsb2F0OworICAgIGlmICghdW5yZXN0cmljdGVkRmxv
YXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0ID0gY29u
dmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNob3VsZEFsbG93Tm9u
RmluaXRlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOworICAgIGZsb2F0IHVucmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQ7CisgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUu
aXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0g
Y29udmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHVucmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSB1bnNpZ25lZEludGVnZXJWYWx1
ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQo
JnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRl
Z2VyIikpOworICAgIENvbnZlcnRlcjx1aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgdW5zaWduZWRJ
bnRlZ2VyOworICAgIGlmICghdW5zaWduZWRJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewor
ICAgICAgICB1bnNpZ25lZEludGVnZXIgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWdu
ZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpq
c1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgdWludDMy
X3QgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQ7CisgICAgaWYgKCF1bnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2Vy
V2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICBKU0M6OkpTVmFsdWUgdW5zaWduZWRMYXJnZUlu
dGVnZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5z
aWduZWRMYXJnZUludGVnZXIiKSk7CisgICAgQ29udmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxW
YWx1ZSB1bnNpZ25lZExhcmdlSW50ZWdlcjsKKyAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNv
bnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5z
aWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICB1aW50NjRfdCB1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghdW5zaWduZWRMYXJnZUludGVnZXJXaXRo
RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5zaWduZWRMYXJnZUludGVn
ZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICB1
bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICByZXR1cm4gVGVzdE9iajo6
RGljdGlvbmFyeSB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSwgV1RG
TW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRoRGVmYXVsdCksIFdU
Rk1vdmUoc3RyaW5nV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRoRGVmYXVsdCks
IFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShzZXF1ZW5jZU9mU3RyaW5n
cyksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUodW5yZXN0cmljdGVkRG91Ymxl
KSwgV1RGTW92ZShyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXQpLCBXVEZNb3Zl
KHVucmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCks
IFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxJbnRl
Z2VyQ2xhbXBlZCksIFdURk1vdmUoc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNt
YWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSksIFdURk1vdmUoc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoaW50ZWdlciksIFdURk1vdmUoaW50ZWdlcldpdGhE
ZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkSW50ZWdl
cldpdGhEZWZhdWx0KSwgV1RGTW92ZShsYXJnZUludGVnZXIpLCBXVEZNb3ZlKGxhcmdlSW50ZWdl
cldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlciksIFdURk1vdmUodW5z
aWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobnVsbGFibGVOb2RlKSwgV1RG
TW92ZShhbnlWYWx1ZSksIFdURk1vdmUoYW55VHlwZWRlZlZhbHVlKSwgZGljdGlvbmFyeU1lbWJl
ci52YWx1ZSgpIH07Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsPiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbD4oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAg
IGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9i
amVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkp
IHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0
LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9
CisgICAgSlNDOjpKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7
CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVs
dDsKKyAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
KyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgbm9uTnVsbGFibGVO
b2RlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51
bGxhYmxlTm9kZSIpKTsKKyAgICBOb2RlKiBub25OdWxsYWJsZU5vZGU7CisgICAgaWYgKCFub25O
dWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIG5vbk51bGxhYmxlTm9k
ZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBub25OdWxsYWJsZU5v
ZGVWYWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAg
ICBKU0M6OkpTVmFsdWUgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIp
KTsKKyAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlcjsKKyAg
ICBpZiAoIXJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeT4oc3RhdGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHJlcXVpcmVkRW51bWVy
YXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgVGVzdE9iajo6RW51bVR5cGUgcmVx
dWlyZWRFbnVtZXJhdGlvblZhbHVlOworICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUg
PSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gVGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVk
RW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51
bGxhYmxlTm9kZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xl
cmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKFVOTElLRUxZKCFp
c051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAg
aWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVj
dFR5cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Cisg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlv
bmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OworICAgIGlmICghYm9vbGVhbldpdGhvdXRE
ZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQor
ICAgIEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5l
ZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgQ29udmVy
dGVyPFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwor
ICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
ZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVt
ZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGRUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJv
b2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8
QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+IGNvbnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rp
b25hcnlOYW1lPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKFVOTElLRUxZKCFpc051
bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAgaWYg
KFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVjdFR5
cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgYm9vbGVhbldpdGhv
dXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFs
VmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OworICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHQg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAg
IEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgQ29udmVydGVy
PFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOworICAg
IGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZW51
bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJh
dGlvblZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBX
VEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkg
fTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6UGFyZW50RGljdGlv
bmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOworICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZh
bHVlLmdldE9iamVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYg
IW9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3Qg
JiYgb2JqZWN0LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9w
dDsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHBhcmVudE1lbWJlcjFWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICBD
b252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKKyAgICBpZiAoIXBh
cmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHBhcmVudE1lbWJlcjEg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpT
VmFsdWUgcGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJwYXJlbnRNZW1iZXIyIikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9u
YWxWYWx1ZSBwYXJlbnRNZW1iZXIyOworICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUs
IHBhcmVudE1lbWJlcjJWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIHJldHVybiBUZXN0T2JqOjpQYXJlbnREaWN0aW9u
YXJ5IHsgV1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSB9Owor
fQorCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwor
ICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdl
dE9iamVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVj
dCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2Jq
ZWN0LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAg
ICB9CisgICAgSlNDOjpKU1ZhbHVlIHBhcmVudE1lbWJlcjFWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICBDb252ZXJ0
ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKKyAgICBpZiAoIXBhcmVudE1l
bWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHBhcmVudE1lbWJlcjEgPSBjb252
ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUg
cGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJwYXJlbnRNZW1iZXIyIikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1
ZSBwYXJlbnRNZW1iZXIyOworICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVu
dE1lbWJlcjJWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
TnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBjaGlsZE1lbWJlcjFWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIxIikpOwor
ICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjE7CisgICAgaWYg
KCFjaGlsZE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGNoaWxkTWVtYmVy
MSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMVZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpK
U1ZhbHVlIGNoaWxkTWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25h
bFZhbHVlIGNoaWxkTWVtYmVyMjsKKyAgICBpZiAoIWNoaWxkTWVtYmVyMlZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgY2hpbGRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgY2hp
bGRNZW1iZXIyVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gVGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5IHsg
V1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSwgV1RGTW92ZShj
aGlsZE1lbWJlcjIpLCBXVEZNb3ZlKGNoaWxkTWVtYmVyMSkgfTsKK30KKwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290665</attachid>
            <date>2016-10-04 16:27:13 -0700</date>
            <delta_ts>2016-10-04 20:53:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162929-20161004162402.patch</filename>
            <type>text/plain</type>
            <size>96856</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjRlNWY4N2VhMDJhNzZh
YjRjMjY2NGM0OWZmZDg5MTZhYzA0NjEwZi4uNmU3NmQyMTJmOTdiZDI5NGUwNTU2MzRjMTRiN2Zh
NzExNmU4YjAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDg3IEBACiAyMDE2LTEwLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSBjb252ZXJ0RGljdGlv
bmFyeTw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIHRoZSBoZWFkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29udmVydERpY3Rp
b25hcnk8PigpIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyB0byB0aGUgaGVhZGVyIGluIG9yZGVy
IHRvOgorICAgICAgICAtIEFsbG93IHRoZW0gdG8gYmUgdXNlZCBmcm9tIGN1c3RvbSBiaW5kaW5n
cyBjb2RlLgorICAgICAgICAtIFByZXBhcmUgZm9yIG1vdmluZyBkaWN0aW9uYXJpZXMgdG8gdGhl
aXIgb3duIElETCBmaWxlcyAoQnVnIDE2MjkxMikuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWJhc2VsaW5lZCBiaW5kaW5ncyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
IChHZW5lcmF0ZUludGVyZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVt
ZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0
aW9uQ29udGVudCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIpOgorICAg
ICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKGFkZFVuc2Nv
cGFibGVQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9ialByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9i
alByb3RvdHlwZTo6SlNUZXN0T2JqUHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
Ymo6OkpTVGVzdE9iaik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmNy
ZWF0ZVByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OnBy
b3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmRlc3Ryb3kp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaDoKKyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nV2l0aENhY2hlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bVR5cGU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6T3B0aW9uYWw+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6T3B0aW9uYWw+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8QWx0ZXJuYXRlRW51bU5hbWU+OjphcnJheUpTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnQ8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8QWx0ZXJuYXRlRW51bU5hbWU+KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUE+OjphcnJheUpTVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnZlcnQ8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFs
dWVUcmFpdHM8VGVzdE9iajo6RW51bUI+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2U8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVz
dE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6RW51bUI+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVz
dE9iajo6RW51bUM+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2U8VGVz
dE9iajo6RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQ8VGVzdE9iajo6RW51bUM+
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
RW51bUM+KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2luZD46
OmFycmF5SlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZTxUZXN0T2JqOjpLaW5kPik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0PFRlc3RPYmo6OktpbmQ+KToKKyAgICAgICAgKFdl
YkNvcmU6OmV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpTaXplPjo6YXJyYXlKU1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlPFRlc3RPYmo6OlNpemU+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4pOgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaXplPik6CisgICAgICAgIChXZWJDb3JlOjpKU1Zh
bHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+OjphcnJheUpTVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2U8VGVzdE9iajo6Q29uZmlkZW5jZT4pOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydDxUZXN0T2JqOjpDb25maWRlbmNlPik6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkNvbmZpZGVuY2U+KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OlBhcmVudERpY3Rpb25hcnk+KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlv
bmFyeT4pOgorCisyMDE2LTEwLTA0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisK
ICAgICAgICAgW1dlYiBJRExdIEFkZCBzdXBwb3J0IGZvciBkaWN0aW9uYXJ5IGluaGVyaXRhbmNl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5MDcK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDc2YThkZWQ4Y2E4MTdiMWE0MzY3MTNiMWE0ZTgzNDBiYzdlNTdlMDMuLjc5MjBhMzgy
ZjRjNWIxYTAyZTIyNjQwZDdkMjVlOWE5M2I3YTgyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NzIsNyArMjc3Miw3IEBA
CiAJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOTNGMzRD
MUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlEQkZFRDFBOUM0OUIx
MDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5REJGRUIxQTlDNDlCMTAwMEQ2QjI1IC8q
IEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJN0M5REJGRUUxQTlDNDlCMTAw
MEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEQkZFQzFBOUM0OUIxMDAwRDZCMjUgLyogSlNI
VE1MQXR0YWNobWVudEVsZW1lbnQuaCAqLzsgfTsKLQkJN0NDMTZGRkIxRDc3Mzc1MzAwQ0UwODc3
IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURMVHlwZXMuaCAqLzsgfTsKKwkJN0ND
MTZGRkIxRDc3Mzc1MzAwQ0UwODc3IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURM
VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3Q0MyODlERjFBQTBGRTVEMDA5QTlDRTMgLyogVVJMUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERUUzOTM4MTc5NzQyNzQwMDFENzU4
MCAvKiBVUkxSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJE
ZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRldGVjdG9yLmggKi87
IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rv
ckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJEZXRlY3RvckNvY29h
LmNwcCAqLzsgfTsKQEAgLTMwOTksNyArMzA5OSw3IEBACiAJCTkzMDcwNUVCMDlFMEM5RjYwMEIx
N0ZFNCAvKiBKU0NTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVFQTA5RTBDOUY2MDBCMTdGRTQgLyogSlNDU1NQcmlt
aXRpdmVWYWx1ZS5oICovOyB9OwogCQk5MzA3RjFENzBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVz
dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzA3RjFENTBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgKi87IH07CiAJ
CTkzMDdGMUQ4MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3RjFENjBBRjJENTkwMDBEQkEz
MUEgLyogSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTkzMDg0MTM0MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDg0MTMz
MUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLzsgfTsKKwkJOTMwODQxMzQxQ0RE
QjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwODQxMzMxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29u
dmVydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMDkwODkxMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwOTA4OTAwQUY3RURFNDAwODFE
RjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTMwQzkwREQxOUNGOTY1MzAwRDZDMjFBIC8qIElubGluZUl0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
MEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAgKi87IH07CiAJCTkz
MTUzQkRBMTQxODFGN0EwMEZDRjVCRSAvKiBtaXNzaW5nSW1hZ2VAMngucG5nIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE1M0JEOTE0MTgxRjdBMDBG
Q0Y1QkUgLyogbWlzc2luZ0ltYWdlQDJ4LnBuZyAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dlbmVyaWMvSURMVHlwZXMuaAppbmRleCAzNzNmOTNkNjVlZTRhNTk1NzRkYjQ3YzI2YzY5
ZWM3MmM0YTdkY2I3Li44ODdjMWU2NzRlNWVlNGI2NWRhOTFhMjMxMzlkMDIxOWI3ZDA4ZGVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lETFR5cGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5oCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzOTVjN2E4YzNjMmVkMzhhMzBiOGI4ZmEyN2U5
MDM1MzIzOGJlNDUwLi4zNGI3YjBlYThmZjM1MDMxY2U4M2Y1NGRjN2ViZDc5ZjMyZGZmMDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQpAQCAtMTI4LDExICsxMjgsMTEgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgQWRk
U3RyaW5naWZpZXJPcGVyYXRpb25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIAogICAgIGlmICgkaW50
ZXJmYWNlLT5pc0NhbGxiYWNrKSB7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tI
ZWFkZXIoJGludGVyZmFjZSk7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tJbXBs
ZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAg
ICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlcigkaW50ZXJmYWNlLCAkZW51bWVy
YXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlSGVhZGVyKCRpbnRlcmZhY2UpOwotICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMs
ICRkaWN0aW9uYXJpZXMpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJm
YWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFyaWVzKTsKKyAgICAgICAgJG9iamVjdC0+R2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKTsKICAgICB9CiB9
CiAKQEAgLTgwOCwyOCArODA4LDE1IEBAIHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50
YXRpb25Db250ZW50CiAKICAgICByZXR1cm4gIiIgdW5sZXNzIEAkZW51bWVyYXRpb25zOwogCi0g
ICAgIyBGSVhNRTogQ291bGQgb3B0aW1pemUgdGhpcyB0byBvbmx5IGdlbmVyYXRlIHRoZSBwYXJ0
cyBvZiBlYWNoIGVudW1lcmF0aW9uIHRoYXQgYXJlIGFjdHVhbGx5Ci0gICAgIyB1c2VkLCB3aGlj
aCB3b3VsZCByZXF1aXJlIGl0ZXJhdGluZyBvdmVyIGV2ZXJ5dGhpbmcgaW4gdGhlIGludGVyZmFj
ZS4KLQogICAgIG15ICRyZXN1bHQgPSAiIjsKLQotICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPHR5
cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpO1xuIjsKLSAg
ICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzKCk7XG5cbiI7Ci0KICAgICBmb3JlYWNoIG15ICRlbnVtZXJhdGlvbiAo
QCRlbnVtZXJhdGlvbnMpIHsKICAgICAgICAgbXkgJG5hbWUgPSAkZW51bWVyYXRpb24tPm5hbWU7
CiAKICAgICAgICAgbXkgJGNsYXNzTmFtZSA9IEdldEVudW1lcmF0aW9uQ2xhc3NOYW1lKCRpbnRl
cmZhY2UsICRuYW1lKTsKIAotICAgICAgICAjIEZJWE1FOiBBIGxpdHRsZSB1Z2x5IHRvIGhhdmUg
dGhpcyBiZSBhIHNpZGUgZWZmZWN0IGluc3RlYWQgb2YgYSByZXR1cm4gdmFsdWUuCi0gICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIpOwotCiAgICAgICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRlbnVtZXJhdGlvbik7CiAgICAgICAgICRyZXN1bHQgLj0gIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgICAgICAjIERlY2xh
cmUgdGhpcyBpbnN0ZWFkIG9mIHVzaW5nICJzdGF0aWMiIGJlY2F1c2UgaXQgbWF5IGJlIHVudXNl
ZCBhbmQgd2UgZG9uJ3Qgd2FudCB3YXJuaW5ncyBhYm91dCB0aGF0LgotICAgICAgICAkcmVzdWx0
IC49ICJKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwgJGNsYXNzTmFtZSk7
XG5cbiI7Ci0KICAgICAgICAgIyBUYWtlIGFuIEV4ZWNTdGF0ZSogaW5zdGVhZCBvZiBhbiBFeGVj
U3RhdGUmIHRvIG1hdGNoIHRoZSBqc1N0cmluZ1dpdGhDYWNoZSBmcm9tIEpTU3RyaW5nLmguCiAg
ICAgICAgICMgRklYTUU6IENoYW5nZSB0byB0YWtlIFZNJiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSou
CiAgICAgICAgICRyZXN1bHQgLj0gIkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3Rh
dGUqIHN0YXRlLCAkY2xhc3NOYW1lIGVudW1lcmF0aW9uVmFsdWUpXG4iOwpAQCAtODU1LDE0ICs4
NDIsNDYgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFs
dWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTtcbiI7CiAgICAgICAg
ICRyZXN1bHQgLj0gIn1cblxuIjsKIAorICAgICAgICAkcmVzdWx0IC49ICIjZW5kaWZcblxuIiBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgfQorICAgIHJldHVybiAkcmVzdWx0OworfQorCitz
dWIgR2VuZXJhdGVFbnVtZXJhdGlvbkhlYWRlckNvbnRlbnQKK3sKKyAgICBteSAoJGludGVyZmFj
ZSwgJGVudW1lcmF0aW9ucykgPSBAXzsKKworICAgIHJldHVybiAiIiB1bmxlc3MgQCRlbnVtZXJh
dGlvbnM7CisKKyAgICAjIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIG9ubHkgZ2VuZXJh
dGUgdGhlIHBhcnRzIG9mIGVhY2ggZW51bWVyYXRpb24gdGhhdCBhcmUgYWN0dWFsbHkKKyAgICAj
IHVzZWQsIHdoaWNoIHdvdWxkIHJlcXVpcmUgaXRlcmF0aW5nIG92ZXIgZXZlcnl0aGluZyBpbiB0
aGUgaW50ZXJmYWNlLgorCisgICAgbXkgJHJlc3VsdCA9ICIiOworCisgICAgJHJlc3VsdCAuPSAi
dGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4gcGFyc2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpO1xuIjsKKyAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7XG5cbiI7CisKKyAgICBmb3Jl
YWNoIG15ICRlbnVtZXJhdGlvbiAoQCRlbnVtZXJhdGlvbnMpIHsKKyAgICAgICAgbXkgJG5hbWUg
PSAkZW51bWVyYXRpb24tPm5hbWU7CisKKyAgICAgICAgbXkgJGNsYXNzTmFtZSA9IEdldEVudW1l
cmF0aW9uQ2xhc3NOYW1lKCRpbnRlcmZhY2UsICRuYW1lKTsKKworICAgICAgICAjIEZJWE1FOiBB
IGxpdHRsZSB1Z2x5IHRvIGhhdmUgdGhpcyBiZSBhIHNpZGUgZWZmZWN0IGluc3RlYWQgb2YgYSBy
ZXR1cm4gdmFsdWUuCisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNTdHJpbmcu
aD4ifSA9IDE7CisKKyAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0
b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGVudW1lcmF0aW9uKTsKKyAgICAgICAgJHJl
c3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOworCisgICAgICAgICRyZXN1bHQgLj0gIkpTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEpTQzo6RXhlY1N0YXRlKiwgJGNsYXNzTmFtZSk7XG5cbiI7CisKICAgICAgICAgJHJlc3Vs
dCAuPSAidGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czwkY2xhc3NOYW1lPiB7XG4iOwot
ICAgICAgICAkcmVzdWx0IC49ICIgICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCAkY2xhc3NOYW1lIHZhbHVlKSB7IHJl
dHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9XG4iOworICAgICAgICAkcmVz
dWx0IC49ICIgICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGNsYXNzTmFtZSB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfVxuIjsKICAgICAgICAgJHJlc3Vs
dCAuPSAifTtcblxuIjsKIAogICAgICAgICAjIEZJWE1FOiBDaGFuZ2UgdG8gdGFrZSBWTSYgaW5z
dGVhZCBvZiBFeGVjU3RhdGUmLgogICAgICAgICAjIEZJWE1FOiBDb25zaWRlciB1c2luZyB0b1N0
cmluZ09yTnVsbCB0byBtYWtlIGV4Y2VwdGlvbiBjaGVja2luZyBmYXN0ZXIuCiAgICAgICAgICMg
RklYTUU6IENvbnNpZGVyIGZpbmRpbmcgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gbWF0Y2ggYWdh
aW5zdCBhbGwgdGhlIHN0cmluZ3MgcXVpY2tseS4KLSAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxh
dGU8PiBPcHRpb25hbDwkY2xhc3NOYW1lPiBwYXJzZTwkY2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKVxuIjsKKyAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiBp
bmxpbmUgT3B0aW9uYWw8JGNsYXNzTmFtZT4gcGFyc2U8JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ7
XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7XG4iOwogICAgICAgICBmb3JlYWNoIG15ICR2YWx1ZSAoQHskZW51
bWVyYXRpb24tPnZhbHVlc30pIHsKQEAgLTg3OCwxMSArODk3LDExIEBAIHN1YiBHZW5lcmF0ZUVu
dW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50CiAgICAgICAgICRyZXN1bHQgLj0gIn1cblxu
IjsKIAogICAgICAgICAjIEZJWE1FOiBBIGxpdHRsZSB1Z2x5IHRvIGhhdmUgdGhpcyBiZSBhIHNp
ZGUgZWZmZWN0IGluc3RlYWQgb2YgYSByZXR1cm4gdmFsdWUuCi0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIpOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9N
Q29udmVydC5oIn0gPSAxOwogCi0gICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gJGNsYXNz
TmFtZSBjb252ZXJ0PCRjbGFzc05hbWU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
XG4iOworICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IGlubGluZSAkY2xhc3NOYW1lIGNv
bnZlcnQ8JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOwotICAgICAgICAkcmVzdWx0IC49ICIg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iOwogICAgICAgICAkcmVzdWx0
IC49ICIgICAgYXV0byByZXN1bHQgPSBwYXJzZTwkY2xhc3NOYW1lPihzdGF0ZSwgdmFsdWUpO1xu
IjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkge1xuIjsK
QEAgLTk1MSw3ICs5NzAsNyBAQCBzdWIgR2VuZXJhdGVDb252ZXJzaW9uUnVsZVdpdGhMZWFkaW5n
Q29tbWEKICAgICByZXR1cm4gIiI7CiB9CiAKLXN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1l
bnRhdGlvbkNvbnRlbnQKK3N1YiBHZW5lcmF0ZURpY3Rpb25hcnlIZWFkZXJDb250ZW50CiB7CiAg
ICAgbXkgKCRpbnRlcmZhY2UsICRhbGxEaWN0aW9uYXJpZXMpID0gQF87CiAKQEAgLTk2MywxNCAr
OTgyLDE1IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAg
ICAgICAgJHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOwogCiAgICAgICAgIG15ICRjbGFzc05hbWUgPSBHZXREaWN0aW9uYXJ5Q2xh
c3NOYW1lKCRpbnRlcmZhY2UsICRuYW1lKTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyRpbnRl
cmZhY2UtPm5hbWUgLiAiLmgifSA9IDE7CiAKICAgICAgICAgIyBGSVhNRTogQSBsaXR0bGUgdWds
eSB0byBoYXZlIHRoaXMgYmUgYSBzaWRlIGVmZmVjdCBpbnN0ZWFkIG9mIGEgcmV0dXJuIHZhbHVl
LgotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0LmgiKTsKKyAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyJKU0RPTUNvbnZlcnQuaCJ9ID0gMTsKIAogICAgICAgICAjIGh0dHBz
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLWRpY3Rpb25hcnkKLSAgICAgICAgJHJlc3Vs
dCAuPSAidGVtcGxhdGU8PiBPcHRpb25hbDwkY2xhc3NOYW1lPiBjb252ZXJ0RGljdGlvbmFyeTwk
Y2xhc3NOYW1lPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKVxuIjsKKyAgICAgICAg
JHJlc3VsdCAuPSAidGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8JGNsYXNzTmFtZT4gY29udmVy
dERpY3Rpb25hcnk8JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ7XG4iOwotICAgICAgICAkcmVzdWx0
IC49ICIgICAgVk0mIHZtID0gc3RhdGUudm0oKTtcbiI7CisgICAgICAgICRyZXN1bHQgLj0gIiAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iOwogICAgICAgICAk
cmVzdWx0IC49ICIgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgYXV0byogb2JqZWN0ID0gaXNO
dWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7XG4iOwpAQCAtOTgy
LDcgKzEwMDIsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50
CiAKICAgICAgICAgIyAyLiBJZiBWIGlzIGEgbmF0aXZlIFJlZ0V4cCBvYmplY3QsIHRoZW4gdGhy
b3cgYSBUeXBlRXJyb3IuCiAgICAgICAgICMgRklYTUU6IFRoaXMgUmVnRXhwIHNwZWNpYWwgaGFu
ZGxpbmcgaXMgbGlrZWx5IHRvIGdvIGF3YXkgaW4gdGhlIHNwZWNpZmljYXRpb24uCi0gICAgICAg
ICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09
IFJlZ0V4cE9iamVjdFR5cGUpKSB7XG4iOworICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVO
TElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVjdFR5cGUp
KSB7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgdGhyb3dTY29wZSk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIHJldHVybiBO
dWxsb3B0O1xuIjsKICAgICAgICAgJHJlc3VsdCAuPSAiICAgIH1cbiI7CkBAIC0xMDE0LDcgKzEw
MzQsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50CiAgICAg
ICAgICAgICAgICAgbXkgJGtleSA9ICRtZW1iZXItPm5hbWU7CiAKICAgICAgICAgICAgICAgICAj
IDUuMi4gTGV0IHZhbHVlIGJlIGFuIEVDTUFTY3JpcHQgdmFsdWUsIGRlcGVuZGluZyBvbiBUeXBl
KFYpOgotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBKU1ZhbHVlICR7a2V5fVZhbHVl
ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgXCIke2tleX1cIikpO1xuIjsKKyAgICAg
ICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgSlNDOjpKU1ZhbHVlICR7a2V5fVZhbHVlID0gaXNO
dWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIFwiJHtrZXl9XCIpKTtcbiI7CiAK
ICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0
dXJlKCRpbnRlcmZhY2UsICRtZW1iZXIpOwogICAgICAgICAgICAgICAgIGlmICgkbWVtYmVyLT5p
c09wdGlvbmFsICYmICFkZWZpbmVkICRtZW1iZXItPmRlZmF1bHQpIHsKQEAgLTEwMjcsNyArMTA0
Nyw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKICAgICAg
ICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKCEke2tleX1WYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7XG4iOwogICAgICAgICAgICAgICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50
IHRoaXMgdG8gc2hhcmUgYSBsb3QgbW9yZSBjb2RlIHdpdGggSlNWYWx1ZVRvTmF0aXZlLgogICAg
ICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgkdHlwZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHt0eXBlfS5oIik7Cisg
ICAgICAgICAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlMke3R5cGV9LmgifSA9IDE7CiAg
ICAgICAgICAgICAgICAgICAgIGRpZSAiRGljdGlvbmFyeSBtZW1iZXJzIG9mIG5vbi1udWxsYWJs
ZSB3cmFwcGVyIHR5cGVzIG11c3QgYmUgbWFya2VkIGFzIHJlcXVpcmVkIiBpZiAhJG1lbWJlci0+
aXNOdWxsYWJsZSAmJiAkbWVtYmVyLT5pc09wdGlvbmFsOwogICAgICAgICAgICAgICAgICAgICBt
eSAkbnVsbGFibGVQYXJhbWV0ZXIgPSAkbWVtYmVyLT5pc051bGxhYmxlID8gIklzTnVsbGFibGU6
OlllcyIgOiAiSXNOdWxsYWJsZTo6Tm8iOwogICAgICAgICAgICAgICAgICAgICAkcmVzdWx0IC49
ICIgICAgICAgICRrZXkgPSBjb252ZXJ0V3JhcHBlclR5cGU8JHR5cGUsIEpTJHt0eXBlfT4oc3Rh
dGUsICR7a2V5fVZhbHVlLCAkbnVsbGFibGVQYXJhbWV0ZXIpO1xuIjsKQEAgLTEwNzksNyArMTA5
OSw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKIAogc3Vi
IEdlbmVyYXRlSGVhZGVyCiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0gQF87Cisg
ICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMp
ID0gQF87CiAKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAg
bXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZhY2VOYW1lIjsKQEAgLTE1NzEsNiArMTU5MSw5IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIp
OwogICAgIH0KIAorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25I
ZWFkZXJDb250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKKyAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcnlIZWFkZXJDb250ZW50KCRpbnRlcmZhY2UsICRk
aWN0aW9uYXJpZXMpKTsKKwogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJh
dG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiIpOwogICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwpAQCAtMjI1Nyw3ICsyMjgwLDcgQEAgc3ViIGFkZFVuc2NvcGFibGVQ
cm9wZXJ0aWVzCiAKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7Ci0gICAgbXkgKCRvYmpl
Y3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CisgICAg
bXkgKCRvYmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpID0gQF87CiAKICAgICBteSAk
aW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9ICJK
UyRpbnRlcmZhY2VOYW1lIjsKQEAgLTIyOTAsNyArMjMxMyw2IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5c
biIpOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1l
bnRhdGlvbkNvbnRlbnQoJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucykpOwotICAgIHB1c2goQGlt
cGxDb250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQoJGludGVy
ZmFjZSwgJGRpY3Rpb25hcmllcykpOwogCiAgICAgbXkgQGZ1bmN0aW9ucyA9IEB7JGludGVyZmFj
ZS0+ZnVuY3Rpb25zfTsKICAgICBwdXNoKEBmdW5jdGlvbnMsIEB7JGludGVyZmFjZS0+aXRlcmFi
bGUtPmZ1bmN0aW9uc30pIGlmIElzS2V5VmFsdWVJdGVyYWJsZUludGVyZmFjZSgkaW50ZXJmYWNl
KTsKQEAgLTQxMjYsNyArNDE0OCw3IEBAIHN1YiBHZW5lcmF0ZVJldHVyblBhcmFtZXRlcnMKIAog
c3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFj
ZSkgPSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywgJGRp
Y3Rpb25hcmllcykgPSBAXzsKIAogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGludGVyZmFjZS0+
bmFtZTsKICAgICBteSAkY2xhc3NOYW1lID0gIkpTJGludGVyZmFjZU5hbWUiOwpAQCAtNDE4NSw2
ICs0MjA3LDkgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosICRpbnRlcmZhY2VOYW1lJik7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJGludGVyZmFjZU5hbWUqIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH1c
blxuIik7CiAKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZW5lcmF0ZUVudW1lcmF0aW9uSGVh
ZGVyQ29udGVudCgkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zKSk7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgR2VuZXJhdGVEaWN0aW9uYXJ5SGVhZGVyQ29udGVudCgkaW50ZXJmYWNlLCAkZGlj
dGlvbmFyaWVzKSk7CisKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZVxuIik7CiAKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRv
ci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXgg
NDg2ZmU1MjA5MzdjMmUwNDEzOGZmMTVlMWFlZmU5Y2E1ZTRkNzBlMS4uM2RhNWIzOTBlYWU3NGM5
NDhjNTdmNTk1M2FjZDE4ZDE3ZGIxOTkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTM0LDcgKzM0LDYgQEAK
ICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVk
ZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTRE9NU3RyaW5nTGlzdC5oIgpAQCAtNDQsNyArNDMsNiBAQAogI2luY2x1ZGUgIkpTRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTRmV0Y2hSZXF1
ZXN0LmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgpAQCAt
NjcsNyArNjUsNiBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtOTIsMTEgKzg5LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25h
bDxUPiBwYXJzZShFeGVjU3RhdGUmLCBKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotSlNTdHJpbmcqIGpzU3Ry
aW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1UeXBlKTsKLQogSlNTdHJpbmcq
IGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OkVudW1UeXBlIGVu
dW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdmFsdWVzW10gPSB7CkBAIC0xMTMsNDMgKzEwNSw2IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dp
dGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtZXJhdGlvblZh
bHVlCiAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1UeXBlPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBh
cnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2Jq
OjpFbnVtVHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVl
KTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gcGFyc2U8
VGVzdE9iajo6RW51bVR5cGU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYg
KHN0cmluZ1ZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBl
OjpFbXB0eVN0cmluZzsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImVudW1WYWx1ZTEiKQotICAg
ICAgICByZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7Ci0gICAgaWYgKHN0cmlu
Z1ZhbHVlID09ICJFbnVtVmFsdWUyIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBl
OjpFbnVtVmFsdWUyOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMyIpCi0gICAg
ICAgIHJldHVybiBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMzsKLSAgICByZXR1cm4gTnVs
bG9wdDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtVHlwZSBjb252ZXJ0PFRlc3RPYmo6
OkVudW1UeXBlPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUs
IHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpCi17Ci0g
ICAgcmV0dXJuICJcIlwiLCBcImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZh
bHVlM1wiIjsKLX0KLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRl
c3RPYmo6Ok9wdGlvbmFsKTsKLQogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0
ZSogc3RhdGUsIFRlc3RPYmo6Ok9wdGlvbmFsIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0xNjYsNDMg
KzEyMSw2IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBU
ZXN0T2JqOjpPcHRpb25hbCBlbnVtZXJhdGlvblZhbHVlCiAgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6Ok9wdGlv
bmFsPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpPcHRpb25hbCB2YWx1ZSkgeyByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRp
b25hbDxUZXN0T2JqOjpPcHRpb25hbD4gcGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFRlc3RPYmo6Ok9wdGlvbmFsOjpFbXB0eVN0cmluZzsKLSAgICBpZiAoc3Ry
aW5nVmFsdWUgPT0gIk9wdGlvbmFsVmFsdWUxIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6Ok9w
dGlvbmFsOjpPcHRpb25hbFZhbHVlMTsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIk9wdGlvbmFs
VmFsdWUyIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVl
MjsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIk9wdGlvbmFsVmFsdWUzIikKLSAgICAgICAgcmV0
dXJuIFRlc3RPYmo6Ok9wdGlvbmFsOjpPcHRpb25hbFZhbHVlMzsKLSAgICByZXR1cm4gTnVsbG9w
dDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpPcHRpb25hbCBjb252ZXJ0PFRlc3RPYmo6Ok9w
dGlvbmFsPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oc3RhdGUsIHZh
bHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpCi17Ci0gICAg
cmV0dXJuICJcIlwiLCBcIk9wdGlvbmFsVmFsdWUxXCIsIFwiT3B0aW9uYWxWYWx1ZTJcIiwgXCJP
cHRpb25hbFZhbHVlM1wiIjsKLX0KLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNT
dGF0ZSosIEFsdGVybmF0ZUVudW1OYW1lKTsKLQogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
KEV4ZWNTdGF0ZSogc3RhdGUsIEFsdGVybmF0ZUVudW1OYW1lIGVudW1lcmF0aW9uVmFsdWUpCiB7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBA
IC0yMTUsNDEgKzEzMyw4IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUq
IHN0YXRlLCBBbHRlcm5hdGVFbnVtTmFtZSBlbnVtZXJhdGlvblZhbHVlCiAgICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJh
dGlvblZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPEFsdGVy
bmF0ZUVudW1OYW1lPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBBbHRlcm5hdGVFbnVtTmFtZSB2YWx1ZSkg
eyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxh
dGU8PiBPcHRpb25hbDxBbHRlcm5hdGVFbnVtTmFtZT4gcGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJl
bnVtVmFsdWUxIikKLSAgICAgICAgcmV0dXJuIEFsdGVybmF0ZUVudW1OYW1lOjpFbnVtVmFsdWUx
OwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiRW51bVZhbHVlMiIpCi0gICAgICAgIHJldHVybiBB
bHRlcm5hdGVFbnVtTmFtZTo6RW51bVZhbHVlMjsKLSAgICByZXR1cm4gTnVsbG9wdDsKLX0KLQot
dGVtcGxhdGU8PiBBbHRlcm5hdGVFbnVtTmFtZSBjb252ZXJ0PEFsdGVybmF0ZUVudW1OYW1lPihF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
YXV0byByZXN1bHQgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUsIHZhbHVlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPEFsdGVybmF0ZUVudW1OYW1lPigpCi17Ci0gICAgcmV0dXJuICJc
ImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIiOwotfQotCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpCiAKLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpF
bnVtQSk7Ci0KIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBU
ZXN0T2JqOjpFbnVtQSBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMjYwLDQxICsxNDUsMTAgQEAgSlNT
dHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OkVudW1B
IGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2
YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwogfQogCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1BPiB7Ci0gICAgc3RhdGlj
IEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqLCBUZXN0T2JqOjpFbnVtQSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQT4g
cGFyc2U8VGVzdE9iajo6RW51bUE+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
aWYgKHN0cmluZ1ZhbHVlID09ICJBIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1BOjpB
OwotICAgIHJldHVybiBOdWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1BIGNv
bnZlcnQ8VGVzdE9iajo6RW51bUE+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1B
PihzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewotICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4geyB9Owot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5l
IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KCkK
LXsKLSAgICByZXR1cm4gIlwiQVwiIjsKLX0KLQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCiAKLUpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQik7Ci0KIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhD
YWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQiBlbnVtZXJhdGlvblZhbHVlKQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpA
QCAtMzA1LDQxICsxNTksMTAgQEAgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0
ZSogc3RhdGUsIFRlc3RPYmo6OkVudW1CIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJh
dGlvblZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RP
Ymo6OkVudW1CPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQiB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBP
cHRpb25hbDxUZXN0T2JqOjpFbnVtQj4gcGFyc2U8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJCIikKLSAgICAgICAg
cmV0dXJuIFRlc3RPYmo6OkVudW1COjpCOwotICAgIHJldHVybiBOdWxsb3B0OwotfQotCi10ZW1w
bGF0ZTw+IFRlc3RPYmo6OkVudW1CIGNvbnZlcnQ8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3Vs
dCA9IHBhcnNlPFRlc3RPYmo6OkVudW1CPihzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VM
WSghcmVzdWx0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7
Ci19Ci0KLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXM8VGVzdE9iajo6RW51bUI+KCkKLXsKLSAgICByZXR1cm4gIlwiQlwiIjsKLX0KLQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKLUpT
U3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQyk7Ci0K
IEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpF
bnVtQyBlbnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAtMzUwLDM5ICsxNzMsOCBAQCBKU1N0cmluZyoganNT
dHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUMgZW51bWVyYXRp
b25WYWx1ZSkKICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7CiB9CiAKLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUM+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcq
IGFycmF5SlNWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RP
Ymo6OkVudW1DIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUp
OyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1DPiBwYXJzZTxUZXN0
T2JqOjpFbnVtQz4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RyaW5n
VmFsdWUgPT0gIkMiKQotICAgICAgICByZXR1cm4gVGVzdE9iajo6RW51bUM6OkM7Ci0gICAgcmV0
dXJuIE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6RW51bUMgY29udmVydDxUZXN0
T2JqOjpFbnVtQz4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6RW51bUM+KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQz4oKQotewotICAgIHJl
dHVybiAiXCJDXCIiOwotfQotCiAjZW5kaWYKIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
KEV4ZWNTdGF0ZSosIFRlc3RPYmo6OktpbmQpOwotCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2Fj
aGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAt
Mzk1LDM5ICsxODcsNiBAQCBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBz
dGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25W
YWx1ZSldKTsKIH0KIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpL
aW5kPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFs
PFRlc3RPYmo6OktpbmQ+IHBhcnNlPFRlc3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KCZzdGF0ZSk7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJxdWljayIpCi0gICAgICAgIHJldHVy
biBUZXN0T2JqOjpLaW5kOjpRdWljazsKLSAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImRlYWQiKQot
ICAgICAgICByZXR1cm4gVGVzdE9iajo6S2luZDo6RGVhZDsKLSAgICByZXR1cm4gTnVsbG9wdDsK
LX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpLaW5kIGNvbnZlcnQ8VGVzdE9iajo6S2luZD4oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6S2luZD4oc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAo
VU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJv
d1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC52
YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzPFRlc3RPYmo6OktpbmQ+KCkKLXsKLSAgICByZXR1cm4gIlwicXVpY2tcIiwg
XCJkZWFkXCIiOwotfQotCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwg
VGVzdE9iajo6U2l6ZSk7Ci0KIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUq
IHN0YXRlLCBUZXN0T2JqOjpTaXplIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC00NDAsMzkgKzE5OSw2
IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2Jq
OjpTaXplIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwogfQog
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OlNpemU+IHsKLSAgICBz
dGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RPYmo6OlNpemUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6U2l6
ZT4gcGFyc2U8VGVzdE9iajo6U2l6ZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICBpZiAoc3RyaW5nVmFsdWUgPT0gInNtYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNp
emU6OlNtYWxsOwotICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAibXVjaC1tdWNoLWxhcmdlciIpCi0g
ICAgICAgIHJldHVybiBUZXN0T2JqOjpTaXplOjpNdWNoTXVjaExhcmdlcjsKLSAgICByZXR1cm4g
TnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PiBUZXN0T2JqOjpTaXplIGNvbnZlcnQ8VGVzdE9iajo6
U2l6ZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVzdE9iajo6U2l6ZT4oc3RhdGUsIHZhbHVlKTsK
LSAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdC52YWx1ZSgpOwotfQotCi10ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OlNpemU+KCkKLXsKLSAgICByZXR1cm4gIlwi
c21hbGxcIiwgXCJtdWNoLW11Y2gtbGFyZ2VyXCIiOwotfQotCi1KU1N0cmluZyoganNTdHJpbmdX
aXRoQ2FjaGUoRXhlY1N0YXRlKiwgVGVzdE9iajo6Q29uZmlkZW5jZSk7Ci0KIEpTU3RyaW5nKiBq
c1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpDb25maWRlbmNlIGVu
dW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdmFsdWVzW10gPSB7CkBAIC00ODUsNDQwICsyMTEsNiBAQCBKU1N0cmluZyoganNTdHJpbmdX
aXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6Q29uZmlkZW5jZSBlbnVtZXJhdGlv
blZhbAogICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19j
YXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKIH0KIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpDb25maWRlbmNlPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5n
KiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
T2JqOjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
dmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkNvbmZpZGVuY2U+
IHBhcnNlPFRlc3RPYmo6OkNvbmZpZGVuY2U+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJoaWdoIikKLSAgICAgICAgcmV0dXJuIFRlc3RPYmo6
OkNvbmZpZGVuY2U6OkhpZ2g7Ci0gICAgaWYgKHN0cmluZ1ZhbHVlID09ICJraW5kYS1sb3ciKQot
ICAgICAgICByZXR1cm4gVGVzdE9iajo6Q29uZmlkZW5jZTo6S2luZGFMb3c7Ci0gICAgcmV0dXJu
IE51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4gVGVzdE9iajo6Q29uZmlkZW5jZSBjb252ZXJ0PFRl
c3RPYmo6OkNvbmZpZGVuY2U+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkNvbmZpZGVu
Y2U+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKLX0KLQotdGVtcGxhdGU8PiBpbmxp
bmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRl
bmNlPigpCi17Ci0gICAgcmV0dXJuICJcImhpZ2hcIiwgXCJraW5kYS1sb3dcIiI7Ci19Ci0KLXRl
bXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8
VGVzdE9iajo6RGljdGlvbmFyeT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwotICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
bnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwotICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JV
bmRlZmluZWQgJiYgIW9iamVjdCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0
aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIE51bGxvcHQ7Ci0gICAgfQotICAgIGlmIChVTkxJ
S0VMWShvYmplY3QgJiYgb2JqZWN0LT50eXBlKCkgPT0gUmVnRXhwT2JqZWN0VHlwZSkpIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJu
IE51bGxvcHQ7Ci0gICAgfQotICAgIEpTVmFsdWUgYW55VHlwZWRlZlZhbHVlVmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpOwotICAgIEpTQzo6
SlNWYWx1ZSBhbnlUeXBlZGVmVmFsdWU7Ci0gICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnQ8SlNDOjpK
U1ZhbHVlPihzdGF0ZSwgYW55VHlwZWRlZlZhbHVlVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBhbnlU
eXBlZGVmVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgIEpTVmFsdWUgYW55VmFsdWVWYWx1ZSA9
IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKTsKLSAgICBKU0M6OkpT
VmFsdWUgYW55VmFsdWU7Ci0gICAgaWYgKCFhbnlWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgYW55VmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVl
VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQp
OwotICAgIH0gZWxzZQotICAgICAgICBhbnlWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNW
YWx1ZSBib29sZWFuV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJib29sZWFuV2l0aERlZmF1bHQiKSk7Ci0gICAgYm9vbCBib29sZWFuV2l0aERlZmF1bHQ7
Ci0gICAgaWYgKCFib29sZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAg
ICAgIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJvb2xlYW5XaXRo
RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBO
dWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0ID0gZmFsc2U7
Ci0gICAgSlNWYWx1ZSBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVy
PGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKLSAgICBpZiAoIWJv
b2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9vbGVh
bldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0aW9uYXJ5TWVtYmVyIikpOwotICAgIENvbnZlcnRl
cjxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD46Ok9wdGlvbmFsVmFs
dWUgZGljdGlvbmFyeU1lbWJlcjsKLSAgICBpZiAoIWRpY3Rpb25hcnlNZW1iZXJWYWx1ZS5pc1Vu
ZGVmaW5lZCgpKSB7Ci0gICAgICAgIGRpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFy
eTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oc3RhdGUsIGRpY3Rp
b25hcnlNZW1iZXJWYWx1ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0IikpOwotICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdDsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29u
dmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVs
dFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gVGVz
dE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVl
V2l0aEVtcHR5U3RyaW5nRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0IikpOwotICAgIFRlc3RP
Ymo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0OwotICAg
IGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRWYWx1ZS5pc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0
ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRo
RW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBlbnVtZXJhdGlvblZhbHVl
V2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbXB0eVN0cmluZzsK
LSAgICBKU1ZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxs
T3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIp
KTsKLSAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1l
cmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKLSAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRo
b3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1
ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1l
cmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBpbnRlZ2VyVmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50ZWdlciIpKTsKLSAgICBDb252
ZXJ0ZXI8aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgaW50ZWdlcjsKLSAgICBpZiAoIWludGVnZXJW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGludGVnZXIgPSBjb252ZXJ0PGludDMyX3Q+
KHN0YXRlLCBpbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIGlu
dGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImlu
dGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICBpbnQzMl90IGludGVnZXJXaXRoRGVmYXVsdDsKLSAg
ICBpZiAoIWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
aW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBpbnRlZ2VyV2l0
aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgbGFyZ2VJbnRlZ2VyVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOwotICAgIENvbnZlcnRlcjxpbnQ2
NF90Pjo6T3B0aW9uYWxWYWx1ZSBsYXJnZUludGVnZXI7Ci0gICAgaWYgKCFsYXJnZUludGVnZXJW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGxhcmdlSW50ZWdlciA9IGNvbnZlcnQ8aW50
NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAg
SlNWYWx1ZSBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpOwotICAgIGludDY0X3QgbGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBj
b252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBO
dWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSAw
OwotICAgIEpTVmFsdWUgbnVsbGFibGVOb2RlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAibnVsbGFibGVOb2RlIikpOwotICAgIE5vZGUqIG51bGxhYmxlTm9kZTsKLSAgICBp
ZiAoIW51bGxhYmxlTm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgbnVsbGFibGVO
b2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG51bGxhYmxlTm9k
ZVZhbHVlLCBJc051bGxhYmxlOjpZZXMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZQotICAgICAgICBudWxsYWJsZU5vZGUgPSBu
dWxscHRyOwotICAgIEpTVmFsdWUgcmVzdHJpY3RlZERvdWJsZVZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7Ci0gICAgQ29udmVydGVyPGRv
dWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZERvdWJsZTsKLSAgICBpZiAoIXJlc3RyaWN0
ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHJlc3RyaWN0ZWREb3VibGUg
PSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSwgU2hvdWxkQWxs
b3dOb25GaW5pdGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRG91Ymxl
V2l0aERlZmF1bHQiKSk7Ci0gICAgZG91YmxlIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdDsK
LSAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKLSAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydDxkb3VibGU+
KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Ok5vKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0g
MDsKLSAgICBKU1ZhbHVlIHJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKTsKLSAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpP
cHRpb25hbFZhbHVlIHJlc3RyaWN0ZWRGbG9hdDsKLSAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxm
bG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRGbG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6
Tm8pOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwot
ICAgIH0KLSAgICBKU1ZhbHVlIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUgPSBpc051
bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSk7
Ci0gICAgZmxvYXQgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFyZXN0cmlj
dGVkRmxvYXRXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcmVzdHJp
Y3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgc2VxdWVu
Y2VPZlN0cmluZ3NWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzZXF1ZW5j
ZU9mU3RyaW5ncyIpKTsKLSAgICBDb252ZXJ0ZXI8VmVjdG9yPFN0cmluZz4+OjpPcHRpb25hbFZh
bHVlIHNlcXVlbmNlT2ZTdHJpbmdzOwotICAgIGlmICghc2VxdWVuY2VPZlN0cmluZ3NWYWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzID0gY29udmVydDxWZWN0
b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVl
IHNtYWxsSW50ZWdlckNsYW1wZWRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJzbWFsbEludGVnZXJDbGFtcGVkIikpOwotICAgIENvbnZlcnRlcjxpbnQ4X3Q+OjpPcHRpb25h
bFZhbHVlIHNtYWxsSW50ZWdlckNsYW1wZWQ7Ci0gICAgaWYgKCFzbWFsbEludGVnZXJDbGFtcGVk
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBzbWFsbEludGVnZXJDbGFtcGVkID0gY29u
dmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUsIENsYW1wKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0g
ICAgSlNWYWx1ZSBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpOwotICAgIENvbnZlcnRl
cjxpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlm
ICghc21hbGxJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAg
IHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbElu
dGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBz
bWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2VWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVk
ID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSk7Ci0gICAg
Q29udmVydGVyPHVpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5m
b3JjZWRSYW5nZTsKLSAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNl
ZFJhbmdlID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZv
cmNlZFJhbmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpTVmFsdWUgc21hbGxVbnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgdWludDhfdCBzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlmICghc21hbGxVbnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHNtYWxsVW5zaWduZWRJ
bnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgc3RyaW5n
V2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdX
aXRoRGVmYXVsdCIpKTsKLSAgICBTdHJpbmcgc3RyaW5nV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCFz
dHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc3RyaW5nV2l0
aERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAg
IH0gZWxzZQotICAgICAgICBzdHJpbmdXaXRoRGVmYXVsdCA9ICJkZWZhdWx0U3RyaW5nIjsKLSAg
ICBKU1ZhbHVlIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPFN0cmlu
Zz46Ok9wdGlvbmFsVmFsdWUgc3RyaW5nV2l0aG91dERlZmF1bHQ7Ci0gICAgaWYgKCFzdHJpbmdX
aXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgc3RyaW5nV2l0aG91
dERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFs
dWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwot
ICAgIH0KLSAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZERvdWJsZVZhbHVlID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKTsKLSAgICBDb252ZXJ0ZXI8
ZG91YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGU7Ci0gICAgaWYgKCF1bnJl
c3RyaWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVucmVzdHJpY3Rl
ZERvdWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUs
IFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHVucmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5y
ZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7Ci0gICAgZG91YmxlIHVucmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0OwotICAgIGlmICghdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVs
dFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgdW5yZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgdW5yZXN0cmljdGVkRmxv
YXRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9h
dCIpKTsKLSAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpPcHRpb25hbFZhbHVlIHVucmVzdHJpY3RlZEZs
b2F0OwotICAgIGlmICghdW5yZXN0cmljdGVkRmxvYXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0g
ICAgICAgIHVucmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJp
Y3RlZEZsb2F0VmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVl
IHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOwotICAgIGZsb2F0IHVu
cmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7Ci0gICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFdp
dGhEZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICB1bnJlc3RyaWN0ZWRGbG9h
dFdpdGhEZWZhdWx0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOwotICAgIEpTVmFsdWUgdW5zaWduZWRJ
bnRlZ2VyVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRl
Z2VyIikpOwotICAgIENvbnZlcnRlcjx1aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgdW5zaWduZWRJ
bnRlZ2VyOwotICAgIGlmICghdW5zaWduZWRJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewot
ICAgICAgICB1bnNpZ25lZEludGVnZXIgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWdu
ZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
dW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7Ci0gICAgdWludDMyX3QgdW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHQ7Ci0gICAgaWYgKCF1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSBj
b252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgTnVsbG9wdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZh
dWx0ID0gMDsKLSAgICBKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUgPSBpc051bGxP
clVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSk7Ci0gICAgQ29u
dmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSB1bnNpZ25lZExhcmdlSW50ZWdlcjsKLSAg
ICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNpZ25l
ZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSB1bnNp
Z25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKLSAgICB1aW50NjRf
dCB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0OwotICAgIGlmICghdW5zaWduZWRMYXJn
ZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdW5zaWdu
ZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNp
Z25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxz
ZQotICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKLSAgICByZXR1
cm4gVGVzdE9iajo6RGljdGlvbmFyeSB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhvdXRE
ZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRo
RGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5X
aXRoRGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShzZXF1
ZW5jZU9mU3RyaW5ncyksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUodW5yZXN0
cmljdGVkRG91YmxlKSwgV1RGTW92ZShyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxv
YXQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1v
dmUoc21hbGxJbnRlZ2VyQ2xhbXBlZCksIFdURk1vdmUoc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSksIFdURk1vdmUoc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoaW50ZWdlciksIFdURk1vdmUo
aW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXIpLCBXVEZNb3ZlKHVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShsYXJnZUludGVnZXIpLCBXVEZNb3Zl
KGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlciks
IFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobnVsbGFi
bGVOb2RlKSwgV1RGTW92ZShhbnlWYWx1ZSksIFdURk1vdmUoYW55VHlwZWRlZlZhbHVlKSwgZGlj
dGlvbmFyeU1lbWJlci52YWx1ZSgpIH07Ci19Ci0KLXRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uYXJ5
PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsPihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc051
bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgYXV0byogb2Jq
ZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0g
ICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVs
bG9wdDsKLSAgICB9Ci0gICAgaWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9
PSBSZWdFeHBPYmplY3RUeXBlKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRo
cm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBi
b29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmlu
ZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25h
bFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdDsKLSAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVm
YXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0
ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAg
ICBKU1ZhbHVlIG5vbk51bGxhYmxlTm9kZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1Vu
ZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKTsKLSAgICBOb2RlKiBub25OdWxsYWJsZU5vZGU7Ci0g
ICAgaWYgKCFub25OdWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIG5v
bk51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBu
b25OdWxsYWJsZU5vZGVWYWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0
OwotICAgIH0KLSAgICBKU1ZhbHVlIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlID0gaXNO
dWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKTsK
LSAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlcjsKLSAgICBp
ZiAoIXJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6
RGljdGlvbmFyeT4oc3RhdGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSByZXF1aXJlZEVudW1lcmF0aW9uVmFs
dWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWUiKSk7Ci0gICAgVGVzdE9iajo6RW51bVR5cGUgcmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlOwotICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUuaXNVbmRlZmluZWQo
KSkgewotICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6
OkVudW1UeXBlPihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlVmFsdWUpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJl
dHVybiBOdWxsb3B0OwotICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGROb3RUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSks
IFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51bGxhYmxlTm9kZSwgcmVxdWly
ZWREaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsKLX0KLQotdGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4gY29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBib29sIGlzTnVs
bE9yVW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBhdXRvKiBvYmpl
Y3QgPSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxs
b3B0OwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09
IFJlZ0V4cE9iamVjdFR5cGUpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhy
b3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBKU1ZhbHVlIGJv
b2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFs
VmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OwotICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHQg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAg
IEpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1Vu
ZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVydGVyPFRlc3RPYmo6OkVudW1U
eXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwotICAgIGlmICghZW51bWVyYXRp
b25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZSA9
IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAg
IH0KLSAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGwg
eyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVs
dCkgfTsKLX0KLQotdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4g
Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBib29sIGlzTnVsbE9y
VW5kZWZpbmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKLSAgICBhdXRvKiBvYmplY3Qg
PSBpc051bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0
OwotICAgIH0KLSAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IFJl
Z0V4cE9iamVjdFR5cGUpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7Ci0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIH0KLSAgICBKU1ZhbHVlIGJvb2xl
YW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVmaW5lZCgp
IDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJv
b2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKLSAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFs
dWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OwotICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZhdWx0
VmFsdWUuaXNVbmRlZmluZWQoKSkgewotICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHQgPSBj
b252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQotICAgIEpT
VmFsdWUgZW51bWVyYXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7Ci0gICAgQ29udmVydGVyPFRlc3RPYmo6OkVudW1UeXBl
Pjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwotICAgIGlmICghZW51bWVyYXRpb25W
YWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgZW51bWVyYXRpb25WYWx1ZSA9IGNv
bnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJhdGlvblZhbHVlVmFsdWUpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0K
LSAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBXVEZNb3ZlKGVudW1lcmF0aW9u
VmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKLX0KLQotdGVtcGxhdGU8
PiBPcHRpb25hbDxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PiBjb252ZXJ0RGljdGlvbmFyeTxU
ZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpc051
bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgaWYg
KFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIxVmFsdWUgPSBp
c051bGxPclVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKLSAgICBDb252
ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKLSAgICBpZiAoIXBhcmVu
dE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjEgPSBj
b252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHBh
cmVudE1lbWJlcjJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJlbnRN
ZW1iZXIyIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBwYXJlbnRNZW1i
ZXIyOwotICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAg
ICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJlcjJWYWx1
ZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0g
ICAgfQotICAgIHJldHVybiBUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5IHsgV1RGTW92ZShwYXJl
bnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSB9OwotfQotCi10ZW1wbGF0ZTw+IE9w
dGlvbmFsPFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9i
ajo6Q2hpbGREaWN0aW9uYXJ5PihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCk7Ci0gICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmluZWQgPyBu
dWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKFVOTElLRUxZKCFpc051bGxPclVu
ZGVmaW5lZCAmJiAhb2JqZWN0KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRo
cm93U2NvcGUpOwotICAgICAgICByZXR1cm4gTnVsbG9wdDsKLSAgICB9Ci0gICAgaWYgKFVOTElL
RUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBSZWdFeHBPYmplY3RUeXBlKSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOwotICAgICAgICByZXR1cm4g
TnVsbG9wdDsKLSAgICB9Ci0gICAgSlNWYWx1ZSBwYXJlbnRNZW1iZXIxVmFsdWUgPSBpc051bGxP
clVuZGVmaW5lZCA/IGpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKLSAgICBDb252ZXJ0ZXI8
Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKLSAgICBpZiAoIXBhcmVudE1lbWJl
cjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIHBhcmVudE1lbWJlcjEgPSBjb252ZXJ0
PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICBKU1ZhbHVlIHBhcmVudE1l
bWJlcjJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJwYXJlbnRNZW1iZXIy
IikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBwYXJlbnRNZW1iZXIyOwot
ICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgcGFy
ZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVudE1lbWJlcjJWYWx1ZSk7Ci0g
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7Ci0gICAgfQot
ICAgIEpTVmFsdWUgY2hpbGRNZW1iZXIxVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IGpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiY2hpbGRNZW1iZXIxIikpOwotICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1
ZSBjaGlsZE1lbWJlcjE7Ci0gICAgaWYgKCFjaGlsZE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7Ci0gICAgICAgIGNoaWxkTWVtYmVyMSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVt
YmVyMVZhbHVlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKLSAgICB9Ci0gICAgSlNWYWx1ZSBjaGlsZE1lbWJlcjJWYWx1ZSA9IGlzTnVsbE9yVW5k
ZWZpbmVkID8ganNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7Ci0gICAgQ29udmVydGVyPGJvb2w+
OjpPcHRpb25hbFZhbHVlIGNoaWxkTWVtYmVyMjsKLSAgICBpZiAoIWNoaWxkTWVtYmVyMlZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgY2hpbGRNZW1iZXIyID0gY29udmVydDxib29sPihz
dGF0ZSwgY2hpbGRNZW1iZXIyVmFsdWUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOwotICAgIH0KLSAgICByZXR1cm4gVGVzdE9iajo6Q2hpbGREaWN0
aW9uYXJ5IHsgV1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSwg
V1RGTW92ZShjaGlsZE1lbWJlcjIpLCBXVEZNb3ZlKGNoaWxkTWVtYmVyMSkgfTsKLX0KLQogLy8g
RnVuY3Rpb25zCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDkxZDdlYTlj
MTk4MDRhMTQwYjNlYmI3MjRiODU1ZDFiZWMyY2FkMTkuLjQzYjM0ZjA2OWFiMTZmOGRjNTVkY2Yw
NWU4NmU4N2JlNDQwZGUxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTIwLDggKzIwLDExIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
LmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA0LDUgKzEwNyw3MjIgQEAgaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGcKIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
ZXN0T2JqPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0T2JqOwogfTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXMoKTsKKworSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpF
eGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtVHlwZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFs
dWVUcmFpdHM8VGVzdE9iajo6RW51bVR5cGU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyog
YXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBU
ZXN0T2JqOjpFbnVtVHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RW51
bVR5cGU+IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3RyaW5nOworICAgIGlmIChzdHJpbmdWYWx1
ZSA9PSAiZW51bVZhbHVlMSIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtVHlwZTo6RW51
bVZhbHVlMTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkVudW1WYWx1ZTIiKQorICAgICAgICBy
ZXR1cm4gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTI7CisgICAgaWYgKHN0cmluZ1ZhbHVl
ID09ICJFbnVtVmFsdWUzIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVt
VmFsdWUzOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0
T2JqOjpFbnVtVHlwZSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIHZhbHVlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpCit7CisgICAgcmV0dXJuICJc
IlwiLCBcImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wiIjsKK30K
KworSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0
T2JqOjpPcHRpb25hbCk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9i
ajo6T3B0aW9uYWw+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpPcHRpb25h
bCB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQorfTsK
KwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6T3B0aW9uYWw+IHBhcnNlPFRl
c3RPYmo6Ok9wdGlvbmFsPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
KyAgICBpZiAoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6
T3B0aW9uYWw6OkVtcHR5U3RyaW5nOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxW
YWx1ZTEiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUx
OworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAiT3B0aW9uYWxWYWx1ZTIiKQorICAgICAgICByZXR1
cm4gVGVzdE9iajo6T3B0aW9uYWw6Ok9wdGlvbmFsVmFsdWUyOworICAgIGlmIChzdHJpbmdWYWx1
ZSA9PSAiT3B0aW9uYWxWYWx1ZTMiKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6T3B0aW9uYWw6
Ok9wdGlvbmFsVmFsdWUzOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlu
bGluZSBUZXN0T2JqOjpPcHRpb25hbCBjb252ZXJ0PFRlc3RPYmo6Ok9wdGlvbmFsPihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oc3RhdGUsIHZh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpCit7CisgICAg
cmV0dXJuICJcIlwiLCBcIk9wdGlvbmFsVmFsdWUxXCIsIFwiT3B0aW9uYWxWYWx1ZTJcIiwgXCJP
cHRpb25hbFZhbHVlM1wiIjsKK30KKworSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUo
SlNDOjpFeGVjU3RhdGUqLCBBbHRlcm5hdGVFbnVtTmFtZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTVmFsdWVUcmFpdHM8QWx0ZXJuYXRlRW51bU5hbWU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0
cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqLCBBbHRlcm5hdGVFbnVtTmFtZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8QWx0ZXJu
YXRlRW51bU5hbWU+IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUu
dG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImVudW1WYWx1ZTEi
KQorICAgICAgICByZXR1cm4gQWx0ZXJuYXRlRW51bU5hbWU6OkVudW1WYWx1ZTE7CisgICAgaWYg
KHN0cmluZ1ZhbHVlID09ICJFbnVtVmFsdWUyIikKKyAgICAgICAgcmV0dXJuIEFsdGVybmF0ZUVu
dW1OYW1lOjpFbnVtVmFsdWUyOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+
IGlubGluZSBBbHRlcm5hdGVFbnVtTmFtZSBjb252ZXJ0PEFsdGVybmF0ZUVudW1OYW1lPihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxBbHRlcm5hdGVFbnVtTmFtZT4oc3RhdGUs
IHZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPEFsdGVybmF0ZUVudW1OYW1lPigpCit7Cisg
ICAgcmV0dXJuICJcImVudW1WYWx1ZTFcIiwgXCJFbnVtVmFsdWUyXCIiOworfQorCisjaWYgRU5B
QkxFKENvbmRpdGlvbjEpCisKK0pTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEpTQzo6
RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUEpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVl
VHJhaXRzPFRlc3RPYmo6OkVudW1BPiB7CisgICAgc3RhdGljIEpTQzo6SlNTdHJpbmcqIGFycmF5
SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9i
ajo6RW51bUEgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7
IH0KK307CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1BPiBwYXJz
ZTxUZXN0T2JqOjpFbnVtQT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJBIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OkVu
dW1BOjpBOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0
T2JqOjpFbnVtQSBjb252ZXJ0PFRlc3RPYmo6OkVudW1BPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byBy
ZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpFbnVtQT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1
ZSgpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1BPigpCit7CisgICAgcmV0dXJuICJcIkFcIiI7Cit9CisK
KyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQor
CitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RP
Ymo6OkVudW1CKTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpF
bnVtQj4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1CIHZhbHVlKSB7
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0
ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpFbnVtQj4gcGFyc2U8VGVzdE9iajo6RW51bUI+
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8g
c3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGlmIChzdHJpbmdW
YWx1ZSA9PSAiQiIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpFbnVtQjo6QjsKKyAgICByZXR1
cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgVGVzdE9iajo6RW51bUIgY29udmVy
dDxUZXN0T2JqOjpFbnVtQj4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0ID0gcGFyc2U8VGVz
dE9iajo6RW51bUI+KHN0YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7
CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwordGVtcGxh
dGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2Jq
OjpFbnVtQj4oKQoreworICAgIHJldHVybiAiXCJCXCIiOworfQorCisjZW5kaWYKKworI2lmIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKworSlNDOjpKU1N0cmluZyog
anNTdHJpbmdXaXRoQ2FjaGUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQyk7CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUM+IHsKKyAgICBzdGF0
aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQyB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9u
YWw8VGVzdE9iajo6RW51bUM+IHBhcnNlPFRlc3RPYmo6OkVudW1DPihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gIkMiKQorICAg
ICAgICByZXR1cm4gVGVzdE9iajo6RW51bUM6OkM7CisgICAgcmV0dXJuIE51bGxvcHQ7Cit9CisK
K3RlbXBsYXRlPD4gaW5saW5lIFRlc3RPYmo6OkVudW1DIGNvbnZlcnQ8VGVzdE9iajo6RW51bUM+
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkVudW1DPihzdGF0
ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGNvbnN0
IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCkKK3sKKyAg
ICByZXR1cm4gIlwiQ1wiIjsKK30KKworI2VuZGlmCisKK0pTQzo6SlNTdHJpbmcqIGpzU3RyaW5n
V2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6S2luZCk7CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6S2luZD4geworICAgIHN0YXRpYyBKU0M6OkpT
U3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCosIFRlc3RPYmo6OktpbmQgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCB2YWx1ZSk7IH0KK307CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6
OktpbmQ+IHBhcnNlPFRlc3RPYmo6OktpbmQ+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAicXVpY2siKQorICAgICAgICByZXR1
cm4gVGVzdE9iajo6S2luZDo6UXVpY2s7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJkZWFkIikK
KyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OktpbmQ6OkRlYWQ7CisgICAgcmV0dXJuIE51bGxvcHQ7
Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIFRlc3RPYmo6OktpbmQgY29udmVydDxUZXN0T2JqOjpL
aW5kPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byByZXN1bHQgPSBwYXJzZTxUZXN0T2JqOjpLaW5kPihz
dGF0ZSwgdmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgeworICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4oKQorewor
ICAgIHJldHVybiAiXCJxdWlja1wiLCBcImRlYWRcIiI7Cit9CisKK0pTQzo6SlNTdHJpbmcqIGpz
U3RyaW5nV2l0aENhY2hlKEpTQzo6RXhlY1N0YXRlKiwgVGVzdE9iajo6U2l6ZSk7CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8VGVzdE9iajo6U2l6ZT4geworICAgIHN0YXRpYyBK
U0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3RPYmo6OlNpemUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCB2YWx1ZSk7IH0KK307CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRl
c3RPYmo6OlNpemU+IHBhcnNlPFRlc3RPYmo6OlNpemU+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOworICAgIGlmIChzdHJpbmdWYWx1ZSA9PSAic21hbGwiKQorICAgICAg
ICByZXR1cm4gVGVzdE9iajo6U2l6ZTo6U21hbGw7CisgICAgaWYgKHN0cmluZ1ZhbHVlID09ICJt
dWNoLW11Y2gtbGFyZ2VyIikKKyAgICAgICAgcmV0dXJuIFRlc3RPYmo6OlNpemU6Ok11Y2hNdWNo
TGFyZ2VyOworICAgIHJldHVybiBOdWxsb3B0OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBUZXN0
T2JqOjpTaXplIGNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVz
dWx0ID0gcGFyc2U8VGVzdE9iajo6U2l6ZT4oc3RhdGUsIHZhbHVlKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXJlc3VsdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgp
OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OlNpemU+KCkKK3sKKyAgICByZXR1cm4gIlwic21hbGxcIiwgXCJtdWNo
LW11Y2gtbGFyZ2VyXCIiOworfQorCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShK
U0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkNvbmZpZGVuY2UpOworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkNvbmZpZGVuY2U+IHsKKyAgICBzdGF0aWMgSlNDOjpK
U1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqLCBUZXN0T2JqOjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxU
ZXN0T2JqOjpDb25maWRlbmNlPiBwYXJzZTxUZXN0T2JqOjpDb25maWRlbmNlPihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0cmluZ1ZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBpZiAoc3RyaW5nVmFsdWUgPT0gImhp
Z2giKQorICAgICAgICByZXR1cm4gVGVzdE9iajo6Q29uZmlkZW5jZTo6SGlnaDsKKyAgICBpZiAo
c3RyaW5nVmFsdWUgPT0gImtpbmRhLWxvdyIpCisgICAgICAgIHJldHVybiBUZXN0T2JqOjpDb25m
aWRlbmNlOjpLaW5kYUxvdzsKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKwordGVtcGxhdGU8PiBp
bmxpbmUgVGVzdE9iajo6Q29uZmlkZW5jZSBjb252ZXJ0PFRlc3RPYmo6OkNvbmZpZGVuY2U+KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvIHJlc3VsdCA9IHBhcnNlPFRlc3RPYmo6OkNvbmZpZGVuY2U+KHN0
YXRlLCB2YWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7CisgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigp
Cit7CisgICAgcmV0dXJuICJcImhpZ2hcIiwgXCJraW5kYS1sb3dcIiI7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5
PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBib29sIGlzTnVsbE9yVW5kZWZp
bmVkID0gdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICBhdXRvKiBvYmplY3QgPSBpc051
bGxPclVuZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
IH0KKyAgICBpZiAoVU5MSUtFTFkob2JqZWN0ICYmIG9iamVjdC0+dHlwZSgpID09IEpTQzo6UmVn
RXhwT2JqZWN0VHlwZSkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Nj
b3BlKTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBh
bnlUeXBlZGVmVmFsdWVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5l
ZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpOworICAgIEpTQzo6SlNWYWx1ZSBhbnlUeXBlZGVmVmFs
dWU7CisgICAgaWYgKCFhbnlUeXBlZGVmVmFsdWVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnQ8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgYW55VHlw
ZWRlZlZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBhbnlUeXBlZGVmVmFsdWUgPSBqc1VuZGVm
aW5lZCgpOworICAgIEpTQzo6SlNWYWx1ZSBhbnlWYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKTsKKyAgICBKU0M6OkpTVmFsdWUg
YW55VmFsdWU7CisgICAgaWYgKCFhbnlWYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAg
ICAgYW55VmFsdWUgPSBjb252ZXJ0PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIGFueVZhbHVlVmFsdWUp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAg
IH0gZWxzZQorICAgICAgICBhbnlWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgSlNDOjpKU1Zh
bHVlIGJvb2xlYW5XaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6Ompz
VW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJib29sZWFuV2l0aERlZmF1bHQiKSk7CisgICAgYm9vbCBib29sZWFuV2l0
aERlZmF1bHQ7CisgICAgaWYgKCFib29sZWFuV2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGJv
b2xlYW5XaXRoRGVmYXVsdFZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYm9vbGVhbldpdGhEZWZhdWx0
ID0gZmFsc2U7CisgICAgSlNDOjpKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0g
aXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3Rh
dGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERl
ZmF1bHQiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRo
b3V0RGVmYXVsdDsKKyAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihz
dGF0ZSwgYm9vbGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgZGlj
dGlvbmFyeU1lbWJlclZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJkaWN0aW9uYXJ5TWVtYmVyIikpOworICAgIENvbnZlcnRlcjxUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD46Ok9wdGlvbmFsVmFsdWUgZGljdGlvbmFyeU1lbWJl
cjsKKyAgICBpZiAoIWRpY3Rpb25hcnlNZW1iZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICAgIGRpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oc3RhdGUsIGRpY3Rpb25hcnlNZW1iZXJWYWx1ZSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAg
fQorICAgIEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHRWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdp
dGhEZWZhdWx0IikpOworICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRo
RGVmYXVsdDsKKyAgICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVy
dDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdFZh
bHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gVGVzdE9i
ajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7CisgICAgSlNDOjpKU1ZhbHVlIGVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0Iikp
OworICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdE
ZWZhdWx0OworICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHRW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlT
dHJpbmdEZWZhdWx0ID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0
aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBlbnVt
ZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IFRlc3RPYmo6OkVudW1UeXBlOjpF
bXB0eVN0cmluZzsKKyAgICBKU0M6OkpTVmFsdWUgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1l
cmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8VGVzdE9iajo6RW51
bVR5cGU+OjpPcHRpb25hbFZhbHVlIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdDsKKyAg
ICBpZiAoIWVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkp
IHsKKyAgICAgICAgZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydDxUZXN0
T2JqOjpFbnVtVHlwZT4oc3RhdGUsIGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdFZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAg
ICB9CisgICAgSlNDOjpKU1ZhbHVlIGludGVnZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8g
SlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50ZWdlciIpKTsKKyAgICBDb252ZXJ0ZXI8aW50MzJfdD46
Ok9wdGlvbmFsVmFsdWUgaW50ZWdlcjsKKyAgICBpZiAoIWludGVnZXJWYWx1ZS5pc1VuZGVmaW5l
ZCgpKSB7CisgICAgICAgIGludGVnZXIgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBpbnRlZ2Vy
VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgaW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImlu
dGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICBpbnQzMl90IGludGVnZXJXaXRoRGVmYXVsdDsKKyAg
ICBpZiAoIWludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
aW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgaW50ZWdlcldpdGhE
ZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBpbnRlZ2VyV2l0
aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBsYXJnZUludGVnZXJWYWx1ZSA9IGlzTnVs
bE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikpOworICAg
IENvbnZlcnRlcjxpbnQ2NF90Pjo6T3B0aW9uYWxWYWx1ZSBsYXJnZUludGVnZXI7CisgICAgaWYg
KCFsYXJnZUludGVnZXJWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGxhcmdlSW50ZWdl
ciA9IGNvbnZlcnQ8aW50NjRfdD4oc3RhdGUsIGxhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0
KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0VmFsdWUg
PSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldp
dGhEZWZhdWx0IikpOworICAgIGludDY0X3QgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQ7CisgICAg
aWYgKCFsYXJnZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAg
ICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0PGludDY0X3Q+KHN0YXRlLCBsYXJn
ZUludGVnZXJXaXRoRGVmYXVsdFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBudWxsYWJs
ZU5vZGVWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVs
bGFibGVOb2RlIikpOworICAgIE5vZGUqIG51bGxhYmxlTm9kZTsKKyAgICBpZiAoIW51bGxhYmxl
Tm9kZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgbnVsbGFibGVOb2RlID0gY29udmVy
dFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG51bGxhYmxlTm9kZVZhbHVlLCBJc051
bGxhYmxlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBudWxsYWJsZU5vZGUgPSBudWxscHRyOworICAg
IEpTQzo6SlNWYWx1ZSByZXN0cmljdGVkRG91YmxlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSk7CisgICAgQ29udmVydGVy
PGRvdWJsZT46Ok9wdGlvbmFsVmFsdWUgcmVzdHJpY3RlZERvdWJsZTsKKyAgICBpZiAoIXJlc3Ry
aWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHJlc3RyaWN0ZWREb3Vi
bGUgPSBjb252ZXJ0PGRvdWJsZT4oc3RhdGUsIHJlc3RyaWN0ZWREb3VibGVWYWx1ZSwgU2hvdWxk
QWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CisgICAgZG91YmxlIHJlc3RyaWN0ZWRE
b3VibGVXaXRoRGVmYXVsdDsKKyAgICBpZiAoIXJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdFZh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCByZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHRWYWx1
ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0ID0gMDsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdHJpY3RlZEZsb2F0VmFs
dWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRG
bG9hdCIpKTsKKyAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpPcHRpb25hbFZhbHVlIHJlc3RyaWN0ZWRG
bG9hdDsKKyAgICBpZiAoIXJlc3RyaWN0ZWRGbG9hdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydDxmbG9hdD4oc3RhdGUsIHJlc3RyaWN0ZWRG
bG9hdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUg
cmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlND
Ojpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSk7CisgICAgZmxv
YXQgcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQ7CisgICAgaWYgKCFyZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgcmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQgPSBjb252ZXJ0PGZsb2F0PihzdGF0ZSwgcmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHRWYWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSBzZXF1ZW5jZU9m
U3RyaW5nc1ZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBv
YmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
ZXF1ZW5jZU9mU3RyaW5ncyIpKTsKKyAgICBDb252ZXJ0ZXI8VmVjdG9yPFN0cmluZz4+OjpPcHRp
b25hbFZhbHVlIHNlcXVlbmNlT2ZTdHJpbmdzOworICAgIGlmICghc2VxdWVuY2VPZlN0cmluZ3NW
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHNlcXVlbmNlT2ZTdHJpbmdzID0gY29udmVy
dDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIHNlcXVlbmNlT2ZTdHJpbmdzVmFsdWUpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBK
U0M6OkpTVmFsdWUgc21hbGxJbnRlZ2VyQ2xhbXBlZFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQg
PyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpOworICAgIENvbnZl
cnRlcjxpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsSW50ZWdlckNsYW1wZWQ7CisgICAgaWYg
KCFzbWFsbEludGVnZXJDbGFtcGVkVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBzbWFs
bEludGVnZXJDbGFtcGVkID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJDbGFt
cGVkVmFsdWUsIENsYW1wKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxs
SW50ZWdlcldpdGhEZWZhdWx0IikpOworICAgIENvbnZlcnRlcjxpbnQ4X3Q+OjpPcHRpb25hbFZh
bHVlIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghc21hbGxJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHNtYWxsSW50ZWdlcldpdGhEZWZh
dWx0ID0gY29udmVydDxpbnQ4X3Q+KHN0YXRlLCBzbWFsbEludGVnZXJXaXRoRGVmYXVsdFZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHNtYWxsVW5zaWduZWRJbnRl
Z2VyRW5mb3JjZWRSYW5nZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZp
bmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSk7CisgICAgQ29udmVy
dGVyPHVpbnQ4X3Q+OjpPcHRpb25hbFZhbHVlIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRS
YW5nZTsKKyAgICBpZiAoIXNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZVZhbHVlLmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdl
ID0gY29udmVydDx1aW50OF90PihzdGF0ZSwgc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJh
bmdlVmFsdWUsIEVuZm9yY2VSYW5nZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBzbWFsbFVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRl
ZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgdWludDhf
dCBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghc21hbGxVbnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc21hbGxV
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHNtYWxs
VW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNl
CisgICAgICAgIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6
SlNWYWx1ZSBzdHJpbmdXaXRoRGVmYXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6
OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKTsKKyAgICBTdHJpbmcgc3RyaW5n
V2l0aERlZmF1bHQ7CisgICAgaWYgKCFzdHJpbmdXaXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgc3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0PFN0cmluZz4oc3RhdGUs
IHN0cmluZ1dpdGhEZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICBzdHJpbmdXaXRoRGVmYXVs
dCA9ICJkZWZhdWx0U3RyaW5nIjsKKyAgICBKU0M6OkpTVmFsdWUgc3RyaW5nV2l0aG91dERlZmF1
bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0
LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5n
V2l0aG91dERlZmF1bHQiKSk7CisgICAgQ29udmVydGVyPFN0cmluZz46Ok9wdGlvbmFsVmFsdWUg
c3RyaW5nV2l0aG91dERlZmF1bHQ7CisgICAgaWYgKCFzdHJpbmdXaXRob3V0RGVmYXVsdFZhbHVl
LmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0
PFN0cmluZz4oc3RhdGUsIHN0cmluZ1dpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpT
VmFsdWUgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6
anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKTsKKyAgICBDb252ZXJ0ZXI8ZG91
YmxlPjo6T3B0aW9uYWxWYWx1ZSB1bnJlc3RyaWN0ZWREb3VibGU7CisgICAgaWYgKCF1bnJlc3Ry
aWN0ZWREb3VibGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZERv
dWJsZSA9IGNvbnZlcnQ8ZG91YmxlPihzdGF0ZSwgdW5yZXN0cmljdGVkRG91YmxlVmFsdWUsIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5yZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVm
aW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSk7CisgICAgZG91YmxlIHVu
cmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0OworICAgIGlmICghdW5yZXN0cmljdGVkRG91Ymxl
V2l0aERlZmF1bHRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0ID0gY29udmVydDxkb3VibGU+KHN0YXRlLCB1bnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdFZhbHVlLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1
ZSB1bnJlc3RyaWN0ZWRGbG9hdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKTsKKyAgICBDb252ZXJ0ZXI8ZmxvYXQ+OjpP
cHRpb25hbFZhbHVlIHVucmVzdHJpY3RlZEZsb2F0OworICAgIGlmICghdW5yZXN0cmljdGVkRmxv
YXRWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHVucmVzdHJpY3RlZEZsb2F0ID0gY29u
dmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0VmFsdWUsIFNob3VsZEFsbG93Tm9u
RmluaXRlOjpZZXMpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51
bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdFZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmpl
Y3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJl
c3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpOworICAgIGZsb2F0IHVucmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQ7CisgICAgaWYgKCF1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0VmFsdWUu
aXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0g
Y29udmVydDxmbG9hdD4oc3RhdGUsIHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHRWYWx1ZSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHVucmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQgPSAwOworICAgIEpTQzo6SlNWYWx1ZSB1bnNpZ25lZEludGVnZXJWYWx1
ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQo
JnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRl
Z2VyIikpOworICAgIENvbnZlcnRlcjx1aW50MzJfdD46Ok9wdGlvbmFsVmFsdWUgdW5zaWduZWRJ
bnRlZ2VyOworICAgIGlmICghdW5zaWduZWRJbnRlZ2VyVmFsdWUuaXNVbmRlZmluZWQoKSkgewor
ICAgICAgICB1bnNpZ25lZEludGVnZXIgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWdu
ZWRJbnRlZ2VyVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgdW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpq
c1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSk7CisgICAgdWludDMy
X3QgdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQ7CisgICAgaWYgKCF1bnNpZ25lZEludGVnZXJX
aXRoRGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5zaWduZWRJbnRlZ2Vy
V2l0aERlZmF1bHQgPSBjb252ZXJ0PHVpbnQzMl90PihzdGF0ZSwgdW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHRWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfSBlbHNlCisgICAgICAgIHVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICBKU0M6OkpTVmFsdWUgdW5zaWduZWRMYXJnZUlu
dGVnZXJWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5z
aWduZWRMYXJnZUludGVnZXIiKSk7CisgICAgQ29udmVydGVyPHVpbnQ2NF90Pjo6T3B0aW9uYWxW
YWx1ZSB1bnNpZ25lZExhcmdlSW50ZWdlcjsKKyAgICBpZiAoIXVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNv
bnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50ZWdlclZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxs
b3B0KTsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERl
ZmF1bHRWYWx1ZSA9IGlzTnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5z
aWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKTsKKyAgICB1aW50NjRfdCB1bnNpZ25lZExh
cmdlSW50ZWdlcldpdGhEZWZhdWx0OworICAgIGlmICghdW5zaWduZWRMYXJnZUludGVnZXJXaXRo
RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgdW5zaWduZWRMYXJnZUludGVn
ZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnQ8dWludDY0X3Q+KHN0YXRlLCB1bnNpZ25lZExhcmdlSW50
ZWdlcldpdGhEZWZhdWx0VmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZQorICAgICAgICB1
bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gMDsKKyAgICByZXR1cm4gVGVzdE9iajo6
RGljdGlvbmFyeSB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSwgV1RG
TW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRoRGVmYXVsdCksIFdU
Rk1vdmUoc3RyaW5nV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRoRGVmYXVsdCks
IFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShzZXF1ZW5jZU9mU3RyaW5n
cyksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUodW5yZXN0cmljdGVkRG91Ymxl
KSwgV1RGTW92ZShyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXQpLCBXVEZNb3Zl
KHVucmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCks
IFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxJbnRl
Z2VyQ2xhbXBlZCksIFdURk1vdmUoc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNt
YWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSksIFdURk1vdmUoc21hbGxVbnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoaW50ZWdlciksIFdURk1vdmUoaW50ZWdlcldpdGhE
ZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkSW50ZWdl
cldpdGhEZWZhdWx0KSwgV1RGTW92ZShsYXJnZUludGVnZXIpLCBXVEZNb3ZlKGxhcmdlSW50ZWdl
cldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlciksIFdURk1vdmUodW5z
aWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobnVsbGFibGVOb2RlKSwgV1RG
TW92ZShhbnlWYWx1ZSksIFdURk1vdmUoYW55VHlwZWRlZlZhbHVlKSwgZGljdGlvbmFyeU1lbWJl
ci52YWx1ZSgpIH07Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIE9wdGlvbmFsPFRlc3RPYmo6OkRp
Y3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsPiBjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbD4oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAg
IGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9i
amVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkp
IHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2JqZWN0
LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9
CisgICAgSlNDOjpKU1ZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlID0gaXNOdWxsT3JV
bmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSk7
CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25hbFZhbHVlIGJvb2xlYW5XaXRob3V0RGVmYXVs
dDsKKyAgICBpZiAoIWJvb2xlYW5XaXRob3V0RGVmYXVsdFZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
KyAgICAgICAgYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydDxib29sPihzdGF0ZSwgYm9v
bGVhbldpdGhvdXREZWZhdWx0VmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgbm9uTnVsbGFibGVO
b2RlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51
bGxhYmxlTm9kZSIpKTsKKyAgICBOb2RlKiBub25OdWxsYWJsZU5vZGU7CisgICAgaWYgKCFub25O
dWxsYWJsZU5vZGVWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIG5vbk51bGxhYmxlTm9k
ZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBub25OdWxsYWJsZU5v
ZGVWYWx1ZSwgSXNOdWxsYWJsZTo6Tm8pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIE51bGxvcHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAg
ICBKU0M6OkpTVmFsdWUgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyVmFsdWUgPSBpc051bGxPclVu
ZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIp
KTsKKyAgICBUZXN0T2JqOjpEaWN0aW9uYXJ5IHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlcjsKKyAg
ICBpZiAoIXJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeT4oc3RhdGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlclZhbHVlKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHJlcXVpcmVkRW51bWVy
YXRpb25WYWx1ZVZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVkKCkg
OiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgVGVzdE9iajo6RW51bVR5cGUgcmVx
dWlyZWRFbnVtZXJhdGlvblZhbHVlOworICAgIGlmICghcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVl
VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUg
PSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgcmVxdWlyZWRFbnVtZXJhdGlvblZh
bHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxv
cHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICByZXR1cm4gVGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVk
RW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51
bGxhYmxlTm9kZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xl
cmF0ZU51bGw+IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRl
ZmluZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKFVOTElLRUxZKCFp
c051bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAg
aWYgKFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVj
dFR5cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7Cisg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgYm9vbGVhbldp
dGhvdXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQo
KSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlv
bmFsVmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OworICAgIGlmICghYm9vbGVhbldpdGhvdXRE
ZWZhdWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBib29sZWFuV2l0aG91dERlZmF1
bHQgPSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQor
ICAgIEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5l
ZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgQ29udmVy
dGVyPFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOwor
ICAgIGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAg
ZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVt
ZXJhdGlvblZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRT
aG91bGRUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJv
b2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8
QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+IGNvbnZlcnREaWN0aW9uYXJ5PEFsdGVybmF0ZURpY3Rp
b25hcnlOYW1lPihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYm9vbCBpc051bGxPclVuZGVmaW5lZCA9IHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CisgICAgYXV0byogb2JqZWN0ID0gaXNOdWxsT3JVbmRlZmlu
ZWQgPyBudWxscHRyIDogdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKFVOTElLRUxZKCFpc051
bGxPclVuZGVmaW5lZCAmJiAhb2JqZWN0KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisgICAgaWYg
KFVOTElLRUxZKG9iamVjdCAmJiBvYmplY3QtPnR5cGUoKSA9PSBKU0M6OlJlZ0V4cE9iamVjdFR5
cGUpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUgYm9vbGVhbldpdGhv
dXREZWZhdWx0VmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/IEpTQzo6anNVbmRlZmluZWQoKSA6
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKTsKKyAgICBDb252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFs
VmFsdWUgYm9vbGVhbldpdGhvdXREZWZhdWx0OworICAgIGlmICghYm9vbGVhbldpdGhvdXREZWZh
dWx0VmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBib29sZWFuV2l0aG91dERlZmF1bHQg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBib29sZWFuV2l0aG91dERlZmF1bHRWYWx1ZSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgTnVsbG9wdCk7CisgICAgfQorICAg
IEpTQzo6SlNWYWx1ZSBlbnVtZXJhdGlvblZhbHVlVmFsdWUgPSBpc051bGxPclVuZGVmaW5lZCA/
IEpTQzo6anNVbmRlZmluZWQoKSA6IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSk7CisgICAgQ29udmVydGVy
PFRlc3RPYmo6OkVudW1UeXBlPjo6T3B0aW9uYWxWYWx1ZSBlbnVtZXJhdGlvblZhbHVlOworICAg
IGlmICghZW51bWVyYXRpb25WYWx1ZVZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZW51
bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBlbnVtZXJh
dGlvblZhbHVlVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBX
VEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkg
fTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgT3B0aW9uYWw8VGVzdE9iajo6UGFyZW50RGljdGlv
bmFyeT4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6UGFyZW50RGljdGlvbmFyeT4oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOworICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZh
bHVlLmdldE9iamVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYg
IW9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3Qg
JiYgb2JqZWN0LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9w
dDsKKyAgICB9CisgICAgSlNDOjpKU1ZhbHVlIHBhcmVudE1lbWJlcjFWYWx1ZSA9IGlzTnVsbE9y
VW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICBD
b252ZXJ0ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKKyAgICBpZiAoIXBh
cmVudE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHBhcmVudE1lbWJlcjEg
PSBjb252ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpT
VmFsdWUgcGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJwYXJlbnRNZW1iZXIyIikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9u
YWxWYWx1ZSBwYXJlbnRNZW1iZXIyOworICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5k
ZWZpbmVkKCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUs
IHBhcmVudE1lbWJlcjJWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgTnVsbG9wdCk7CisgICAgfQorICAgIHJldHVybiBUZXN0T2JqOjpQYXJlbnREaWN0aW9u
YXJ5IHsgV1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSB9Owor
fQorCit0ZW1wbGF0ZTw+IGlubGluZSBPcHRpb25hbDxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+
IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkNoaWxkRGljdGlvbmFyeT4oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGJvb2wgaXNOdWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwor
ICAgIGF1dG8qIG9iamVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdl
dE9iamVjdCgpOworICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVj
dCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShvYmplY3QgJiYgb2Jq
ZWN0LT50eXBlKCkgPT0gSlNDOjpSZWdFeHBPYmplY3RUeXBlKSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAg
ICB9CisgICAgSlNDOjpKU1ZhbHVlIHBhcmVudE1lbWJlcjFWYWx1ZSA9IGlzTnVsbE9yVW5kZWZp
bmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRlLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicGFyZW50TWVtYmVyMSIpKTsKKyAgICBDb252ZXJ0
ZXI8Ym9vbD46Ok9wdGlvbmFsVmFsdWUgcGFyZW50TWVtYmVyMTsKKyAgICBpZiAoIXBhcmVudE1l
bWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIHBhcmVudE1lbWJlcjEgPSBjb252
ZXJ0PGJvb2w+KHN0YXRlLCBwYXJlbnRNZW1iZXIxVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIE51bGxvcHQpOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUg
cGFyZW50TWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5kZWZpbmVk
KCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJwYXJlbnRNZW1iZXIyIikpOworICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1
ZSBwYXJlbnRNZW1iZXIyOworICAgIGlmICghcGFyZW50TWVtYmVyMlZhbHVlLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgcGFyZW50TWVtYmVyMiA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIHBhcmVu
dE1lbWJlcjJWYWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
TnVsbG9wdCk7CisgICAgfQorICAgIEpTQzo6SlNWYWx1ZSBjaGlsZE1lbWJlcjFWYWx1ZSA9IGlz
TnVsbE9yVW5kZWZpbmVkID8gSlNDOjpqc1VuZGVmaW5lZCgpIDogb2JqZWN0LT5nZXQoJnN0YXRl
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiY2hpbGRNZW1iZXIxIikpOwor
ICAgIENvbnZlcnRlcjxib29sPjo6T3B0aW9uYWxWYWx1ZSBjaGlsZE1lbWJlcjE7CisgICAgaWYg
KCFjaGlsZE1lbWJlcjFWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGNoaWxkTWVtYmVy
MSA9IGNvbnZlcnQ8Ym9vbD4oc3RhdGUsIGNoaWxkTWVtYmVyMVZhbHVlKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBOdWxsb3B0KTsKKyAgICB9CisgICAgSlNDOjpK
U1ZhbHVlIGNoaWxkTWVtYmVyMlZhbHVlID0gaXNOdWxsT3JVbmRlZmluZWQgPyBKU0M6OmpzVW5k
ZWZpbmVkKCkgOiBvYmplY3QtPmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJjaGlsZE1lbWJlcjIiKSk7CisgICAgQ29udmVydGVyPGJvb2w+OjpPcHRpb25h
bFZhbHVlIGNoaWxkTWVtYmVyMjsKKyAgICBpZiAoIWNoaWxkTWVtYmVyMlZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKKyAgICAgICAgY2hpbGRNZW1iZXIyID0gY29udmVydDxib29sPihzdGF0ZSwgY2hp
bGRNZW1iZXIyVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IE51bGxvcHQpOworICAgIH0KKyAgICByZXR1cm4gVGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5IHsg
V1RGTW92ZShwYXJlbnRNZW1iZXIyKSwgV1RGTW92ZShwYXJlbnRNZW1iZXIxKSwgV1RGTW92ZShj
aGlsZE1lbWJlcjIpLCBXVEZNb3ZlKGNoaWxkTWVtYmVyMSkgfTsKK30KKwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290688</attachid>
            <date>2016-10-04 22:04:13 -0700</date>
            <delta_ts>2016-10-05 09:11:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162929-20161004220101.patch</filename>
            <type>text/plain</type>
            <size>31333</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2ODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2QzMjllYTllNTQ2YWQy
YjJlMDY5ZDY1ODhiNTlmMTliZjFkNDFhYi4uNmU3ZTUyMjg0MDAzODdhZDllOWQ5YTgxYzQwNWFm
ODdlMWEzMTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE2LTEwLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0JpbmRpbmdzXSBEZWNsYXJl
IGRpY3Rpb25hcnkgLyBlbnVtZXJhdGlvbiB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgaW4gdGhl
IGhlYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyOTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RGVjbGFyZSBkaWN0aW9uYXJ5IC8gZW51bWVyYXRpb24gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25z
IGluIHRoZSBoZWFkZXIKKyAgICAgICAgc28gdGhhdDoKKyAgICAgICAgLSBUaGV5IGNhbiBiZSB1
c2VkIGZyb20gY3VzdG9tIGJpbmRpbmdzIGNvZGUuCisgICAgICAgIC0gRGljdGlvbmFyaWVzIC8g
ZW51bWVyYXRpb25zIGNhbiBiZSB1c2VkIHRvIHRoZWlyIG93biBJREwgZmlsZXMgdG8KKyAgICAg
ICAgICBzaGFyZSB0aGVtIChCdWcgMTYyOTEyKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJl
YmFzZWxpbmVkIGJpbmRpbmdzIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW50ZXJmYWNl
KToKKyAgICAgICAgKEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgor
ICAgICAgICAoR2VuZXJhdGVFbnVtZXJhdGlvbkhlYWRlckNvbnRlbnQpOgorICAgICAgICAoR2Vu
ZXJhdGVEaWN0aW9uYXJ5SGVhZGVyQ29udGVudCk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6
CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlQ2Fs
bGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZURlZmF1bHRWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQp
OiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKwogMjAxNi0xMC0wNCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIFRo
ZSBkcmFnZ2VkIGltYWdlIHNob3VsZCBiZSB0aGUgY3VycmVudCBmcmFtZSBvbmx5IG9mIHRoZSBh
bmltYXRlZCBpbWFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDdkZGQ4NTJhZmQyMzllMDQzMDQ0Yzc0ODI0ZmMzNzNhOGQ5ODQ2
Y2EuLjExNmE1MGYwMjUxNTQ4ZWMyNjg4ODNkMWJmMmZjNDQ3MGNhZDVjZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3NzIs
NyArMjc3Miw3IEBACiAJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDOTNGMzRDMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlE
QkZFRDFBOUM0OUIxMDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5REJGRUIxQTlDNDlC
MTAwMEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJN0M5REJG
RUUxQTlDNDlCMTAwMEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEQkZFQzFBOUM0OUIxMDAw
RDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuaCAqLzsgfTsKLQkJN0NDMTZGRkIxRDc3
Mzc1MzAwQ0UwODc3IC8qIElETFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBDRTA4NzcgLyogSURMVHlwZXMuaCAq
LzsgfTsKKwkJN0NDMTZGRkIxRDc3Mzc1MzAwQ0UwODc3IC8qIElETFR5cGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0MxNkZGQTFENzczNzUzMDBD
RTA4NzcgLyogSURMVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3Q0MyODlERjFBQTBGRTVEMDA5QTlDRTMgLyogVVJMUmVnaXN0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERUUzOTM4MTc5
NzQyNzQwMDFENzU4MCAvKiBVUkxSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQzU2NEI4MThCQUJFQTYwMDFCOTY1MiAvKiBUZWxl
cGhvbmVOdW1iZXJEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NDNTY0QjYxOEJBQkVBNjAwMUI5NjUyIC8qIFRlbGVwaG9uZU51bWJlckRl
dGVjdG9yLmggKi87IH07CiAJCTdDQzU2NEJBMThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVO
dW1iZXJEZXRlY3RvckNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQzU2NEI5MThCQUM3MjAwMDFCOTY1MiAvKiBUZWxlcGhvbmVOdW1iZXJE
ZXRlY3RvckNvY29hLmNwcCAqLzsgfTsKQEAgLTMwOTksNyArMzA5OSw3IEBACiAJCTkzMDcwNUVC
MDlFMEM5RjYwMEIxN0ZFNCAvKiBKU0NTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3MDVFQTA5RTBDOUY2MDBCMTdGRTQg
LyogSlNDU1NQcmltaXRpdmVWYWx1ZS5oICovOyB9OwogCQk5MzA3RjFENzBBRjJENTkwMDBEQkEz
MUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA3RjFENTBBRjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5j
cHAgKi87IH07CiAJCTkzMDdGMUQ4MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA3RjFENjBB
RjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzMDg0MTM0MUNEREIxNTUwMEIwOTU4QyAvKiBK
U0RPTUNvbnZlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMDg0MTMzMUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLzsgfTsKKwkJ
OTMwODQxMzQxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwODQxMzMxQ0REQjE1NTAwQjA5NThD
IC8qIEpTRE9NQ29udmVydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzMDkwODkxMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0UmVxdWVzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwOTA4OTAw
QUY3RURFNDAwODFERjAxIC8qIEhpdFRlc3RSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwQzkwREQxOUNGOTY1MzAwRDZDMjFBIC8q
IElubGluZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMEM5MERDMTlDRjk2NTMwMEQ2QzIxQSAvKiBJbmxpbmVJdGVyYXRvci5jcHAg
Ki87IH07CiAJCTkzMTUzQkRBMTQxODFGN0EwMEZDRjVCRSAvKiBtaXNzaW5nSW1hZ2VAMngucG5n
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzE1M0JE
OTE0MTgxRjdBMDBGQ0Y1QkUgLyogbWlzc2luZ0ltYWdlQDJ4LnBuZyAqLzsgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvSURMVHlwZXMuaAppbmRleCAzNzNmOTNkNjVlZTRhNTk1
NzRkYjQ3YzI2YzY5ZWM3MmM0YTdkY2I3Li44ODdjMWU2NzRlNWVlNGI2NWRhOTFhMjMxMzlkMDIx
OWI3ZDA4ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0lE
TFR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9JRExUeXBlcy5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1ZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnQuaAppbmRleCBlZjYzNWYxZjlkODA0OTgxNzg1ZTAxOTI4YTM4ZGJkN2Jk
ZWEzMzQ5Li41NGJlMmZiYWRkNmQ3MjZiYzIzOGM3YjM3MjdmMzcyMmMxMmY3NTc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaApAQCAtNDA4LDQgKzQwOCw4IEBA
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjx0eXBl
bmFtZSBJRExVbmlvbjxULi4uPjo6SW1wCiAgICAgfQogfTsKIAorLy8gVXNlZCBmb3IgSURMIGVu
dW1lcmF0aW9ucy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IE9wdGlvbmFsPFQ+IHBhcnNlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQppbmRleCAzOTVjN2E4YzNjMmVkMzhhMzBiOGI4ZmEyN2U5MDM1MzIzOGJlNDUwLi5jZDUz
MmEzMDRmYzUxZWI2ZjE1ZTU4ZWE3ZjcwNjUyYmZmYWU5ZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTI4LDEwICsx
MjgsMTAgQEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgQWRkU3RyaW5naWZpZXJPcGVyYXRp
b25JZk5lZWRlZCgkaW50ZXJmYWNlKTsKIAogICAgIGlmICgkaW50ZXJmYWNlLT5pc0NhbGxiYWNr
KSB7Ci0gICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIoJGludGVyZmFjZSk7
CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIoJGludGVyZmFjZSwgJGVu
dW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7CiAgICAgICAgICRvYmplY3QtPkdlbmVyYXRlQ2Fs
bGJhY2tJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGljdGlvbmFy
aWVzKTsKICAgICB9IGVsc2UgewotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50
ZXJmYWNlKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZSwgJGVu
dW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7CiAgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSW1w
bGVtZW50YXRpb24oJGludGVyZmFjZSwgJGVudW1lcmF0aW9ucywgJGRpY3Rpb25hcmllcyk7CiAg
ICAgfQogfQpAQCAtODA4LDE0ICs4MDgsNyBAQCBzdWIgR2VuZXJhdGVFbnVtZXJhdGlvbkltcGxl
bWVudGF0aW9uQ29udGVudAogCiAgICAgcmV0dXJuICIiIHVubGVzcyBAJGVudW1lcmF0aW9uczsK
IAotICAgICMgRklYTUU6IENvdWxkIG9wdGltaXplIHRoaXMgdG8gb25seSBnZW5lcmF0ZSB0aGUg
cGFydHMgb2YgZWFjaCBlbnVtZXJhdGlvbiB0aGF0IGFyZSBhY3R1YWxseQotICAgICMgdXNlZCwg
d2hpY2ggd291bGQgcmVxdWlyZSBpdGVyYXRpbmcgb3ZlciBldmVyeXRoaW5nIGluIHRoZSBpbnRl
cmZhY2UuCi0KICAgICBteSAkcmVzdWx0ID0gIiI7Ci0KLSAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBPcHRpb25hbDxUPiBwYXJzZShFeGVjU3RhdGUmLCBKU1ZhbHVlKTtcbiI7
Ci0gICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlcygpO1xuXG4iOwotCiAgICAgZm9yZWFjaCBteSAkZW51bWVyYXRp
b24gKEAkZW51bWVyYXRpb25zKSB7CiAgICAgICAgIG15ICRuYW1lID0gJGVudW1lcmF0aW9uLT5u
YW1lOwogCkBAIC04MjcsOSArODIwLDYgQEAgc3ViIEdlbmVyYXRlRW51bWVyYXRpb25JbXBsZW1l
bnRhdGlvbkNvbnRlbnQKICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5l
cmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGVudW1lcmF0aW9uKTsKICAgICAgICAg
JHJlc3VsdCAuPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogCi0gICAgICAgICMgRGVjbGFyZSB0aGlzIGluc3RlYWQgb2YgdXNpbmcgInN0YXRp
YyIgYmVjYXVzZSBpdCBtYXkgYmUgdW51c2VkIGFuZCB3ZSBkb24ndCB3YW50IHdhcm5pbmdzIGFi
b3V0IHRoYXQuCi0gICAgICAgICRyZXN1bHQgLj0gIkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShFeGVjU3RhdGUqLCAkY2xhc3NOYW1lKTtcblxuIjsKLQogICAgICAgICAjIFRha2UgYW4gRXhl
Y1N0YXRlKiBpbnN0ZWFkIG9mIGFuIEV4ZWNTdGF0ZSYgdG8gbWF0Y2ggdGhlIGpzU3RyaW5nV2l0
aENhY2hlIGZyb20gSlNTdHJpbmcuaC4KICAgICAgICAgIyBGSVhNRTogQ2hhbmdlIHRvIHRha2Ug
Vk0mIGluc3RlYWQgb2YgRXhlY1N0YXRlKi4KICAgICAgICAgJHJlc3VsdCAuPSAiSlNTdHJpbmcq
IGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05hbWUgZW51bWVyYXRp
b25WYWx1ZSlcbiI7CkBAIC04NTUsMTAgKzg0NSw2IEBAIHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9u
SW1wbGVtZW50YXRpb25Db250ZW50CiAgICAgICAgICRyZXN1bHQgLj0gIiAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0
aW9uVmFsdWUpXSk7XG4iOwogICAgICAgICAkcmVzdWx0IC49ICJ9XG5cbiI7CiAKLSAgICAgICAg
JHJlc3VsdCAuPSAidGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czwkY2xhc3NOYW1lPiB7
XG4iOwotICAgICAgICAkcmVzdWx0IC49ICIgICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCAkY2xhc3NOYW1lIHZhbHVl
KSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9XG4iOwotICAgICAg
ICAkcmVzdWx0IC49ICJ9O1xuXG4iOwotCiAgICAgICAgICMgRklYTUU6IENoYW5nZSB0byB0YWtl
IFZNJiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSYuCiAgICAgICAgICMgRklYTUU6IENvbnNpZGVyIHVz
aW5nIHRvU3RyaW5nT3JOdWxsIHRvIG1ha2UgZXhjZXB0aW9uIGNoZWNraW5nIGZhc3Rlci4KICAg
ICAgICAgIyBGSVhNRTogQ29uc2lkZXIgZmluZGluZyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBt
YXRjaCBhZ2FpbnN0IGFsbCB0aGUgc3RyaW5ncyBxdWlja2x5LgpAQCAtODkyLDcgKzg3OCw3IEBA
IHN1YiBHZW5lcmF0ZUVudW1lcmF0aW9uSW1wbGVtZW50YXRpb25Db250ZW50CiAgICAgICAgICRy
ZXN1bHQgLj0gIiAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7XG4iOwogICAgICAgICAkcmVzdWx0
IC49ICJ9XG5cbiI7CiAKLSAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxhdGU8PiBpbmxpbmUgY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczwkY2xhc3NOYW1lPigpXG4iOworICAg
ICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRp
b25WYWx1ZXM8JGNsYXNzTmFtZT4oKVxuIjsKICAgICAgICAgJHJlc3VsdCAuPSAie1xuIjsKICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIHJldHVybiBcIlxcXCIiIC4gam9pbiAoIlxcXCIsIFxcXCIi
LCBAeyRlbnVtZXJhdGlvbi0+dmFsdWVzfSkgLiAiXFxcIlwiO1xuIjsKICAgICAgICAgJHJlc3Vs
dCAuPSAifVxuXG4iOwpAQCAtOTAyLDYgKzg4OCw0MiBAQCBzdWIgR2VuZXJhdGVFbnVtZXJhdGlv
bkltcGxlbWVudGF0aW9uQ29udGVudAogICAgIHJldHVybiAkcmVzdWx0OwogfQogCitzdWIgR2Vu
ZXJhdGVFbnVtZXJhdGlvbkhlYWRlckNvbnRlbnQKK3sKKyAgICBteSAoJGludGVyZmFjZSwgJGVu
dW1lcmF0aW9ucykgPSBAXzsKKworICAgIHJldHVybiAiIiB1bmxlc3MgQCRlbnVtZXJhdGlvbnM7
CisKKyAgICAjIEZJWE1FOiBDb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIG9ubHkgZ2VuZXJhdGUgdGhl
IHBhcnRzIG9mIGVhY2ggZW51bWVyYXRpb24gdGhhdCBhcmUgYWN0dWFsbHkKKyAgICAjIHVzZWQs
IHdoaWNoIHdvdWxkIHJlcXVpcmUgaXRlcmF0aW5nIG92ZXIgZXZlcnl0aGluZyBpbiB0aGUgaW50
ZXJmYWNlLgorCisgICAgJGhlYWRlckluY2x1ZGVzeyJKU0RPTUNvbnZlcnQuaCJ9ID0gMTsKKwor
ICAgIG15ICRyZXN1bHQgPSAiIjsKKworICAgIGZvcmVhY2ggbXkgJGVudW1lcmF0aW9uIChAJGVu
dW1lcmF0aW9ucykgeworICAgICAgICBteSAkbmFtZSA9ICRlbnVtZXJhdGlvbi0+bmFtZTsKKwor
ICAgICAgICBteSAkY2xhc3NOYW1lID0gR2V0RW51bWVyYXRpb25DbGFzc05hbWUoJGludGVyZmFj
ZSwgJG5hbWUpOworCisgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJh
dG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRlbnVtZXJhdGlvbik7CisgICAgICAgICRy
ZXN1bHQgLj0gIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0
cmluZzsKKworICAgICAgICAkcmVzdWx0IC49ICJKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhD
YWNoZShKU0M6OkV4ZWNTdGF0ZSosICRjbGFzc05hbWUpO1xuXG4iOworCisgICAgICAgICRyZXN1
bHQgLj0gInRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVUcmFpdHM8JGNsYXNzTmFtZT4ge1xuIjsK
KyAgICAgICAgJHJlc3VsdCAuPSAiICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosICRjbGFzc05hbWUg
dmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH1cbiI7Cisg
ICAgICAgICRyZXN1bHQgLj0gIn07XG5cbiI7CisKKyAgICAgICAgJHJlc3VsdCAuPSAidGVtcGxh
dGU8PiBPcHRpb25hbDwkY2xhc3NOYW1lPiBwYXJzZTwkY2xhc3NOYW1lPihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+ICRj
bGFzc05hbWUgY29udmVydDwkY2xhc3NOYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICJ0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKTtcblxuIjsKKworICAgICAgICAkcmVz
dWx0IC49ICIjZW5kaWZcblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgfQorICAgIHJl
dHVybiAkcmVzdWx0OworfQorCiBzdWIgR2V0RGljdGlvbmFyeUNsYXNzTmFtZQogewogICAgIG15
ICgkaW50ZXJmYWNlLCAkbmFtZSkgPSBAXzsKQEAgLTk1MSw2ICs5NzMsMzEgQEAgc3ViIEdlbmVy
YXRlQ29udmVyc2lvblJ1bGVXaXRoTGVhZGluZ0NvbW1hCiAgICAgcmV0dXJuICIiOwogfQogCitz
dWIgR2VuZXJhdGVEaWN0aW9uYXJ5SGVhZGVyQ29udGVudAoreworICAgIG15ICgkaW50ZXJmYWNl
LCAkYWxsRGljdGlvbmFyaWVzKSA9IEBfOworCisgICAgcmV0dXJuICIiIHVubGVzcyBAJGFsbERp
Y3Rpb25hcmllczsKKworICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01Db252ZXJ0LmgifSA9IDE7
CisKKyAgICBteSAkcmVzdWx0ID0gIiI7CisgICAgZm9yZWFjaCBteSAkZGljdGlvbmFyeSAoQCRh
bGxEaWN0aW9uYXJpZXMpIHsKKyAgICAgICAgbXkgJG5hbWUgPSAkZGljdGlvbmFyeS0+bmFtZTsK
KworICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkZGljdGlvbmFyeSk7CisgICAgICAgICRyZXN1bHQgLj0gIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKKworICAg
ICAgICAkaGVhZGVySW5jbHVkZXN7JGludGVyZmFjZS0+bmFtZSAuICIuaCJ9ID0gMTsKKworICAg
ICAgICBteSAkY2xhc3NOYW1lID0gR2V0RGljdGlvbmFyeUNsYXNzTmFtZSgkaW50ZXJmYWNlLCAk
bmFtZSk7CisgICAgICAgICRyZXN1bHQgLj0gInRlbXBsYXRlPD4gT3B0aW9uYWw8JGNsYXNzTmFt
ZT4gY29udmVydERpY3Rpb25hcnk8JGNsYXNzTmFtZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpO1xuXG4iOworCisgICAgICAgICRyZXN1bHQgLj0gIiNlbmRpZlxuXG4iIGlmICRjb25k
aXRpb25hbFN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKIHN1YiBHZW5l
cmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKIHsKICAgICBteSAoJGludGVyZmFj
ZSwgJGFsbERpY3Rpb25hcmllcykgPSBAXzsKQEAgLTEwNzksNyArMTEyNiw3IEBAIHN1YiBHZW5l
cmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQKIAogc3ViIEdlbmVyYXRlSGVhZGVy
CiB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2UpID0gQF87CisgICAgbXkgKCRvYmplY3Qs
ICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CiAKICAgICBt
eSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7CiAgICAgbXkgJGNsYXNzTmFtZSA9
ICJKUyRpbnRlcmZhY2VOYW1lIjsKQEAgLTE1NzEsNiArMTYxOCw5IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcbiIpOwogICAgIH0KIAorICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25IZWFkZXJDb250ZW50KCRp
bnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZW5l
cmF0ZURpY3Rpb25hcnlIZWFkZXJDb250ZW50KCRpbnRlcmZhY2UsICRkaWN0aW9uYXJpZXMpKTsK
KwogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNv
bmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
bn0gLy8gbmFtZXNwYWNlIFdlYkNvcmVcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJc
biNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OwpAQCAtNDEyNiw3ICs0MTc2LDcgQEAgc3ViIEdlbmVyYXRlUmV0dXJuUGFyYW1ldGVycwogCiBz
dWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNl
KSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAkZGlj
dGlvbmFyaWVzKSA9IEBfOwogCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT5u
YW1lOwogICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CkBAIC00MTg1LDYg
KzQyMzUsOSBAQCBzdWIgR2VuZXJhdGVDYWxsYmFja0hlYWRlcgogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgJGludGVyZmFjZU5hbWUmKTtcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCAkaW50ZXJmYWNlTmFtZSogaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfVxu
XG4iKTsKIAorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIEdlbmVyYXRlRW51bWVyYXRpb25IZWFk
ZXJDb250ZW50KCRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMpKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCBHZW5lcmF0ZURpY3Rpb25hcnlIZWFkZXJDb250ZW50KCRpbnRlcmZhY2UsICRkaWN0
aW9uYXJpZXMpKTsKKwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlXG4iKTsKIAogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9y
LT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwpAQCAtNDE5Myw3ICs0MjQ2
LDcgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKIAogc3ViIEdlbmVyYXRlQ2FsbGJhY2tJ
bXBsZW1lbnRhdGlvbgogewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRp
b25zKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlLCAkZW51bWVyYXRpb25zLCAk
ZGljdGlvbmFyaWVzKSA9IEBfOwogCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNl
LT5uYW1lOwogICAgIG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5H
ZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKQEAgLTQyMTEsNiArNDI2NCw3IEBA
IHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwg
R2VuZXJhdGVFbnVtZXJhdGlvbkltcGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZW51
bWVyYXRpb25zKSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRGljdGlvbmFyeUlt
cGxlbWVudGF0aW9uQ29udGVudCgkaW50ZXJmYWNlLCAkZGljdGlvbmFyaWVzKSk7CiAKICAgICAj
IENvbnN0cnVjdG9yCiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiR7Y2xh
c3NOYW1lfShKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNDg2ZmU1MjA5MzdjMmUwNDEzOGZmMTVlMWFlZmU5Y2E1
ZTRkNzBlMS4uMTUxYmIyYTlkMzc2YWM5YTJlZDEyZmJiZWUxYTYzNDE2OTAyMjQ1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgpAQCAtOTIsMTEgKzkx
LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25hbDxUPiBwYXJzZShFeGVjU3RhdGUmLCBKU1ZhbHVlKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXMoKTsKLQotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6
OkVudW1UeXBlKTsKLQogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3Rh
dGUsIFRlc3RPYmo6OkVudW1UeXBlIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0xMTMsMTAgKzEwNyw2
IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2Jq
OjpFbnVtVHlwZSBlbnVtZXJhdGlvblZhbHVlCiAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwog
fQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6OkVudW1UeXBlPiB7
Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtVHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVtcGxhdGU8PiBPcHRpb25hbDxU
ZXN0T2JqOjpFbnVtVHlwZT4gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CkBAIC0xNDMsMTMgKzEzMywxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6
OkVudW1UeXBlIGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdQogICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUg
Y29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4o
KQordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RP
Ymo6OkVudW1UeXBlPigpCiB7CiAgICAgcmV0dXJuICJcIlwiLCBcImVudW1WYWx1ZTFcIiwgXCJF
bnVtVmFsdWUyXCIsIFwiRW51bVZhbHVlM1wiIjsKIH0KIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0
aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6Ok9wdGlvbmFsKTsKLQogSlNTdHJpbmcqIGpzU3Ry
aW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6Ok9wdGlvbmFsIGVudW1lcmF0
aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFs
dWVzW10gPSB7CkBAIC0xNjYsMTAgKzE1NCw2IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNo
ZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpPcHRpb25hbCBlbnVtZXJhdGlvblZhbHVlCiAg
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihlbnVtZXJhdGlvblZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVl
VHJhaXRzPFRlc3RPYmo6Ok9wdGlvbmFsPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpT
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpPcHRp
b25hbCB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQot
fTsKLQogdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpPcHRpb25hbD4gcGFyc2U8VGVzdE9i
ajo6T3B0aW9uYWw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CkBAIC0xOTYsMTMgKzE4
MCwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6Ok9wdGlvbmFsIGNvbnZlcnQ8VGVzdE9iajo6T3B0
aW9uYWw+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdQogICAgIHJldHVybiByZXN1bHQudmFsdWUo
KTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlv
blZhbHVlczxUZXN0T2JqOjpPcHRpb25hbD4oKQordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6Ok9wdGlvbmFsPigpCiB7CiAgICAgcmV0dXJu
ICJcIlwiLCBcIk9wdGlvbmFsVmFsdWUxXCIsIFwiT3B0aW9uYWxWYWx1ZTJcIiwgXCJPcHRpb25h
bFZhbHVlM1wiIjsKIH0KIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSos
IEFsdGVybmF0ZUVudW1OYW1lKTsKLQogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNT
dGF0ZSogc3RhdGUsIEFsdGVybmF0ZUVudW1OYW1lIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0yMTUs
MTAgKzE5Nyw2IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRl
LCBBbHRlcm5hdGVFbnVtTmFtZSBlbnVtZXJhdGlvblZhbHVlCiAgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZh
bHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPEFsdGVybmF0ZUVu
dW1OYW1lPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBBbHRlcm5hdGVFbnVtTmFtZSB2YWx1ZSkgeyByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVtcGxhdGU8PiBP
cHRpb25hbDxBbHRlcm5hdGVFbnVtTmFtZT4gcGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CkBAIC0yNDEsMTUgKzIxOSwxMyBAQCB0ZW1wbGF0ZTw+
IEFsdGVybmF0ZUVudW1OYW1lIGNvbnZlcnQ8QWx0ZXJuYXRlRW51bU5hbWU+KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdQogICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKIH0KIAotdGVtcGxhdGU8
PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxBbHRlcm5hdGVF
bnVtTmFtZT4oKQordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFs
dWVzPEFsdGVybmF0ZUVudW1OYW1lPigpCiB7CiAgICAgcmV0dXJuICJcImVudW1WYWx1ZTFcIiwg
XCJFbnVtVmFsdWUyXCIiOwogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAKLUpTU3RyaW5n
KiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtQSk7Ci0KIEpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVtQSBl
bnVtZXJhdGlvblZhbHVlKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IHZhbHVlc1tdID0gewpAQCAtMjYwLDEwICsyMzYsNiBAQCBKU1N0cmluZyoganNTdHJpbmdX
aXRoQ2FjaGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUEgZW51bWVyYXRpb25WYWx1
ZSkKICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpT
VmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bUE+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5
SlNWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVu
dW1BIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19
OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1BPiBwYXJzZTxUZXN0T2JqOjpF
bnVtQT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKQEAgLTI4NCw3ICsyNTYsNyBAQCB0
ZW1wbGF0ZTw+IFRlc3RPYmo6OkVudW1BIGNvbnZlcnQ8VGVzdE9iajo6RW51bUE+KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdQogICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKIH0KIAot
dGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxU
ZXN0T2JqOjpFbnVtQT4oKQordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1BPigpCiB7CiAgICAgcmV0dXJuICJcIkFcIiI7CiB9CkBA
IC0yOTMsOCArMjY1LDYgQEAgdGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQT4oKQogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQogCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUo
RXhlY1N0YXRlKiwgVGVzdE9iajo6RW51bUIpOwotCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2Fj
aGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6RW51bUIgZW51bWVyYXRpb25WYWx1ZSkKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2YWx1ZXNbXSA9IHsKQEAg
LTMwNSwxMCArMjc1LDYgQEAgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSog
c3RhdGUsIFRlc3RPYmo6OkVudW1CIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlv
blZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6
OkVudW1CPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpFbnVtQiB2YWx1ZSkgeyByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVtcGxhdGU8PiBPcHRp
b25hbDxUZXN0T2JqOjpFbnVtQj4gcGFyc2U8VGVzdE9iajo6RW51bUI+KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CkBAIC0zMjksNyArMjk1LDcgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpF
bnVtQiBjb252ZXJ0PFRlc3RPYmo6OkVudW1CPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHUKICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUI+KCkKK3Rl
bXBsYXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpF
bnVtQj4oKQogewogICAgIHJldHVybiAiXCJCXCIiOwogfQpAQCAtMzM4LDggKzMwNCw2IEBAIHRl
bXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVz
dE9iajo6RW51bUI+KCkKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSosIFRlc3RPYmo6
OkVudW1DKTsKLQogSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUs
IFRlc3RPYmo6OkVudW1DIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC0zNTAsMTAgKzMxNCw2IEBAIEpT
U3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpFbnVt
QyBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
dmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldKTsKIH0KIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQz4gewotICAgIHN0YXRp
YyBKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgVGVzdE9iajo6RW51bUMgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCB2YWx1ZSk7IH0KLX07Ci0KIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RW51bUM+
IHBhcnNlPFRlc3RPYmo6OkVudW1DPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwpAQCAt
Mzc0LDE1ICszMzQsMTMgQEAgdGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtQyBjb252ZXJ0PFRlc3RP
Ymo6OkVudW1DPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHUKICAgICByZXR1cm4gcmVz
dWx0LnZhbHVlKCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCkKK3RlbXBsYXRlPD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtQz4oKQogewogICAgIHJl
dHVybiAiXCJDXCIiOwogfQogCiAjZW5kaWYKIAotSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENhY2hl
KEV4ZWNTdGF0ZSosIFRlc3RPYmo6OktpbmQpOwotCiBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2Fj
aGUoRXhlY1N0YXRlKiBzdGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHZhbHVlc1tdID0gewpAQCAt
Mzk1LDEwICszNTMsNiBAQCBKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiBz
dGF0ZSwgVGVzdE9iajo6S2luZCBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25W
YWx1ZSldKTsKIH0KIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpL
aW5kPiB7Ci0gICAgc3RhdGljIEpTU3RyaW5nKiBhcnJheUpTVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVlKSB7IHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Ci19OwotCiB0ZW1wbGF0ZTw+IE9wdGlvbmFs
PFRlc3RPYmo6OktpbmQ+IHBhcnNlPFRlc3RPYmo6OktpbmQ+KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KCZzdGF0ZSk7CkBAIC00MjEsMTMgKzM3NSwxMSBAQCB0ZW1wbGF0ZTw+IFRlc3RPYmo6OktpbmQg
Y29udmVydDxUZXN0T2JqOjpLaW5kPihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQog
ICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgY29uc3Qg
Y2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpLaW5kPigpCit0ZW1wbGF0
ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6S2luZD4o
KQogewogICAgIHJldHVybiAiXCJxdWlja1wiLCBcImRlYWRcIiI7CiB9CiAKLUpTU3RyaW5nKiBq
c1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqLCBUZXN0T2JqOjpTaXplKTsKLQogSlNTdHJpbmcq
IGpzU3RyaW5nV2l0aENhY2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OlNpemUgZW51bWVy
YXRpb25WYWx1ZSkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiB2
YWx1ZXNbXSA9IHsKQEAgLTQ0MCwxMCArMzkyLDYgQEAgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEV4ZWNTdGF0ZSogc3RhdGUsIFRlc3RPYmo6OlNpemUgZW51bWVyYXRpb25WYWx1ZSkKICAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KGVudW1lcmF0aW9uVmFsdWUpXSk7CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTVmFsdWVU
cmFpdHM8VGVzdE9iajo6U2l6ZT4gewotICAgIHN0YXRpYyBKU1N0cmluZyogYXJyYXlKU1ZhbHVl
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE9iajo6U2l6ZSB2YWx1
ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHZhbHVlKTsgfQotfTsKLQogdGVt
cGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpTaXplPiBwYXJzZTxUZXN0T2JqOjpTaXplPihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwpAQCAtNDY2LDEzICs0MTQsMTEgQEAgdGVtcGxhdGU8
PiBUZXN0T2JqOjpTaXplIGNvbnZlcnQ8VGVzdE9iajo6U2l6ZT4oRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6
U2l6ZT4oKQordGVtcGxhdGU8PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
PFRlc3RPYmo6OlNpemU+KCkKIHsKICAgICByZXR1cm4gIlwic21hbGxcIiwgXCJtdWNoLW11Y2gt
bGFyZ2VyXCIiOwogfQogCi1KU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoRXhlY1N0YXRlKiwg
VGVzdE9iajo6Q29uZmlkZW5jZSk7Ci0KIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVj
U3RhdGUqIHN0YXRlLCBUZXN0T2JqOjpDb25maWRlbmNlIGVudW1lcmF0aW9uVmFsdWUpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdmFsdWVzW10gPSB7CkBAIC00
ODUsMTAgKzQzMSw2IEBAIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShFeGVjU3RhdGUqIHN0
YXRlLCBUZXN0T2JqOjpDb25maWRlbmNlIGVudW1lcmF0aW9uVmFsCiAgICAgcmV0dXJuIGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlv
blZhbHVlKV0pOwogfQogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RPYmo6
OkNvbmZpZGVuY2U+IHsKLSAgICBzdGF0aWMgSlNTdHJpbmcqIGFycmF5SlNWYWx1ZShFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkNvbmZpZGVuY2UgdmFsdWUp
IHsgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCB2YWx1ZSk7IH0KLX07Ci0KIHRlbXBs
YXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6Q29uZmlkZW5jZT4gcGFyc2U8VGVzdE9iajo6Q29uZmlk
ZW5jZT4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKQEAgLTUxMSw3ICs0NTMsNyBAQCB0
ZW1wbGF0ZTw+IFRlc3RPYmo6OkNvbmZpZGVuY2UgY29udmVydDxUZXN0T2JqOjpDb25maWRlbmNl
PihFeGVjU3RhdGUmIHN0YXRlLCBKUwogICAgIHJldHVybiByZXN1bHQudmFsdWUoKTsKIH0KIAot
dGVtcGxhdGU8PiBpbmxpbmUgY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxU
ZXN0T2JqOjpDb25maWRlbmNlPigpCit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6Q29uZmlkZW5jZT4oKQogewogICAgIHJldHVybiAiXCJo
aWdoXCIsIFwia2luZGEtbG93XCIiOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDkxZDdlYTljMTk4MDRhMTQwYjNl
YmI3MjRiODU1ZDFiZWMyY2FkMTkuLjA3OTExMzljZjZjOGI2ZjZlMDgwNWIxOTMxMTZhOTBlMWMy
YWFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKICNpbmNsdWRl
ICJUZXN0T2JqLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xMDQsNSAr
MTA1LDExOSBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZwogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3RPYmo+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU1Rlc3RPYmo7CiB9OworSlNDOjpKU1N0cmluZyoganNTdHJpbmdXaXRoQ2FjaGUoSlND
OjpFeGVjU3RhdGUqLCBUZXN0T2JqOjpFbnVtVHlwZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
VmFsdWVUcmFpdHM8VGVzdE9iajo6RW51bVR5cGU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmlu
ZyogYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
LCBUZXN0T2JqOjpFbnVtVHlwZSB2YWx1ZSkgeyByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIHZhbHVlKTsgfQorfTsKKwordGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlw
ZT4gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPD4gVGVzdE9iajo6RW51bVR5cGUgY29udmVydDxUZXN0T2JqOjpFbnVtVHlw
ZT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpOworCitKU0M6
OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6Ok9w
dGlvbmFsKTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpPcHRp
b25hbD4geworICAgIHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6Ok9wdGlvbmFsIHZhbHVl
KSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6Ok9wdGlvbmFsPiBwYXJzZTxUZXN0T2JqOjpPcHRpb25h
bD4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0T2JqOjpP
cHRpb25hbCBjb252ZXJ0PFRlc3RPYmo6Ok9wdGlvbmFsPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6T3B0aW9uYWw+KCk7CisKK0pTQzo6SlNTdHJpbmcqIGpzU3RyaW5nV2l0aENh
Y2hlKEpTQzo6RXhlY1N0YXRlKiwgQWx0ZXJuYXRlRW51bU5hbWUpOworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU1ZhbHVlVHJhaXRzPEFsdGVybmF0ZUVudW1OYW1lPiB7CisgICAgc3RhdGljIEpTQzo6
SlNTdHJpbmcqIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiwgQWx0ZXJuYXRlRW51bU5hbWUgdmFsdWUpIHsgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCB2YWx1ZSk7IH0KK307CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8QWx0ZXJuYXRl
RW51bU5hbWU+IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1lPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IEFsdGVybmF0ZUVudW1OYW1lIGNvbnZlcnQ8QWx0ZXJuYXRl
RW51bU5hbWU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxBbHRlcm5hdGVFbnVtTmFtZT4oKTsK
KworI2lmIEVOQUJMRShDb25kaXRpb24xKQorCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhD
YWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1BKTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQT4geworICAgIHN0YXRpYyBKU0M6OkpTU3Ry
aW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCosIFRlc3RPYmo6OkVudW1BIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1BPiBw
YXJzZTxUZXN0T2JqOjpFbnVtQT4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8PiBUZXN0T2JqOjpFbnVtQSBjb252ZXJ0PFRlc3RPYmo6OkVudW1BPihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51
bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUE+KCk7CisKKyNlbmRpZgorCisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorCitKU0M6OkpTU3RyaW5nKiBqc1N0
cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1CKTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQj4geworICAgIHN0YXRpYyBK
U0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1CIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6
OkVudW1CPiBwYXJzZTxUZXN0T2JqOjpFbnVtQj4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwordGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtQiBjb252ZXJ0PFRlc3RPYmo6OkVudW1CPihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0IGNoYXIqIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUI+KCk7CisKKyNlbmRpZgorCisj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorCitKU0M6OkpTU3Ry
aW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSosIFRlc3RPYmo6OkVudW1DKTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNWYWx1ZVRyYWl0czxUZXN0T2JqOjpFbnVtQz4geworICAg
IHN0YXRpYyBKU0M6OkpTU3RyaW5nKiBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RPYmo6OkVudW1DIHZhbHVlKSB7IHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IE9wdGlvbmFs
PFRlc3RPYmo6OkVudW1DPiBwYXJzZTxUZXN0T2JqOjpFbnVtQz4oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwordGVtcGxhdGU8PiBUZXN0T2JqOjpFbnVtQyBjb252ZXJ0PFRlc3RPYmo6
OkVudW1DPihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTw+IGNvbnN0
IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bUM+KCk7CisKKyNl
bmRpZgorCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSos
IFRlc3RPYmo6OktpbmQpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RP
Ymo6OktpbmQ+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpLaW5kIHZhbHVl
KSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OktpbmQ+IHBhcnNlPFRlc3RPYmo6OktpbmQ+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gVGVzdE9iajo6S2luZCBjb252
ZXJ0PFRlc3RPYmo6OktpbmQ+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBs
YXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpLaW5k
PigpOworCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSos
IFRlc3RPYmo6OlNpemUpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRzPFRlc3RP
Ymo6OlNpemU+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2JqOjpTaXplIHZhbHVl
KSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFsdWUpOyB9Cit9OworCit0ZW1w
bGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OlNpemU+IHBhcnNlPFRlc3RPYmo6OlNpemU+KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gVGVzdE9iajo6U2l6ZSBjb252
ZXJ0PFRlc3RPYmo6OlNpemU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBs
YXRlPD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpTaXpl
PigpOworCitKU0M6OkpTU3RyaW5nKiBqc1N0cmluZ1dpdGhDYWNoZShKU0M6OkV4ZWNTdGF0ZSos
IFRlc3RPYmo6OkNvbmZpZGVuY2UpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU1ZhbHVlVHJhaXRz
PFRlc3RPYmo6OkNvbmZpZGVuY2U+IHsKKyAgICBzdGF0aWMgSlNDOjpKU1N0cmluZyogYXJyYXlK
U1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T2Jq
OjpDb25maWRlbmNlIHZhbHVlKSB7IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgdmFs
dWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkNvbmZpZGVuY2U+IHBh
cnNlPFRlc3RPYmo6OkNvbmZpZGVuY2U+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPD4gVGVzdE9iajo6Q29uZmlkZW5jZSBjb252ZXJ0PFRlc3RPYmo6OkNvbmZpZGVu
Y2U+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpDb25maWRlbmNlPigpOworCit0
ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnk+IGNvbnZlcnREaWN0aW9uYXJ5
PFRlc3RPYmo6OkRpY3Rpb25hcnk+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwor
dGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVy
YXRlTnVsbD4gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRO
b3RUb2xlcmF0ZU51bGw+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxh
dGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4g
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51
bGw+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8PiBPcHRpb25h
bDxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4gY29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGlj
dGlvbmFyeU5hbWU+KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8
PiBPcHRpb25hbDxUZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PiBjb252ZXJ0RGljdGlvbmFyeTxU
ZXN0T2JqOjpQYXJlbnREaWN0aW9uYXJ5PihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CisKK3RlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6Q2hpbGREaWN0aW9uYXJ5PiBjb252ZXJ0
RGljdGlvbmFyeTxUZXN0T2JqOjpDaGlsZERpY3Rpb25hcnk+KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKKwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>