<?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>77062</bug_id>
          
          <creation_ts>2012-01-25 17:10:51 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: clean InspectorBackendDispatcher.h</short_desc>
          <delta_ts>2012-01-30 01:44:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>72861</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">prybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>prybin</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>542791</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:10:51 -0800</bug_when>
    <thetext>Remove private method from header file, add formal interfaces to domain agents (now called &quot;CommandHandler&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542799</commentid>
    <comment_count>1</comment_count>
      <attachid>124040</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:16:42 -0800</bug_when>
    <thetext>Created attachment 124040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542801</commentid>
    <comment_count>2</comment_count>
      <attachid>124042</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:19:30 -0800</bug_when>
    <thetext>Created attachment 124042
original cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542802</commentid>
    <comment_count>3</comment_count>
      <attachid>124043</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:19:51 -0800</bug_when>
    <thetext>Created attachment 124043
original h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542805</commentid>
    <comment_count>4</comment_count>
      <attachid>124044</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:22:48 -0800</bug_when>
    <thetext>Created attachment 124044
new cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542806</commentid>
    <comment_count>5</comment_count>
      <attachid>124045</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-25 17:23:14 -0800</bug_when>
    <thetext>Created attachment 124045
new h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543894</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-27 01:32:58 -0800</bug_when>
    <thetext>The change looks good, but please add a meaningful description of the changes made in this patch to the ChangeLog including introduction of *CommandHandler interfaces and why we need InspectorBackendDispatcher to be an abstract interface. Are we going to have alternative implementation of the dispatcher?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544119</commentid>
    <comment_count>7</comment_count>
      <attachid>124327</attachid>
    <who name="Peter Rybin">prybin</who>
    <bug_when>2012-01-27 09:13:05 -0800</bug_when>
    <thetext>Created attachment 124327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544924</commentid>
    <comment_count>8</comment_count>
      <attachid>124327</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-30 00:57:39 -0800</bug_when>
    <thetext>Comment on attachment 124327
Patch

Clearing flags on attachment: 124327

Committed r106218: &lt;http://trac.webkit.org/changeset/106218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544925</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-30 00:57:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544942</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-30 01:44:23 -0800</bug_when>
    <thetext>Clang build failed after landing the patch:
http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac%20Builder%20%28dbg%29/builds/18464/steps/compile/logs/stdio

I tried to fix it: http://trac.webkit.org/changeset/106221</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124040</attachid>
            <date>2012-01-25 17:16:42 -0800</date>
            <delta_ts>2012-01-27 09:12:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77062-20120126051640.patch</filename>
            <type>text/plain</type>
            <size>28375</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUzMDJhMzQ4OWFjOWIx
Nzg2NDNjOGU3ODlhNDY3MjZkYzFiZGVhOS4uZmRiNGQ2Nzg0OWFlZmNkNmYzNTc3N2VhZWJjZjU4
ZDg1MGE0NjJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAxLTI1ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBjbGVhbiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NzA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
ZGUgZ2VuZXJhdG9yIGlzIGNoYW5nZWQuIENhbGxzIHRvIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyIGFyZQorICAgICAgICBjaGFuZ2VkLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChSYXdUeXBlcyk6CisgICAgICAgIChSYXdUeXBl
cy5PdXRwdXRQYXNzTW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5
UG9pbnRlcik6CisgICAgICAgIChSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyLmdl
dF9hcmd1bWVudF9wcmVmaXgpOgorICAgICAgICAoUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5
UG9pbnRlci5nZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KToKKyAgICAgICAgKFJhd1R5cGVzLk91
dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZSk6CisgICAgICAgIChSYXdUeXBlcy5PdXRwdXRQYXNz
TW9kZWwuQnlSZWZlcmVuY2UuZ2V0X2FyZ3VtZW50X3ByZWZpeCk6CisgICAgICAgIChSYXdUeXBl
cy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UuZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCk6
CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5pc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25h
bCk6CisgICAgICAgIChSYXdUeXBlcy5TdHJpbmcpOgorICAgICAgICAoUmF3VHlwZXMuU3RyaW5n
LmdldF9vdXRwdXRfcGFzc19tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5TdHJpbmcuaXNfaGVh
dnlfdmFsdWUpOgorICAgICAgICAoUmF3VHlwZXMuSW50KToKKyAgICAgICAgKFJhd1R5cGVzLklu
dC5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuSW50LmlzX2hlYXZ5
X3ZhbHVlKToKKyAgICAgICAgKFJhd1R5cGVzLk51bWJlcik6CisgICAgICAgIChSYXdUeXBlcy5O
dW1iZXIuZ2V0X291dHB1dF9wYXNzX21vZGVsKToKKyAgICAgICAgKFJhd1R5cGVzLk51bWJlci5p
c19oZWF2eV92YWx1ZSk6CisgICAgICAgIChSYXdUeXBlcy5Cb29sLmdldF9jX3BhcmFtX3R5cGUp
OgorICAgICAgICAoUmF3VHlwZXMuQm9vbCk6CisgICAgICAgIChSYXdUeXBlcy5Cb29sLmdldF9v
dXRwdXRfcGFzc19tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5Cb29sLmlzX2hlYXZ5X3ZhbHVl
KToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdCk6CisgICAgICAgIChSYXdUeXBlcy5PYmplY3Qu
Z2V0X291dHB1dF9wYXNzX21vZGVsKToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdC5pc19oZWF2
eV92YWx1ZSk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0X2NfaW5pdGlhbGl6ZXIpOgorICAg
ICAgICAoUmF3VHlwZXMuQW55KToKKyAgICAgICAgKFJhd1R5cGVzLkFueS5nZXRfb3V0cHV0X3Bh
c3NfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuQW55LmlzX2hlYXZ5X3ZhbHVlKToKKyAgICAg
ICAgKFJhd1R5cGVzLkFycmF5KToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5LmdldF9vdXRwdXRf
cGFzc19tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJheS5pc19oZWF2eV92YWx1ZSk6Cisg
ICAgICAgIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwpOgorICAgICAgICAodm9pZCk6
CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAoR2VuZXJhdG9yLmdvKToKKyAgICAgICAg
KEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VySW5zcGVjdG9yQ29udHJvbGxl
cjo6Y29ubmVjdEZyb250ZW5kKToKKwogMjAxMi0wMS0yNSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjEwNTgyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKaW5kZXggNmQ1ZWEyYzNhNzU4NmRiOTNhY2E0OTQ0M2NmNmJkZDFmNTFiNTlk
Yy4uZTIxZmNmNmQ1YTAzMjU1YzdlZmVkN2Q3YTUyZWQwNmRlNzRmMjY5ZCAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTIx
OSw2ICsyMTksMjYgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUp
CiAKKyAgICAjIEZvciBvdXRwdXQgcGFyYW1ldGVyIGFsbCB2YWx1ZXMgYXJlIHBhc3NlZCBieSBw
b2ludGVyIGV4Y2VwdCBSZWZQdHItYmFzZWQgdHlwZXMuCisgICAgY2xhc3MgT3V0cHV0UGFzc01v
ZGVsOgorICAgICAgICBjbGFzcyBCeVBvaW50ZXI6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgorICAgICAgICAgICAgICAg
IHJldHVybiAiJiIKKworICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVm
IGdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIioi
CisKKyAgICAgICAgY2xhc3MgQnlSZWZlcmVuY2U6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgorICAgICAgICAgICAgICAg
IHJldHVybiAiIgorCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYg
Z2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpOgorICAgICAgICAgICAgICAgIHJldHVybiAiJiIK
KwogICAgIGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6CiAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVu
dGltZV9jYXN0XyA9IEZhbHNlCiAKQEAgLTIzMCwxMCArMjUwLDYgQEAgY2xhc3MgUmF3VHlwZXMo
b2JqZWN0KToKICAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICIm
IgotCiAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICBkZWYgcmVxdWVzdF9yYXdfaW50ZXJu
YWxfcnVudGltZV9jYXN0KGNscyk6CiAgICAgICAgICAgICBpZiBub3QgY2xzLm5lZWRfaW50ZXJu
YWxfcnVudGltZV9jYXN0XzoKQEAgLTI5Myw2ICszMDksMTQgQEAgY2xhc3MgUmF3VHlwZXMob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJTdHJpbmciCiAgICAgICAg
ICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKIAorICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlN0cmluZyIpCiAgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgU3RyaW5nJiIpCiAKQEAgLTMyMSw2
ICszNDUsMTQgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgICAgICAgICBhc19t
ZXRob2RfbmFtZSA9ICJOdW1iZXIiCiAgICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQ
YXJhbXMKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bh
c3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwu
QnlQb2ludGVyCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNfaGVhdnlf
dmFsdWUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgICAgIGRlZmF1bHRfY19w
YXJhbV90eXBlID0gQ1BhcmFtVHlwZSgiaW50IikKIAogICAgIGNsYXNzIE51bWJlcihCYXNlVHlw
ZSk6CkBAIC0zNDQsMTIgKzM3NiwyMCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAgICAg
ICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKICAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbigiVE9ETyIpCiAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X291dHB1dF9wYXNzX21vZGVsKCk6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0
UGFzc01vZGVsLkJ5UG9pbnRlcgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGlzX2hlYXZ5X3ZhbHVlKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgICAgICBk
ZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCiAKICAgICBjbGFzcyBC
b29sKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgIGRlZiBnZXRfY19w
YXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgotICAgICAgICAgICAgaWYgKHBh
cmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUg
PT0gUGFyYW1UeXBlLkVWRU5UOgogICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCiAgICAgICAgICAgICAgICAgZWxz
ZToKQEAgLTM3OSw2ICs0MTksMTQgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAg
ZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6CiAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlRPRE8iKQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9v
dXRwdXRfcGFzc19tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBh
c3NNb2RlbC5CeVBvaW50ZXIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBp
c19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAgX3Bs
YWluX2NfdHlwZSA9IENQYXJhbVR5cGUoImJvb2wiKQogICAgICAgICBfcmVmX2NfdHlwZSA9IENQ
YXJhbVR5cGUoImNvbnN0IGJvb2wqIGNvbnN0IiwgIiolcyIpCiAKQEAgLTQxNiw2ICs0NjQsMTQg
QEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRo
b2RfcGFyYW1zKCk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQogCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgor
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQor
CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Cisg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1U
eXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1Bh
cmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKIApAQCAtNDM1LDcgKzQ5MSw3
IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAg
ICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yVmFsdWU6OmNyZWF0ZSgpIgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBv
cnRlZCIpCiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2pzX2JpbmRf
dHlwZSgpOgpAQCAtNDU2LDYgKzUxMiwxNCBAQCBjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgogICAg
ICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCk6CiAgICAgICAgICAgICByZXR1
cm4gImFzc2VydEFueSIKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQ
YXNzTW9kZWwuQnlSZWZlcmVuY2UKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBpc19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKwogICAgICAgICBf
cGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvclZhbHVlPiIpCiAgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4i
KQogCkBAIC00OTUsNiArNTU5LDE0IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAgICAgICAg
IGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJUT0RPIikKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
b3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQ
YXNzTW9kZWwuQnlSZWZlcmVuY2UKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBpc19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKwogICAgICAgICBf
cGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCiAgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4i
KQogCkBAIC0xNTIxLDcgKzE1OTMsNyBAQCAke2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRp
b25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcAogIiIiKQog
CiAgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoCi0iIiJ2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRtZXRob2ROYW1lKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KQorIiIidm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiR7ZG9tYWluTmFtZX1fJG1ldGhvZE5hbWUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpCiB7CiAgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKIApAQCAtMTYxNSwxNCArMTY4NywxMiBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKIAogY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCi0gICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQotJGNvbnN0cnVjdG9ySW5pdAotICAgIHsgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpOwogCi0kc2V0dGVycworJGFn
ZW50SW50ZXJmYWNlcworJHZpcnR1YWxTZXR0ZXJzCiAKLSAgICB2b2lkIGNsZWFyRnJvbnRlbmQo
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBj
bGVhckZyb250ZW5kKCkgPSAwOwogCiAgICAgZW51bSBDb21tb25FcnJvckNvZGUgewogICAgICAg
ICBQYXJzZUVycm9yID0gMCwKQEAgLTE2MzUsOCArMTcwNSw4IEBAICRzZXR0ZXJzCiAgICAgfTsK
IAogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQs
IENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OwotICAg
IHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGRhdGEpIGNvbnN0OwotICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
KiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3Vs
dCk7CiAKICAgICBlbnVtIE1ldGhvZE5hbWVzIHsKQEAgLTE2NDQsMTkgKzE3MTQsNiBAQCAkbWV0
aG9kTmFtZXNFbnVtQ29udGVudAogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29t
bWFuZE5hbWVzW107Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmlu
ZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBib29s
IGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7
Ci0KLSRtZXRob2REZWNsYXJhdGlvbnMKLQotICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci0kZmllbGREZWNsYXJhdGlvbnMKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTE2ODgsMTEgKzE3NDUsNDYgQEAgJG1ldGhvZE5hbWVE
ZWNsYXJhdGlvbnMKIH07CiAKIAorY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
IDogcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5pdAorICAgIHsgfQor
CisgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IDA7IH0KKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9p
ZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZGF0YSkgY29uc3Q7CisgICAgdXNpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OnJlcG9ydFByb3RvY29sRXJyb3I7CisKKyRzZXR0ZXJzCitwcml2YXRlOgorJG1ldGhvZERlY2xh
cmF0aW9ucworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKKyRmaWVsZERlY2xhcmF0aW9ucworCisgICAgc3RhdGljIGludCBnZXRJbnQo
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0
YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNw
ZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRp
b25FcnJvcik7CisKK307CisKICRtZXRob2RzCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSk7Cit9CisKKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QgPSB0aGlzOwotICAgIHR5cGVk
ZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7CisgICAgdHlwZWRlZiB2b2lk
IChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OipDYWxsSGFuZGxlcikobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwogICAgIGxvbmcgY2FsbElkID0gMDsKQEAg
LTE3NTAsNyArMTg0Miw3IEBAICRtZXNzYWdlSGFuZGxlcnMKICAgICAoKCp0aGlzKS4qaXQtPnNl
Y29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRp
b25FcnJvcikKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9u
c2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQogewogICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKQEAgLTE3NzMs
NyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3Rv
Y29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3Qg
Y2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25z
dCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKIHsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7CiAgICAgaWYgKCFzX2Nv
bW1vbkVycm9ycy5zaXplKCkpIHsKQEAgLTE4MDMsNyArMTg5NSw3IEBAIHZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3Qg
Y2FsbElkLCBDCiAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCi1pbnQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCitpbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRJbnQoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIEFTU0VSVChwcm90b2NvbEVy
cm9ycyk7CiAKQEAgLTE4MzcsNyArMTkyOSw3IEBAIGludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hCiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCitTdHJpbmcg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CiAK
QEAgLTE4NzEsNyArMTk2Myw3IEBAIFN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCi1ib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFu
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK2Jvb2wgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycykKIHsKICAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwogCkBAIC0xOTA1LDcg
KzE5OTcsNyBAQCBib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0
T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKICAgICBBU1NF
UlQocHJvdG9jb2xFcnJvcnMpOwogCkBAIC0xOTM5LDcgKzIwMzEsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNw
ZWN0b3JPYmplYwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycykKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzKQogewogICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CiAKQEAgLTE5
NzIsNiArMjA2NCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqCiAgICAgICAgICAgICAqdmFs
dWVGb3VuZCA9IHRydWU7CiAgICAgcmV0dXJuIHZhbHVlOwogfQorCiBib29sIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0
cmluZyogcmVzdWx0KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNw
ZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwpAQCAtMjA0MSw4ICsyMTM0LDggQEAgJHZh
bGlkYXRvckNvZGUKIAogICAgIHR5cGVidWlsZGVyX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9o
ZWFkZXJfICsKICIiIgotI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCi0jZGVm
aW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyNpZm5kZWYgSW5zcGVjdG9yVHlwZUJ1
aWxkZXJfaAorI2RlZmluZSBJbnNwZWN0b3JUeXBlQnVpbGRlcl9oCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMjA1Miw3ICsyMTQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZXh0ZXJu
IGJvb2wgdHlwZUJ1aWxkZXJUZXN0VmFyaWFibGU7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LSNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oKQorI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvclR5cGVCdWlsZGVyX2gpCiAKICIiIikKIApAQCAtMjIyMCw2
ICsyMzEzLDggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGZyb250ZW5kX21ldGhvZF9saXN0ID0g
W10KICAgICBiYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0ID0gW10KIAorICAgIGJh
Y2tlbmRfdmlydHVhbF9zZXR0ZXJzX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfYWdlbnRfaW50ZXJm
YWNlX2xpc3QgPSBbXQogICAgIGJhY2tlbmRfc2V0dGVyc19saXN0ID0gW10KICAgICBiYWNrZW5k
X2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCiAgICAgYmFja2VuZF9maWVsZF9saXN0ID0gW10K
QEAgLTIyNDIsNiArMjMzNyw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LAogICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsCiAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LAorICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QsCiAgICAgICAgICAgICBHZW5l
cmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsCiAgICAgICAgICAgICBHZW5lcmF0b3Iu
ZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LAogICAgICAgICAgICAgR2VuZXJhdG9yLmZy
b250ZW5kX2RvbWFpbl9jbGFzc19saW5lcywKQEAgLTIyODEsOSArMjM3NywxMyBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgZG9tYWluRmllbGROYW1lPWRvbWFpbl9uYW1lX2xv
d2VyLAogICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPWpv
aW4oZmxhdHRlbl9saXN0KGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyksICIiKSkp
CiAKKyAgICAgICAgICAgIGFnZW50X2ludGVyZmFjZV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAiQ29tbWFuZEhhbmRsZXIiCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAg
ICBjbGFzcyAlcyB7XG4iICUgYWdlbnRfaW50ZXJmYWNlX25hbWUpCisgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICBwdWJsaWM6XG4i
KQogICAgICAgICAgICAgaWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKICAgICAgICAgICAg
ICAgICBmb3IganNvbl9jb21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgogICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9t
YWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB9O1xuXG4iKQogCiAgICAgICAgICAg
ICBpZiBkb21haW5fZ3VhcmQ6CiAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmV2ZXJzZWQoZmly
c3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCk6CkBAIC0yMjk1LDYgKzIzOTUsNyBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAKICAgICAgICAgc29ydGVkX2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3Qg
PSBbCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3Qs
CisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdCwKICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX3NldHRlcnNfbGlzdCwKICAgICAgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9mb3J3YXJkX2xpc3QsCkBAIC0yMzEwLDExICsyNDExLDE0IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgICAgICBmb3IgbCBpbiBzb3J0ZWRfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlz
dDoKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4obCkKIAor
ICAgICAgICAgICAgYWdlbnRfaW50ZXJmYWNlX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1l
bF9jYXNlX3RvX3VwcGVyKGRvbWFpbl9uYW1lKSArICJDb21tYW5kSGFuZGxlciIKKwogICAgICAg
ICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2ZpeGVzLmFnZW50X3R5cGVfbmFtZQogICAg
ICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9maXhlcy5hZ2VudF9maWVsZF9uYW1l
CiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBw
ZW5kKCIgICAgICAgICwgbV8lcygwKSIgJSBhZ2VudF9maWVsZF9uYW1lKQotICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVyc19saXN0LmFwcGVuZCgiICAgIHZvaWQgcmVnaXN0ZXJB
Z2VudCglcyogJXMpIHsgQVNTRVJUKCFtXyVzKTsgbV8lcyA9ICVzOyB9IiAlIChhZ2VudF90eXBl
X25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25h
bWUsIGFnZW50X2ZpZWxkX25hbWUpKQotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZmll
bGRfbGlzdC5hcHBlbmQoIiAgICAlcyogbV8lczsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRf
ZmllbGRfbmFtZSkpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF92aXJ0dWFsX3NldHRl
cnNfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudCglcyAvKiAlcyAq
LyogJXMpID0gMDsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGFn
ZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVyc19s
aXN0LmFwcGVuZCgiICAgIHZvaWQgcmVnaXN0ZXJBZ2VudCglcyAvKiAlcyAqLyogJXMpIHsgQVNT
RVJUKCFtXyVzKTsgbV8lcyA9ICVzOyB9IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ludGVy
ZmFjZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVs
ZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMgLyogJXMgKi8qIG1fJXM7IiAlIChhZ2VudF90eXBl
X25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKICAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdC5hcHBlbmQoImNsYXNzICVzOyIgJSBh
Z2VudF90eXBlX25hbWUpCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9pbmNsdWRlX2xp
c3QuYXBwZW5kKCIjaW5jbHVkZSBcIiVzLmhcIiIgJSBhZ2VudF90eXBlX25hbWUpCiAKQEAgLTI0
MTgsOSArMjUyMiwxMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZGVmIHByb2Nlc3NfY29tbWFu
ZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKICAgICAgICAg
anNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQogICAgICAgICBHZW5lcmF0
b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNfJXNDbWQsIiAlIChk
b21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQotICAgICAgICBHZW5lcmF0b3IubWV0
aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAg
ICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpz
b25fY29tbWFuZF9uYW1lKSkKICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xh
cmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlc18lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAlIChkb21haW5fbmFtZSwganNvbl9jb21t
YW5kX25hbWUpKQogCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiICAgICAgICB2aXJ0dWFsIHZvaWQgJXMoRXJyb3JTdHJpbmcqIiAlIGpzb25f
Y29tbWFuZF9uYW1lKQorCiAgICAgICAgIG1ldGhvZF9pbl9jb2RlID0gIiIKICAgICAgICAgbWV0
aG9kX291dF9jb2RlID0gIiIKICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0ID0gW10KQEAg
LTI0MzksMjAgKzI1NDUsMjggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgIHBh
cmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShqc29uX3BhcmFtZXRlciwgZG9t
YWluX25hbWUpCiAKICAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGZv
cm1hbF9wYXJhbV90eXBlID0gdmFyX3R5cGUKICAgICAgICAgICAgICAgICBnZXR0ZXJfbmFtZSA9
IHBhcmFtX3Jhd190eXBlLmdldF9nZXR0ZXJfbmFtZSgpCiAKLSAgICAgICAgICAgICAgICBpZiAi
b3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwi
XToKKyAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGpzb25fcGFyYW1ldGVyLmdldCgib3B0aW9u
YWwiKQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgogICAgICAgICAgICAgICAgICAgICBj
b2RlID0gKCIgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7XG4iCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwg
XCIlc1wiLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1lLCB2YXJfdHlwZS5nZXRfdGV4dCgp
LCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29uX3BhcmFtX25hbWUsIGpzb25fcGFy
YW1fbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNfdmFsdWVGb3VuZCA/
ICZpbl8lcyA6IDAiICUgKGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKQorICAgICAg
ICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gImNvbnN0ICVzKiIKICAg
ICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgJXMg
aW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpO1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcl90eXBlLmdldF90
ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCiAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCisg
ICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtX3Jhd190eXBlLmlzX2hlYXZ5X3ZhbHVlKCk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gImNvbnN0
ICVzJiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiJXMiCiAKICAgICAgICAgICAgICAgICBtZXRo
b2RfaW5fY29kZSArPSBjb2RlCiAgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0
LmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9p
bnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgaW5fJXMiICUgKGZvcm1hbF9wYXJhbV90eXBlX3Bh
dHRlcm4gJSBmb3JtYWxfcGFyYW1fdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUpKQog
CiAgICAgICAgICAgICAgICAganNfYmluZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2pzX2Jp
bmRfdHlwZSgpCiAgICAgICAgICAgICAgICAganNfcGFyYW1fdGV4dCA9ICJ7XCJuYW1lXCI6IFwi
JXNcIiwgXCJ0eXBlXCI6IFwiJXNcIiwgXCJvcHRpb25hbFwiOiAlc30iICUgKApAQCAtMjQ4MCwx
NyArMjU5NCwxOCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgdmFyX3R5cGUg
PSByYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5PVVRQVVQsIE5vbmUpCiAKICAg
ICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAodmFyX3R5cGUu
Z2V0X3RleHQoKSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlhbGl6ZXIpCi0gICAgICAgICAgICAg
ICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAocmF3X3R5cGUuZ2V0X291dHB1dF9hcmd1bWVudF9w
cmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKKyAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVz
b3V0XyVzIiAlIChyYXdfdHlwZS5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKS5nZXRfYXJndW1lbnRf
cHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCiAgICAgICAgICAgICAgICAgY29vayA9ICIgICAg
ICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRfJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNv
bl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFtZSkKICAgICAgICAgICAgICAgICBpZiBvcHRp
b25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwg
cHJvcGVybHkuIFByb2JhYmx5IGFuIGFkZGl0aW9uYWwgb3V0cHV0IHBhcmFtZXRlciBzaG91bGQg
YmUgaW4gZWFjaCBjYXNlLgogICAgICAgICAgICAgICAgICAgICBpZiB2YXJfdHlwZS5nZXRfdGV4
dCgpID09ICJib29sIjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAg
aWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCiAgICAgICAgICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBzdXBwb3J0
IG9wdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICAvLyBG
SVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLlxuIiArIGNvb2sKIAogICAgICAgICAgICAgICAg
IG1ldGhvZF9vdXRfY29kZSArPSBjb2RlCiAgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJh
bV9saXN0LmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9h
Z2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMlcyBvdXRfJXMiICUgKHZhcl90eXBlLmdl
dF90ZXh0KCksIHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19tb2RlbCgpLmdldF9wYXJhbWV0ZXJf
dHlwZV9zdWZmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkpCiAgICAgICAgICAgICAgICAgcmVzcG9u
c2VfY29va19saXN0LmFwcGVuZChjb29rKQogCiAgICAgICAgICAgICAgICAgYmFja2VuZF9qc19y
ZXBseV9wYXJhbV9saXN0LmFwcGVuZCgiXCIlc1wiIiAlIGpzb25fcmV0dXJuX25hbWUpCkBAIC0y
NTEwLDYgKzI2MjUsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIg
JSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKIAogICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKFwiJXMuJXNcIiwgWyVzXSwgJXMpO1xuIiAlIChkb21haW5fbmFt
ZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCwganNfcmVwbHlfbGlzdCkp
CisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgi
KSA9IDA7XG4iKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5
cGVfbWFwKToKQEAgLTI2MDQsMTcgKzI3MjAsMTkgQEAgYmFja2VuZF9qc19maWxlID0gb3Blbihv
dXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInciKQogCiAK
IGJhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25l
LAotICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9y
X2luaXRfbGlzdCwgIlxuIiksCi0gICAgc2V0dGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX3Nl
dHRlcnNfbGlzdCwgIlxuIiksCisgICAgdmlydHVhbFNldHRlcnM9am9pbihHZW5lcmF0b3IuYmFj
a2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdCwgIlxuIiksCisgICAgYWdlbnRJbnRlcmZhY2VzPWpv
aW4oR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QsICIiKSwKICAgICBtZXRo
b2ROYW1lc0VudW1Db250ZW50PWpvaW4oR2VuZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdCwg
IlxuIiksCi0gICAgbWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0
aG9kX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAotICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdCwgIlxuIiksCiAgICAgZm9yd2FyZERlY2xhcmF0
aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdCwgIlxuIikpKQogCiBiYWNr
ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUs
CisgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3Jf
aW5pdF9saXN0LCAiXG4iKSwKKyAgICBzZXR0ZXJzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfc2V0
dGVyc19saXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5i
YWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAogICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9p
bihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwK
ICAgICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiks
CiAgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlv
bl9saXN0LCAiXG4iKSwKKyAgICBtZXRob2REZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFj
a2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCwgIlxuIiksCiAgICAgbWVzc2FnZUhhbmRsZXJz
PWpvaW4oR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3QsICJcbiIpKSkKIAogZnJvbnRlbmRf
aF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9oLnN1YnN0aXR1dGUoTm9uZSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBh
YjZmMDc4NWRlN2Y2ZGUxNTU3ODMyMDQ3MTBhN2Q2MWUxZjk1MzUwLi5hOTQyZDA4ODg3YzJjMzk2
NDdlYmFlYjdjMWFhMzI5ZTMxNjcxOTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCk7CiAKICAgICBBU1NFUlQobV9pbnNwZWN0b3JDbGll
bnQpOwotICAgIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgPSBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIobV9pbnNwZWN0b3JDbGllbnQpKTsKKyAgICBtX2luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShtX2luc3BlY3RvckNsaWVudCk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
ZGlzcGF0Y2hlciA9IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7CiAgICAgZm9y
IChBZ2VudHM6Oml0ZXJhdG9yIGl0ID0gbV9hZ2VudHMuYmVnaW4oKTsgaXQgIT0gbV9hZ2VudHMu
ZW5kKCk7ICsraXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2Vy
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2Vy
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZTM4MDFjNmU0MmZkZDZkZjRmZGNjMTU4Zjc3
ZWVjNzJjYThjZjhlMS4uNzlkYjM1ZjI5MWJiMDEwMDNhNDI5NDkzY2RlNGQwOGM1YWI2MTM0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlckluc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJJbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgV29ya2VySW5zcGVjdG9yQ29u
dHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICBtX3N0YXRlLT51bm11dGUoKTsKICAgICBt
X2Zyb250ZW5kQ2hhbm5lbCA9IGFkb3B0UHRyKG5ldyBQYWdlSW5zcGVjdG9yUHJveHkobV93b3Jr
ZXJDb250ZXh0KSk7CiAgICAgbV9mcm9udGVuZCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JGcm9u
dGVuZChtX2Zyb250ZW5kQ2hhbm5lbC5nZXQoKSkpOwotICAgIG1fYmFja2VuZERpc3BhdGNoZXIg
PSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobV9mcm9udGVuZENoYW5u
ZWwuZ2V0KCkpKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShtX2Zyb250ZW5kQ2hhbm5lbC5nZXQoKSk7CiAgICAgbV9jb25zb2xl
QWdlbnQtPnJlZ2lzdGVySW5EaXNwYXRjaGVyKG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIG1fZGVidWdnZXJBZ2VudC0+cmVn
aXN0ZXJJbkRpc3BhdGNoZXIobV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124042</attachid>
            <date>2012-01-25 17:19:30 -0800</date>
            <delta_ts>2012-01-25 17:19:30 -0800</delta_ts>
            <desc>original cpp</desc>
            <filename>InspectorBackendDispatcher.base.cpp</filename>
            <type>text/plain</type>
            <size>170958</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1
ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQu
aCIKI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgiCiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaCIKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaW5jbHVkZSAiSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5oIgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgiCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCgojaW5jbHVkZSAiSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmgiCiNlbmRpZiAv
LyBFTkFCTEUoRklMRV9TWVNURU0pCgojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgojaW5j
bHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCIKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0
b3JNZW1vcnlBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgojaW5j
bHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIK
I2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKI2lmIEVOQUJMRShXT1JLRVJTKQoK
I2luY2x1ZGUgIkluc3BlY3RvcldvcmtlckFnZW50LmgiCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKCgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiAgICAiSW5zcGVjdG9yLmVuYWJsZSIsCiAgICAi
SW5zcGVjdG9yLmRpc2FibGUiLAogICAgIk1lbW9yeS5nZXRET01Ob2RlQ291bnQiLAogICAgIlBh
Z2UuZW5hYmxlIiwKICAgICJQYWdlLmRpc2FibGUiLAogICAgIlBhZ2UuYWRkU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZCIsCiAgICAiUGFnZS5yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwKICAg
ICJQYWdlLnJlbG9hZCIsCiAgICAiUGFnZS5uYXZpZ2F0ZSIsCiAgICAiUGFnZS5nZXRDb29raWVz
IiwKICAgICJQYWdlLmRlbGV0ZUNvb2tpZSIsCiAgICAiUGFnZS5nZXRSZXNvdXJjZVRyZWUiLAog
ICAgIlBhZ2UuZ2V0UmVzb3VyY2VDb250ZW50IiwKICAgICJQYWdlLnNlYXJjaEluUmVzb3VyY2Ui
LAogICAgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZXMiLAogICAgIlBhZ2Uuc2V0RG9jdW1lbnRDb250
ZW50IiwKICAgICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIsCiAgICAiUnVudGltZS5ldmFs
dWF0ZSIsCiAgICAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIsCiAgICAiUnVudGltZS5nZXRQcm9w
ZXJ0aWVzIiwKICAgICJSdW50aW1lLnJlbGVhc2VPYmplY3QiLAogICAgIlJ1bnRpbWUucmVsZWFz
ZU9iamVjdEdyb3VwIiwKICAgICJSdW50aW1lLnJ1biIsCiAgICAiQ29uc29sZS5lbmFibGUiLAog
ICAgIkNvbnNvbGUuZGlzYWJsZSIsCiAgICAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiwKICAgICJD
b25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIiwKICAgICJDb25zb2xlLmFkZEluc3BlY3Rl
ZE5vZGUiLAogICAgIk5ldHdvcmsuZW5hYmxlIiwKICAgICJOZXR3b3JrLmRpc2FibGUiLAogICAg
Ik5ldHdvcmsuc2V0VXNlckFnZW50T3ZlcnJpZGUiLAogICAgIk5ldHdvcmsuc2V0RXh0cmFIVFRQ
SGVhZGVycyIsCiAgICAiTmV0d29yay5nZXRSZXNwb25zZUJvZHkiLAogICAgIk5ldHdvcmsuY2Fu
Q2xlYXJCcm93c2VyQ2FjaGUiLAogICAgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiLAogICAg
Ik5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsCiAgICAiTmV0d29yay5jbGVhckJyb3dz
ZXJDb29raWVzIiwKICAgICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiLAojaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKCiAgICAiRGF0YWJhc2UuZW5hYmxlIiwKICAgICJEYXRhYmFzZS5kaXNhYmxl
IiwKICAgICJEYXRhYmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiLAogICAgIkRhdGFiYXNlLmV4
ZWN1dGVTUUwiLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKCiAgICAiSW5kZXhlZERCLmVuYWJsZSIsCiAgICAiSW5kZXhlZERCLmRp
c2FibGUiLAogICAgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lIiwKICAg
ICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKICAgICJET01TdG9yYWdlLmVuYWJsZSIsCiAgICAiRE9NU3RvcmFnZS5kaXNhYmxl
IiwKICAgICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiwKICAgICJET01TdG9yYWdl
LnNldERPTVN0b3JhZ2VJdGVtIiwKICAgICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVt
IiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMiLAogICAgIkFw
cGxpY2F0aW9uQ2FjaGUuZW5hYmxlIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldE1hbmlmZXN0
Rm9yRnJhbWUiLAogICAgIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lIiwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAiRmlsZVN5c3RlbS5lbmFibGUiLAog
ICAgIkZpbGVTeXN0ZW0uZGlzYWJsZSIsCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgog
ICAgIkRPTS5nZXREb2N1bWVudCIsCiAgICAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiwKICAgICJE
T00ucXVlcnlTZWxlY3RvciIsCiAgICAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLAogICAgIkRPTS5z
ZXROb2RlTmFtZSIsCiAgICAiRE9NLnNldE5vZGVWYWx1ZSIsCiAgICAiRE9NLnJlbW92ZU5vZGUi
LAogICAgIkRPTS5zZXRBdHRyaWJ1dGVWYWx1ZSIsCiAgICAiRE9NLnNldEF0dHJpYnV0ZXNBc1Rl
eHQiLAogICAgIkRPTS5yZW1vdmVBdHRyaWJ1dGUiLAogICAgIkRPTS5nZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUiLAogICAgIkRPTS5nZXRPdXRlckhUTUwiLAogICAgIkRPTS5zZXRPdXRlckhUTUwi
LAogICAgIkRPTS5wZXJmb3JtU2VhcmNoIiwKICAgICJET00uZ2V0U2VhcmNoUmVzdWx0cyIsCiAg
ICAiRE9NLmRpc2NhcmRTZWFyY2hSZXN1bHRzIiwKICAgICJET00ucmVxdWVzdE5vZGUiLAogICAg
IkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgIkRPTS5oaWdobGlnaHRSZWN0IiwKICAg
ICJET00uaGlnaGxpZ2h0Tm9kZSIsCiAgICAiRE9NLmhpZGVIaWdobGlnaHQiLAogICAgIkRPTS5o
aWdobGlnaHRGcmFtZSIsCiAgICAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsCiAgICAi
RE9NLnJlc29sdmVOb2RlIiwKICAgICJET00uZ2V0QXR0cmlidXRlcyIsCiAgICAiRE9NLm1vdmVU
byIsCiAgICAiQ1NTLmVuYWJsZSIsCiAgICAiQ1NTLmRpc2FibGUiLAogICAgIkNTUy5nZXRNYXRj
aGVkU3R5bGVzRm9yTm9kZSIsCiAgICAiQ1NTLmdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAg
IkNTUy5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSIsCiAgICAiQ1NTLmdldEFsbFN0eWxlU2hlZXRz
IiwKICAgICJDU1MuZ2V0U3R5bGVTaGVldCIsCiAgICAiQ1NTLmdldFN0eWxlU2hlZXRUZXh0IiwK
ICAgICJDU1Muc2V0U3R5bGVTaGVldFRleHQiLAogICAgIkNTUy5zZXRQcm9wZXJ0eVRleHQiLAog
ICAgIkNTUy50b2dnbGVQcm9wZXJ0eSIsCiAgICAiQ1NTLnNldFJ1bGVTZWxlY3RvciIsCiAgICAi
Q1NTLmFkZFJ1bGUiLAogICAgIkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiwKICAgICJD
U1Muc3RhcnRTZWxlY3RvclByb2ZpbGVyIiwKICAgICJDU1Muc3RvcFNlbGVjdG9yUHJvZmlsZXIi
LAogICAgIlRpbWVsaW5lLnN0YXJ0IiwKICAgICJUaW1lbGluZS5zdG9wIiwKICAgICJUaW1lbGlu
ZS5zZXRJbmNsdWRlTWVtb3J5RGV0YWlscyIsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAiRGVidWdnZXIuY2F1c2VzUmVjb21waWxhdGlvbiIsCiAgICAiRGVidWdnZXIuc3Vw
cG9ydHNOYXRpdmVCcmVha3BvaW50cyIsCiAgICAiRGVidWdnZXIuZW5hYmxlIiwKICAgICJEZWJ1
Z2dlci5kaXNhYmxlIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIsCiAgICAi
RGVidWdnZXIuc2V0QnJlYWtwb2ludEJ5VXJsIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50
IiwKICAgICJEZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5jb250aW51
ZVRvTG9jYXRpb24iLAogICAgIkRlYnVnZ2VyLnN0ZXBPdmVyIiwKICAgICJEZWJ1Z2dlci5zdGVw
SW50byIsCiAgICAiRGVidWdnZXIuc3RlcE91dCIsCiAgICAiRGVidWdnZXIucGF1c2UiLAogICAg
IkRlYnVnZ2VyLnJlc3VtZSIsCiAgICAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50IiwKICAgICJE
ZWJ1Z2dlci5jYW5TZXRTY3JpcHRTb3VyY2UiLAogICAgIkRlYnVnZ2VyLnNldFNjcmlwdFNvdXJj
ZSIsCiAgICAiRGVidWdnZXIuZ2V0U2NyaXB0U291cmNlIiwKICAgICJEZWJ1Z2dlci5nZXRGdW5j
dGlvbkxvY2F0aW9uIiwKICAgICJEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyIsCiAgICAi
RGVidWdnZXIuZXZhbHVhdGVPbkNhbGxGcmFtZSIsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAiRE9NRGVi
dWdnZXIuc2V0RE9NQnJlYWtwb2ludCIsCiAgICAiRE9NRGVidWdnZXIucmVtb3ZlRE9NQnJlYWtw
b2ludCIsCiAgICAiRE9NRGVidWdnZXIuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiLAogICAg
IkRPTURlYnVnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50IiwKICAgICJET01EZWJ1
Z2dlci5zZXRYSFJCcmVha3BvaW50IiwKICAgICJET01EZWJ1Z2dlci5yZW1vdmVYSFJCcmVha3Bv
aW50IiwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJQcm9maWxlci5jYXVzZXNSZWNvbXBpbGF0aW9uIiwK
ICAgICJQcm9maWxlci5pc1NhbXBsaW5nIiwKICAgICJQcm9maWxlci5oYXNIZWFwUHJvZmlsZXIi
LAogICAgIlByb2ZpbGVyLmVuYWJsZSIsCiAgICAiUHJvZmlsZXIuZGlzYWJsZSIsCiAgICAiUHJv
ZmlsZXIuc3RhcnQiLAogICAgIlByb2ZpbGVyLnN0b3AiLAogICAgIlByb2ZpbGVyLmdldFByb2Zp
bGVIZWFkZXJzIiwKICAgICJQcm9maWxlci5nZXRQcm9maWxlIiwKICAgICJQcm9maWxlci5yZW1v
dmVQcm9maWxlIiwKICAgICJQcm9maWxlci5jbGVhclByb2ZpbGVzIiwKICAgICJQcm9maWxlci50
YWtlSGVhcFNuYXBzaG90IiwKICAgICJQcm9maWxlci5jb2xsZWN0R2FyYmFnZSIsCiAgICAiUHJv
ZmlsZXIuZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgIldvcmtlci5zZXRXb3JrZXJJ
bnNwZWN0aW9uRW5hYmxlZCIsCiAgICAiV29ya2VyLnNlbmRNZXNzYWdlVG9Xb3JrZXIiLAogICAg
Ildvcmtlci5jb25uZWN0VG9Xb3JrZXIiLAogICAgIldvcmtlci5kaXNjb25uZWN0RnJvbVdvcmtl
ciIsCiAgICAiV29ya2VyLnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzIiwKI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQoKfTsKCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0
b3JfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiSW5zcGVjdG9yIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2luc3BlY3RvckFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluc3BlY3Rvci5lbmFibGUiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVj
dG9yX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2luc3BlY3RvckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJJbnNwZWN0b3IgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1faW5zcGVjdG9yQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluc3BlY3Rvci5kaXNhYmxlIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1l
bW9yeV9nZXRET01Ob2RlQ291bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX21lbW9yeUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJNZW1vcnkgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2RvbUdyb3VwcyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9zdHJpbmdzID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX21lbW9yeUFnZW50LT5nZXRET01Ob2RlQ291
bnQoJmVycm9yLCBvdXRfZG9tR3JvdXBzLCBvdXRfc3RyaW5ncyk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImRvbUdyb3VwcyIsIG91dF9kb21Hcm91cHMpOwogICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJzdHJpbmdzIiwgb3V0X3N0cmluZ3MpOwogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk1lbW9yeS5nZXRET01Ob2RlQ291bnQiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6UGFnZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdl
QWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9kaXNhYmxlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdl
LmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6UGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfaWRlbnRp
ZmllciA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRTb3VyY2UgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0U291cmNlIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFn
ZUFnZW50LT5hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKCZlcnJvciwgaW5fc2NyaXB0U291cmNl
LCAmb3V0X2lkZW50aWZpZXIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWRl
bnRpZmllciIsIG91dF9pZGVudGlmaWVyKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
UGFnZV9yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
YWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9pZGVudGlm
aWVyID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImlkZW50aWZpZXIiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9wYWdlQWdlbnQtPnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9p
ZGVudGlmaWVyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIlBhZ2UucmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX3JlbG9h
ZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBib29sIGlnbm9yZUNhY2hlX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5f
aWdub3JlQ2FjaGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImlnbm9yZUNhY2hl
IiwgJmlnbm9yZUNhY2hlX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
c2NyaXB0VG9FdmFsdWF0ZU9uTG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5f
c2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJz
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwgJnNjcmlwdFRvRXZhbHVhdGVPbkxvYWRfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fcGFnZUFnZW50LT5yZWxvYWQoJmVycm9yLCBpZ25vcmVDYWNoZV92YWx1ZUZv
dW5kID8gJmluX2lnbm9yZUNhY2hlIDogMCwgc2NyaXB0VG9FdmFsdWF0ZU9uTG9hZF92YWx1ZUZv
dW5kID8gJmluX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWQgOiAwKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UucmVsb2FkIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2Vf
bmF2aWdhdGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJ1cmwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPm5hdmlnYXRlKCZlcnJvciwgaW5fdXJs
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBh
Z2UubmF2aWdhdGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9nZXRDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2Nvb2tpZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICBTdHJpbmcgb3V0X2Nvb2tpZXNTdHJpbmcgPSAiIjsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX3BhZ2VBZ2VudC0+Z2V0Q29va2llcygmZXJyb3IsIG91dF9jb29raWVzLCAmb3V0X2Nvb2tp
ZXNTdHJpbmcpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb29raWVzIiwgb3V0
X2Nvb2tpZXMpOwogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjb29raWVzU3RyaW5nIiwgb3V0
X2Nvb2tpZXNTdHJpbmcpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIlBhZ2UuZ2V0Q29va2llcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX2RlbGV0ZUNvb2tpZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fY29va2llTmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJjb29r
aWVOYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2RvbWFpbiA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJkb21haW4iLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPmRlbGV0ZUNvb2tpZSgmZXJyb3IsIGluX2Nvb2tpZU5hbWUsIGluX2RvbWFpbik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmRlbGV0
ZUNvb2tpZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpQYWdlX2dldFJlc291cmNlVHJlZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfZnJhbWVUcmVlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+Z2V0UmVzb3VyY2VUcmVl
KCZlcnJvciwgb3V0X2ZyYW1lVHJlZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJmcmFtZVRyZWUiLCBvdXRfZnJhbWVUcmVlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLmdldFJlc291cmNlVHJlZSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX2dl
dFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBTdHJpbmcgb3V0X2NvbnRlbnQgPSAiIjsKICAgIGJvb2wgb3V0X2Jhc2U2NEVu
Y29kZWQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPmdldFJlc291cmNlQ29udGVudCgmZXJyb3IsIGluX2Zy
YW1lSWQsIGluX3VybCwgJm91dF9jb250ZW50LCAmb3V0X2Jhc2U2NEVuY29kZWQpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY29udGVudCIsIG91dF9jb250ZW50KTsKICAgICAg
ICByZXN1bHQtPnNldEJvb2xlYW4oImJhc2U2NEVuY29kZWQiLCBvdXRfYmFzZTY0RW5jb2RlZCk7
CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5n
ZXRSZXNvdXJjZUNvbnRlbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9zZWFyY2hJblJlc291cmNlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gb3V0X3Jlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJm
cmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAicXVlcnki
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXND
b250YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsK
ICAgIGJvb2wgaW5faXNSZWdleCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNS
ZWdleCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+c2VhcmNoSW5S
ZXNvdXJjZSgmZXJyb3IsIGluX2ZyYW1lSWQsIGluX3VybCwgaW5fcXVlcnksIGNhc2VTZW5zaXRp
dmVfdmFsdWVGb3VuZCA/ICZpbl9jYXNlU2Vuc2l0aXZlIDogMCwgaXNSZWdleF92YWx1ZUZvdW5k
ID8gJmluX2lzUmVnZXggOiAwLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5zZWFyY2hJblJlc291cmNlIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2Vf
c2VhcmNoSW5SZXNvdXJjZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90ZXh0ID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9jYXNl
U2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZl
IiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdleCA9IGdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdleCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX3BhZ2VBZ2VudC0+c2VhcmNoSW5SZXNvdXJjZXMoJmVycm9yLCBpbl90ZXh0LCBj
YXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAsIGlzUmVnZXhf
dmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZXMi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6UGFnZV9zZXREb2N1bWVudENvbnRlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIFN0cmluZyBpbl9odG1sID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
Imh0bWwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPnNldERvY3VtZW50Q29udGVudCgmZXJyb3Is
IGluX2ZyYW1lSWQsIGluX2h0bWwpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5zZXREb2N1bWVudENvbnRlbnQiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9zZXRT
Y3JlZW5TaXplT3ZlcnJpZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dpZHRoID0gZ2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgIndpZHRoIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX2hlaWdo
dCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJoZWlnaHQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdl
QWdlbnQtPnNldFNjcmVlblNpemVPdmVycmlkZSgmZXJyb3IsIGluX3dpZHRoLCBpbl9oZWlnaHQp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUGFn
ZS5zZXRTY3JlZW5TaXplT3ZlcnJpZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9ldmFsdWF0ZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGJvb2wgb3V0X3dhc1Rocm93biA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9l
eHByZXNzaW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV4cHJlc3Npb24iLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJvYmplY3RHcm91cCIsICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kID0gZmFs
c2U7CiAgICBib29sIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSA9IGdldEJvb2xlYW4ocGFyYW1z
Q29udGFpbmVyUHRyLCAiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwgJmluY2x1ZGVDb21tYW5kTGlu
ZUFQSV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9kb05vdFBhdXNlT25F
eGNlcHRpb25zID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkb05vdFBhdXNlT25F
eGNlcHRpb25zIiwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCBmcmFtZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmlu
ZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAm
ZnJhbWVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHJldHVybkJ5
VmFsdWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXR1cm5CeVZhbHVlID0gZ2V0
Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJyZXR1cm5CeVZhbHVlIiwgJnJldHVybkJ5VmFs
dWVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFnZW50LT5ldmFsdWF0ZSgmZXJyb3IsIGlu
X2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAmaW5fb2JqZWN0R3JvdXAgOiAw
LCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/ICZpbl9pbmNsdWRlQ29tbWFuZExp
bmVBUEkgOiAwLCBkb05vdFBhdXNlT25FeGNlcHRpb25zX3ZhbHVlRm91bmQgPyAmaW5fZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9ucyA6IDAsIGZyYW1lSWRfdmFsdWVGb3VuZCA/ICZpbl9mcmFtZUlkIDog
MCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8gJmluX3JldHVybkJ5VmFsdWUgOiAwLCBvdXRf
cmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICBpZiAob3V0X3dhc1Rocm93bikKICAgICAg
ICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJ3YXNUaHJvd24iLCBvdXRfd2FzVGhyb3duKTsKICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLmV2
YWx1YXRlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OlJ1bnRpbWVfY2FsbEZ1bmN0aW9uT24obG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X3J1bnRpbWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGlt
ZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb3V0X3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBib29sIG91dF93
YXNUaHJvd24gPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBTdHJpbmcgaW5fZnVuY3Rpb25EZWNsYXJhdGlvbiA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJmdW5jdGlvbkRlY2xhcmF0aW9uIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgYm9vbCBhcmd1bWVudHNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBpbl9hcmd1bWVudHMgPSBnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIs
ICJhcmd1bWVudHMiLCAmYXJndW1lbnRzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3Jl
dHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInJldHVybkJ5VmFs
dWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9ydW50aW1lQWdlbnQtPmNh
bGxGdW5jdGlvbk9uKCZlcnJvciwgaW5fb2JqZWN0SWQsIGluX2Z1bmN0aW9uRGVjbGFyYXRpb24s
IGFyZ3VtZW50c192YWx1ZUZvdW5kID8gJmluX2FyZ3VtZW50cyA6IDAsIHJldHVybkJ5VmFsdWVf
dmFsdWVGb3VuZCA/ICZpbl9yZXR1cm5CeVZhbHVlIDogMCwgb3V0X3Jlc3VsdCwgJm91dF93YXNU
aHJvd24pOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jl
c3VsdCk7CiAgICAgICAgaWYgKG91dF93YXNUaHJvd24pCiAgICAgICAgICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbigid2FzVGhyb3duIiwgb3V0X3dhc1Rocm93bik7CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpSdW50aW1lX2dldFByb3BlcnRpZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfcmVzdWx0
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9v
YmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb3duUHJvcGVydGllc192YWx1ZUZvdW5kID0gZmFs
c2U7CiAgICBib29sIGluX293blByb3BlcnRpZXMgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5l
clB0ciwgIm93blByb3BlcnRpZXMiLCAmb3duUHJvcGVydGllc192YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9ydW50aW1lQWdlbnQtPmdldFByb3BlcnRpZXMoJmVycm9yLCBpbl9vYmplY3RJZCwgb3duUHJv
cGVydGllc192YWx1ZUZvdW5kID8gJmluX293blByb3BlcnRpZXMgOiAwLCBvdXRfcmVzdWx0KTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUnVudGltZS5n
ZXRQcm9wZXJ0aWVzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJS
dW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJp
bmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9ydW50aW1lQWdlbnQtPnJlbGVhc2VPYmplY3QoJmVycm9yLCBpbl9vYmpl
Y3RJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJSdW50aW1lLnJlbGVhc2VPYmplY3QiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXAo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgIm9iamVjdEdyb3VwIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFnZW50LT5yZWxlYXNl
T2JqZWN0R3JvdXAoJmVycm9yLCBpbl9vYmplY3RHcm91cCk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLnJlbGVhc2VPYmplY3RHcm91
cCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpSdW50aW1lX3J1bihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX3J1bnRpbWVBZ2VudC0+cnVuKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLnJ1biIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2Vu
YWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJD
b25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVB
Z2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJDb25zb2xlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2Rpc2FibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nv
bnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29sZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jb25zb2xlQWdlbnQtPmRp
c2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkNvbnNvbGUuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2NsZWFyTWVzc2FnZXMobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nv
bnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29sZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jb25zb2xlQWdlbnQtPmNs
ZWFyTWVzc2FnZXMoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuY2xlYXJNZXNzYWdlcyIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX3NldE1v
bml0b3JpbmdYSFJFbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IGdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNvbGVBZ2Vu
dC0+c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuc2V0TW9u
aXRvcmluZ1hIUkVuYWJsZWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29uc29sZV9hZGRJbnNwZWN0ZWROb2RlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fY29uc29sZUFnZW50LT5hZGRJbnNwZWN0ZWROb2RlKCZlcnJvciwgaW5fbm9k
ZUlkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkNvbnNvbGUuYWRkSW5zcGVjdGVkTm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2VuYWJsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0Fn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+ZW5hYmxlKCZl
cnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJOZXR3b3JrLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmRpc2FibGUoJmVycm9yKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk5ldHdv
cmsuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX3NldFVzZXJBZ2VudE92ZXJyaWRlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl91c2VyQWdlbnQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXNl
ckFnZW50IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5zZXRVc2VyQWdlbnRPdmVycmlkZSgm
ZXJyb3IsIGluX3VzZXJBZ2VudCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLnNldFVzZXJBZ2VudE92ZXJyaWRlIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmtfc2V0RXh0cmFIVFRQSGVhZGVycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbl9oZWFkZXJzID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgImhlYWRlcnMiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPnNldEV4dHJhSFRUUEhlYWRlcnMoJmVycm9yLCBpbl9o
ZWFkZXJzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIk5ldHdvcmsuc2V0RXh0cmFIVFRQSGVhZGVycyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2dldFJlc3BvbnNl
Qm9keShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBTdHJpbmcgb3V0X2JvZHkgPSAiIjsKICAgIGJvb2wgb3V0X2Jhc2U2NEVuY29kZWQgPSBm
YWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcmVxdWVzdElkID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInJlcXVlc3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+
Z2V0UmVzcG9uc2VCb2R5KCZlcnJvciwgaW5fcmVxdWVzdElkLCAmb3V0X2JvZHksICZvdXRfYmFz
ZTY0RW5jb2RlZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJib2R5Iiwgb3V0
X2JvZHkpOwogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiYmFzZTY0RW5jb2RlZCIsIG91dF9i
YXNlNjRFbmNvZGVkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJOZXR3b3JrLmdldFJlc3BvbnNlQm9keSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2NhbkNsZWFyQnJv
d3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jl
c3VsdCA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5jYW5DbGVhckJyb3dzZXJD
YWNoZSgmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29s
ZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNhbkNsZWFyQnJvd3NlckNhY2hlIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5l
dHdvcmtfY2xlYXJCcm93c2VyQ2FjaGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmNsZWFyQnJvd3NlckNhY2hlKCZlcnJvcik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNs
ZWFyQnJvd3NlckNhY2hlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0
d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+Y2FuQ2xlYXJCcm93c2VyQ29va2llcygmZXJyb3Is
ICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkg
JiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQi
LCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJOZXR3b3JrLmNhbkNsZWFyQnJvd3NlckNvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19jbGVh
ckJyb3dzZXJDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fbmV0d29ya0FnZW50LT5jbGVhckJyb3dzZXJDb29raWVzKCZlcnJvcik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNsZWFyQnJv
d3NlckNvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19zZXRDYWNoZURpc2FibGVkKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
Ik5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJv
b2wgaW5fY2FjaGVEaXNhYmxlZCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiY2Fj
aGVEaXNhYmxlZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25ldHdvcmtBZ2VudC0+c2V0Q2FjaGVEaXNhYmxlZCgm
ZXJyb3IsIGluX2NhY2hlRGlzYWJsZWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5zZXRDYWNoZURpc2FibGVkIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5lbmFibGUoJmVycm9yKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFi
YXNlLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFz
ZS5kaXNhYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlX2dldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X3RhYmxlTmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgaW50IGluX2RhdGFiYXNlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAiZGF0YWJhc2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RhdGFiYXNlQWdlbnQtPmdldERhdGFi
YXNlVGFibGVOYW1lcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIG91dF90YWJsZU5hbWVzKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgidGFibGVOYW1lcyIsIG91dF90YWJsZU5hbWVz
KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRh
YmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VfZXhlY3V0ZVNRTChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJv
b2wgb3V0X3N1Y2Nlc3MgPSBmYWxzZTsKICAgIGludCBvdXRfdHJhbnNhY3Rpb25JZCA9IDA7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgaW50IGluX2RhdGFiYXNlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAiZGF0YWJhc2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9x
dWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2RhdGFiYXNlQWdlbnQtPmV4ZWN1dGVTUUwoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgJm91dF9zdWNjZXNzLCAmb3V0X3RyYW5zYWN0aW9uSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldEJvb2xlYW4oInN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAgICAgICAgcmVzdWx0LT5z
ZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCBvdXRfdHJhbnNhY3Rpb25JZCk7CiAgICB9CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNR
TCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkluZGV4ZWREQl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1faW5kZXhlZERCQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiSW5kZXhlZERC
LmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpJbmRleGVkREJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5kZXhlZERCQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluZGV4ZWREQiBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9pbmRleGVkREJBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiSW5kZXhl
ZERCLmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5hbWVzRm9yRnJhbWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIGludCBpbl9yZXF1ZXN0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAicmVxdWVzdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2Zy
YW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2luZGV4ZWREQkFnZW50LT5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKCZlcnJvciwg
aW5fcmVxdWVzdElkLCBpbl9mcmFtZUlkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZy
YW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2UobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2luZGV4ZWREQkFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRl
eGVkREIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9yZXF1ZXN0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAicmVxdWVzdElkIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl9kYXRhYmFzZU5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZGF0
YWJhc2VOYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5kZXhlZERCQWdlbnQtPnJlcXVlc3REYXRhYmFzZSgm
ZXJyb3IsIGluX3JlcXVlc3RJZCwgaW5fZnJhbWVJZCwgaW5fZGF0YWJhc2VOYW1lKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5y
ZXF1ZXN0RGF0YWJhc2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RE9NU3RvcmFnZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kb21TdG9yYWdlQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NU3RvcmFnZS5lbmFibGUi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6RE9NU3RvcmFnZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21TdG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTVN0b3JhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdl
LmRpc2FibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9nZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG91dF9lbnRyaWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9zdG9yYWdlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAic3RvcmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5nZXRET01T
dG9yYWdlRW50cmllcygmZXJyb3IsIGluX3N0b3JhZ2VJZCwgb3V0X2VudHJpZXMpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJlbnRyaWVzIiwgb3V0X2VudHJpZXMpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTVN0b3JhZ2UuZ2V0
RE9NU3RvcmFnZUVudHJpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9zZXRET01TdG9yYWdlSXRlbShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBib29sIG91dF9zdWNjZXNzID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3N0b3Jh
Z2VJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJzdG9yYWdlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fa2V5ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgImtleSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl92YWx1ZSA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ2YWx1ZSIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbVN0
b3JhZ2VBZ2VudC0+c2V0RE9NU3RvcmFnZUl0ZW0oJmVycm9yLCBpbl9zdG9yYWdlSWQsIGluX2tl
eSwgaW5fdmFsdWUsICZvdXRfc3VjY2Vzcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9v
bGVhbigic3VjY2VzcyIsIG91dF9zdWNjZXNzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLnNldERPTVN0b3JhZ2VJdGVtIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRPTVN0b3JhZ2VfcmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rv
bVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NU3Rv
cmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc3VjY2VzcyA9
IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9zdG9yYWdlSWQgPSBnZXRJbnQocGFyYW1z
Q29udGFpbmVyUHRyLCAic3RvcmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3Ry
aW5nIGluX2tleSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJrZXkiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9kb21TdG9yYWdlQWdlbnQtPnJlbW92ZURPTVN0b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3Rv
cmFnZUlkLCBpbl9rZXksICZvdXRfc3VjY2Vzcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbigic3VjY2VzcyIsIG91dF9zdWNjZXNzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVt
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYXBwbGljYXRp
b25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBsaWNh
dGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IG91dF9mcmFtZUlkcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cygmZXJy
b3IsIG91dF9mcmFtZUlkcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImZyYW1l
SWRzIiwgb3V0X2ZyYW1lSWRzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6QXBwbGljYXRpb25DYWNoZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCop
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQXBwbGljYXRpb25DYWNoZSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQtPmVu
YWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiQXBwbGljYXRpb25DYWNoZS5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QXBwbGljYXRpb25DYWNoZV9n
ZXRNYW5pZmVzdEZvckZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hl
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2Fj
aGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfbWFuaWZlc3RV
UkwgPSAiIjsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fYXBwbGljYXRpb25DYWNo
ZUFnZW50LT5nZXRNYW5pZmVzdEZvckZyYW1lKCZlcnJvciwgaW5fZnJhbWVJZCwgJm91dF9tYW5p
ZmVzdFVSTCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIs
IG91dF9tYW5pZmVzdFVSTCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQXBwbGljYXRpb25DYWNoZS5nZXRNYW5pZmVzdEZvckZyYW1lIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkFw
cGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2FjaGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9hcHBsaWNhdGlvbkNhY2hlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fYXBw
bGljYXRpb25DYWNoZUFnZW50LT5nZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoJmVycm9yLCBp
bl9mcmFtZUlkLCBvdXRfYXBwbGljYXRpb25DYWNoZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJhcHBsaWNhdGlvbkNhY2hlIiwgb3V0X2FwcGxpY2F0aW9uQ2FjaGUpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkFwcGxpY2F0aW9u
Q2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpGaWxlU3lzdGVtX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZmlsZVN5c3RlbUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJGaWxlU3lzdGVtIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2ZpbGVTeXN0ZW1BZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJGaWxlU3lzdGVt
LmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpGaWxlU3lzdGVtX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1BZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPmRpc2FibGUoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkZp
bGVTeXN0ZW0uZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9CgojZW5kaWYgLy8g
RU5BQkxFKEZJTEVfU1lTVEVNKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9N
X2dldERvY3VtZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvdXRfcm9vdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9kb21BZ2VudC0+Z2V0RG9jdW1lbnQoJmVycm9yLCBvdXRfcm9vdCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJyb290Iiwgb3V0X3Jvb3QpOwogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5nZXREb2N1bWVudCIpLCBwcm90b2Nv
bEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01f
cmVxdWVzdENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnJlcXVlc3RDaGlsZE5vZGVz
KCZlcnJvciwgaW5fbm9kZUlkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRPTS5yZXF1ZXN0Q2hpbGROb2RlcyIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlTZWxl
Y3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50
IG91dF9ub2RlSWQgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
U3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNlbGVj
dG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnF1ZXJ5U2VsZWN0b3IoJmVycm9yLCBpbl9ub2Rl
SWQsIGluX3NlbGVjdG9yLCAmb3V0X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0
TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucXVlcnlTZWxlY3RvciIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlT
ZWxlY3RvckFsbChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbm9kZUlkcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl9zZWxlY3RvciA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzZWxlY3RvciIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RvbUFnZW50LT5xdWVyeVNlbGVjdG9yQWxsKCZlcnJvciwgaW5fbm9kZUlkLCBp
bl9zZWxlY3Rvciwgb3V0X25vZGVJZHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5
KCJub2RlSWRzIiwgb3V0X25vZGVJZHMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5xdWVyeVNlbGVjdG9yQWxsIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXROb2Rl
TmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50
IG91dF9ub2RlSWQgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
U3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibmFtZSIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RvbUFnZW50LT5zZXROb2RlTmFtZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFt
ZSwgJm91dF9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigibm9kZUlk
Iiwgb3V0X25vZGVJZCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiRE9NLnNldE5vZGVOYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXROb2RlVmFsdWUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldE5vZGVWYWx1ZSgmZXJy
b3IsIGluX25vZGVJZCwgaW5fdmFsdWUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNldE5vZGVWYWx1ZSIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcmVtb3ZlTm9k
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9kb21BZ2VudC0+cmVtb3ZlTm9kZSgmZXJyb3IsIGluX25vZGVJZCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVt
b3ZlTm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpET01fc2V0QXR0cmlidXRlVmFsdWUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgU3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibmFt
ZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl92YWx1ZSA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJ2YWx1ZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5zZXRB
dHRyaWJ1dGVWYWx1ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFtZSwgaW5fdmFsdWUpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNldEF0
dHJpYnV0ZVZhbHVlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXRBdHRyaWJ1dGVzQXNUZXh0KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9N
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9k
ZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIFN0cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG5hbWVfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAibmFtZSIsICZuYW1lX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5zZXRBdHRy
aWJ1dGVzQXNUZXh0KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90ZXh0LCBuYW1lX3ZhbHVlRm91bmQg
PyAmaW5fbmFtZSA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRE9NLnNldEF0dHJpYnV0ZXNBc1RleHQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3JlbW92ZUF0dHJp
YnV0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2Rl
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFtZSA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnJlbW92
ZUF0dHJpYnV0ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFtZSk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVtb3ZlQXR0cmlidXRlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkRPTV9nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rv
bUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2xpc3Rl
bmVycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5f
bm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2RvbUFnZW50LT5nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIG91
dF9saXN0ZW5lcnMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAm
JiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJsaXN0ZW5lcnMi
LCBvdXRfbGlzdGVuZXJzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJET00uZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9nZXRPdXRl
ckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0
cmluZyBvdXRfb3V0ZXJIVE1MID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9
IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2Vu
dC0+Z2V0T3V0ZXJIVE1MKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X291dGVySFRNTCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvdXRlckhUTUwiLCBvdXRfb3V0ZXJIVE1MKTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0
T3V0ZXJIVE1MIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkRPTV9zZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rv
bUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJ
bnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgU3RyaW5nIGluX291dGVySFRNTCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJv
dXRlckhUTUwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+c2V0T3V0ZXJIVE1MKCZlcnJvciwgaW5f
bm9kZUlkLCBpbl9vdXRlckhUTUwpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNldE91dGVySFRNTCIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcGVyZm9ybVNlYXJj
aChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5n
IG91dF9zZWFyY2hJZCA9ICIiOwogICAgaW50IG91dF9yZXN1bHRDb3VudCA9IDA7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX3F1ZXJ5ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
InF1ZXJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnBlcmZvcm1TZWFyY2goJmVycm9yLCBpbl9x
dWVyeSwgJm91dF9zZWFyY2hJZCwgJm91dF9yZXN1bHRDb3VudCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzZWFyY2hJZCIsIG91dF9zZWFyY2hJZCk7CiAgICAgICAgcmVzdWx0
LT5zZXROdW1iZXIoInJlc3VsdENvdW50Iiwgb3V0X3Jlc3VsdENvdW50KTsKICAgIH0KICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucGVyZm9ybVNlYXJjaCIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpET01fZ2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbm9kZUlkcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VhcmNo
SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5fZnJvbUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgImZyb21JbmRleCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl90b0lu
ZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInRvSW5kZXgiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9k
b21BZ2VudC0+Z2V0U2VhcmNoUmVzdWx0cygmZXJyb3IsIGluX3NlYXJjaElkLCBpbl9mcm9tSW5k
ZXgsIGluX3RvSW5kZXgsIG91dF9ub2RlSWRzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRB
cnJheSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0U2VhcmNoUmVzdWx0cyIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fZGlz
Y2FyZFNlYXJjaFJlc3VsdHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zZWFyY2hJZCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJzZWFyY2hJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5kaXNjYXJk
U2VhcmNoUmVzdWx0cygmZXJyb3IsIGluX3NlYXJjaElkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5kaXNjYXJkU2VhcmNoUmVzdWx0cyIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpET01fcmVxdWVzdE5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIGludCBvdXRfbm9kZUlkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kb21BZ2VudC0+cmVxdWVzdE5vZGUoJmVycm9yLCBpbl9vYmplY3RJZCwgJm91
dF9ub2RlSWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0
X25vZGVJZCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRE9NLnJlcXVlc3ROb2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXRJbnNwZWN0TW9kZUVuYWJsZWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJv
b2wgaW5fZW5hYmxlZCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZW5hYmxlZCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaGlnaGxpZ2h0Q29uZmlnX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2hpZ2hsaWdodENvbmZp
ZyA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJoaWdobGlnaHRDb25maWciLCAmaGln
aGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5zZXRJbnNwZWN0TW9k
ZUVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkLCBoaWdobGlnaHRDb25maWdfdmFsdWVGb3VuZCA/
ICZpbl9oaWdobGlnaHRDb25maWcgOiAwKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9N
X2hpZ2hsaWdodFJlY3QobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIGludCBpbl94ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
IngiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5feSA9IGdldEludChwYXJhbXND
b250YWluZXJQdHIsICJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3dpZHRo
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndpZHRoIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgaW50IGluX2hlaWdodCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJoZWln
aHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbG9yX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2NvbG9yID0gZ2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lclB0ciwgImNvbG9yIiwgJmNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgb3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX291dGxpbmVDb2xvciA9IGdldE9iamVjdChwYXJhbXND
b250YWluZXJQdHIsICJvdXRsaW5lQ29sb3IiLCAmb3V0bGluZUNvbG9yX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RvbUFnZW50LT5oaWdobGlnaHRSZWN0KCZlcnJvciwgaW5feCwgaW5feSwgaW5fd2lk
dGgsIGluX2hlaWdodCwgY29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb2xvciA6IDAsIG91dGxpbmVD
b2xvcl92YWx1ZUZvdW5kID8gJmluX291dGxpbmVDb2xvciA6IDApOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmhpZ2hsaWdodFJlY3QiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RE9NX2hpZ2hsaWdodE5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaW5faGlnaGxpZ2h0Q29uZmlnID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRh
aW5lclB0ciwgImhpZ2hsaWdodENvbmZpZyIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5oaWdobGln
aHROb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBpbl9oaWdobGlnaHRDb25maWcpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmhpZ2hsaWdodE5v
ZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6RE9NX2hpZGVIaWdobGlnaHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCop
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fZG9tQWdlbnQtPmhpZGVIaWdobGlnaHQoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5oaWRlSGlnaGxpZ2h0IiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRPTV9oaWdobGlnaHRGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgY29udGVudENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGluX2NvbnRlbnRDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJj
b250ZW50Q29sb3IiLCAmY29udGVudENvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgY29udGVudE91dGxpbmVDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb250ZW50T3V0bGluZUNvbG9yID0gZ2V0T2JqZWN0
KHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbnRlbnRPdXRsaW5lQ29sb3IiLCAmY29udGVudE91dGxp
bmVDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0RnJhbWUoJmVy
cm9yLCBpbl9mcmFtZUlkLCBjb250ZW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb250ZW50Q29s
b3IgOiAwLCBjb250ZW50T3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29udGVudE91dGxp
bmVDb2xvciA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiRE9NLmhpZ2hsaWdodEZyYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9wdXNoTm9kZUJ5UGF0aFRvRnJv
bnRlbmQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGlu
dCBvdXRfbm9kZUlkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcGF0aCA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJwYXRoIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnB1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCgmZXJyb3IsIGluX3BhdGgsICZvdXRfbm9kZUlkKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9ub2RlSWQpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5wdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3Jlc29sdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
dXRfb2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBp
bnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgIm9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFn
ZW50LT5yZXNvbHZlTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3Vu
ZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIG91dF9vYmplY3QpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgib2JqZWN0Iiwgb3V0X29iamVjdCk7CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnJlc29sdmVOb2RlIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9n
ZXRBdHRyaWJ1dGVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9hdHRyaWJ1dGVzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFy
YW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmdldEF0dHJp
YnV0ZXMoJmVycm9yLCBpbl9ub2RlSWQsIG91dF9hdHRyaWJ1dGVzKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIG91dF9hdHRyaWJ1dGVzKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0QXR0cmlidXRl
cyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpET01fbW92ZVRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25v
ZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBpbnQgaW5fdGFyZ2V0Tm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgInRhcmdldE5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5z
ZXJ0QmVmb3JlTm9kZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9pbnNlcnRCZWZv
cmVOb2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiaW5zZXJ0QmVmb3JlTm9kZUlk
IiwgJmluc2VydEJlZm9yZU5vZGVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+bW92
ZVRvKCZlcnJvciwgaW5fbm9kZUlkLCBpbl90YXJnZXROb2RlSWQsIGluc2VydEJlZm9yZU5vZGVJ
ZF92YWx1ZUZvdW5kID8gJmluX2luc2VydEJlZm9yZU5vZGVJZCA6IDAsICZvdXRfbm9kZUlkKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9ub2RlSWQpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5tb3Zl
VG8iKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q1NTX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9j
c3NBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19kaXNhYmxlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5kaXNhYmxlKCZlcnJvcik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZGlz
YWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDU1NfZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0
X21hdGNoZWRDU1NSdWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X3BzZXVkb0VsZW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfaW5oZXJpdGVkID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
Ym9vbCBmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gaW5fZm9yY2VkUHNldWRvQ2xhc3NlcyA9IGdldEFycmF5KHBhcmFtc0Nv
bnRhaW5lclB0ciwgImZvcmNlZFBzZXVkb0NsYXNzZXMiLCAmZm9yY2VkUHNldWRvQ2xhc3Nlc192
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluY2x1ZGVQc2V1ZG9fdmFs
dWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pbmNsdWRlUHNldWRvID0gZ2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsICJpbmNsdWRlUHNldWRvIiwgJmluY2x1ZGVQc2V1ZG9fdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbmNsdWRlSW5oZXJpdGVkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZUluaGVyaXRlZCA9IGdldEJvb2xlYW4o
cGFyYW1zQ29udGFpbmVyUHRyLCAiaW5jbHVkZUluaGVyaXRlZCIsICZpbmNsdWRlSW5oZXJpdGVk
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSgm
ZXJyb3IsIGluX25vZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3Nlc192YWx1ZUZvdW5kID8gJmluX2Zv
cmNlZFBzZXVkb0NsYXNzZXMgOiAwLCBpbmNsdWRlUHNldWRvX3ZhbHVlRm91bmQgPyAmaW5faW5j
bHVkZVBzZXVkbyA6IDAsIGluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCA/ICZpbl9pbmNsdWRl
SW5oZXJpdGVkIDogMCwgb3V0X21hdGNoZWRDU1NSdWxlcywgb3V0X3BzZXVkb0VsZW1lbnRzLCBv
dXRfaW5oZXJpdGVkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkg
JiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwg
aGVyZS4KICAgICAgICByZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBvdXRfbWF0
Y2hlZENTU1J1bGVzKTsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgog
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInBzZXVkb0VsZW1lbnRzIiwgb3V0X3BzZXVkb0VsZW1l
bnRzKTsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgogICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImluaGVyaXRlZCIsIG91dF9pbmhlcml0ZWQpOwogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRNYXRjaGVkU3R5bGVz
Rm9yTm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpDU1NfZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
b3V0X2lubGluZVN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X3N0eWxlQXR0cmlidXRlcyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRJbmxpbmVTdHlsZXNG
b3JOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBvdXRfaW5saW5lU3R5bGUsIG91dF9zdHlsZUF0dHJp
YnV0ZXMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgog
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIG91dF9pbmxpbmVTdHlsZSk7
CiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS4KICAgICAgICByZXN1bHQt
PnNldEFycmF5KCJzdHlsZUF0dHJpYnV0ZXMiLCBvdXRfc3R5bGVBdHRyaWJ1dGVzKTsKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuZ2V0SW5saW5l
U3R5bGVzRm9yTm9kZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gb3V0X2NvbXB1dGVkU3R5bGUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJu
b2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGZvcmNlZFBzZXVkb0NsYXNz
ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbl9mb3Jj
ZWRQc2V1ZG9DbGFzc2VzID0gZ2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCAiZm9yY2VkUHNl
dWRvQ2xhc3NlcyIsICZmb3JjZWRQc2V1ZG9DbGFzc2VzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nz
c0FnZW50LT5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgZm9yY2Vk
UHNldWRvQ2xhc3Nlc192YWx1ZUZvdW5kID8gJmluX2ZvcmNlZFBzZXVkb0NsYXNzZXMgOiAwLCBv
dXRfY29tcHV0ZWRTdHlsZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbXB1
dGVkU3R5bGUiLCBvdXRfY29tcHV0ZWRTdHlsZSk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmdldENvbXB1dGVkU3R5bGVGb3JOb2RlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNTU19nZXRBbGxTdHlsZVNoZWV0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBvdXRfaGVhZGVycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRBbGxTdHlsZVNoZWV0cygmZXJyb3IsIG91dF9oZWFk
ZXJzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiaGVhZGVycyIsIG91dF9oZWFk
ZXJzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJD
U1MuZ2V0QWxsU3R5bGVTaGVldHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldFN0eWxlU2hlZXQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJD
U1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG91dF9zdHlsZVNoZWV0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgInN0eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRTdHlsZVNoZWV0
KCZlcnJvciwgaW5fc3R5bGVTaGVldElkLCBvdXRfc3R5bGVTaGVldCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZVNoZWV0Iiwgb3V0X3N0eWxlU2hlZXQpOwogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdHlsZVNo
ZWV0IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNTU19nZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3Nz
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF90ZXh0ID0gIiI7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwogICAgU3RyaW5nIGluX3N0eWxlU2hlZXRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJzdHlsZVNoZWV0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0U3R5bGVTaGVldFRl
eHQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsICZvdXRfdGV4dCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgb3V0X3RleHQpOwogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdHlsZVNoZWV0VGV4dCIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
U1Nfc2V0U3R5bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zdHlsZVNoZWV0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVTaGVldElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
dGV4dCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5zZXRTdHlsZVNoZWV0VGV4dCgmZXJyb3IsIGlu
X3N0eWxlU2hlZXRJZCwgaW5fdGV4dCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJDU1Muc2V0U3R5bGVTaGVldFRleHQiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3NldFBy
b3BlcnR5VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdHls
ZUlkID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5fcHJvcGVydHlJbmRleCA9IGdldEludChwYXJhbXNDb250
YWluZXJQdHIsICJwcm9wZXJ0eUluZGV4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3Ry
aW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidGV4dCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5fb3ZlcndyaXRlID0gZ2V0Qm9vbGVhbihwYXJh
bXNDb250YWluZXJQdHIsICJvdmVyd3JpdGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c2V0UHJv
cGVydHlUZXh0KCZlcnJvciwgaW5fc3R5bGVJZCwgaW5fcHJvcGVydHlJbmRleCwgaW5fdGV4dCwg
aW5fb3ZlcndyaXRlLCBvdXRfc3R5bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVj
dCgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkNTUy5zZXRQcm9wZXJ0eVRleHQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3RvZ2dsZVByb3Bl
cnR5KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxlSWQgPSBn
ZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl9wcm9wZXJ0eUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgInByb3BlcnR5SW5kZXgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluX2Rp
c2FibGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImRpc2FibGUiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9jc3NBZ2VudC0+dG9nZ2xlUHJvcGVydHkoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9w
ZXJ0eUluZGV4LCBpbl9kaXNhYmxlLCBvdXRfc3R5bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQt
PnNldE9iamVjdCgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy50b2dnbGVQcm9wZXJ0eSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1Nfc2V0
UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcnVsZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fcnVs
ZUlkID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgInJ1bGVJZCIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9zZWxlY3RvciA9IGdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsICJzZWxlY3RvciIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5zZXRSdWxlU2VsZWN0
b3IoJmVycm9yLCBpbl9ydWxlSWQsIGluX3NlbGVjdG9yLCBvdXRfcnVsZSk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJydWxlIiwgb3V0X3J1bGUpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5zZXRSdWxlU2VsZWN0b3IiKSwg
cHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9ydWxlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fY29udGV4dE5vZGVJZCA9IGdldElu
dChwYXJhbXNDb250YWluZXJQdHIsICJjb250ZXh0Tm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPmFkZFJ1bGUoJmVycm9yLCBpbl9j
b250ZXh0Tm9kZUlkLCBpbl9zZWxlY3Rvciwgb3V0X3J1bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgicnVsZSIsIG91dF9ydWxlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1MuYWRkUnVsZSIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBvdXRfY3NzUHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCZlcnJvciwg
b3V0X2Nzc1Byb3BlcnRpZXMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQ
cm9wZXJ0aWVzIiwgb3V0X2Nzc1Byb3BlcnRpZXMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNTU19zdGFydFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fY3NzQWdlbnQtPnN0YXJ0U2VsZWN0b3JQcm9maWxlcigmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLnN0YXJ0U2Vs
ZWN0b3JQcm9maWxlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9wcm9maWxlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5zdG9wU2VsZWN0
b3JQcm9maWxlcigmZXJyb3IsIG91dF9wcm9maWxlKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInByb2ZpbGUiLCBvdXRfcHJvZmlsZSk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLnN0b3BTZWxlY3RvclByb2ZpbGVyIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OlRpbWVsaW5lX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90aW1lbGluZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGluZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBtYXhDYWxsU3RhY2tEZXB0aF92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fbWF4Q2FsbFN0YWNrRGVwdGggPSBnZXRJbnQocGFy
YW1zQ29udGFpbmVyUHRyLCAibWF4Q2FsbFN0YWNrRGVwdGgiLCAmbWF4Q2FsbFN0YWNrRGVwdGhf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RhcnQoJmVycm9yLCBtYXhDYWxs
U3RhY2tEZXB0aF92YWx1ZUZvdW5kID8gJmluX21heENhbGxTdGFja0RlcHRoIDogMCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJUaW1lbGluZS5z
dGFydCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpUaW1lbGluZV9zdG9wKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90aW1lbGluZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGluZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV90aW1lbGluZUFnZW50LT5zdG9wKCZlcnJvcik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJUaW1lbGluZS5zdG9wIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OlRpbWVsaW5lX3NldEluY2x1ZGVNZW1vcnlEZXRhaWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90
aW1lbGluZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGlu
ZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9l
bmFibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+c2V0SW5jbHVkZU1lbW9yeURldGFpbHMoJmVycm9yLCBpbl9l
bmFibGVkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIlRpbWVsaW5lLnNldEluY2x1ZGVNZW1vcnlEZXRhaWxzIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2Vy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhdXNlc1JlY29tcGlsYXRpb24oJmVycm9yLCAmb3V0
X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0
X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGVidWdnZXIuY2F1c2VzUmVjb21waWxhdGlvbiIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zdXBwb3J0c05h
dGl2ZUJyZWFrcG9pbnRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9v
bCBvdXRfcmVzdWx0ID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdXBwb3J0
c05hdGl2ZUJyZWFrcG9pbnRzKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnN1cHBvcnRzTmF0aXZl
QnJlYWtwb2ludHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2Vy
LmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5k
aXNhYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
Ym9vbCBpbl9hY3RpdmUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImFjdGl2ZSIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKCZlcnJvciwg
aW5fYWN0aXZlKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3NldEJy
ZWFrcG9pbnRCeVVybChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfYnJlYWtwb2ludElkID0gIiI7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IG91dF9sb2NhdGlvbnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgaW50IGluX2xpbmVOdW1iZXIgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAibGluZU51bWJlciIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdXJs
X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAidXJsIiwgJnVybF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIHVybFJlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl91cmxS
ZWdleCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmxSZWdleCIsICZ1cmxSZWdl
eF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbHVtbk51bWJlcl92
YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fY29sdW1uTnVtYmVyID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgImNvbHVtbk51bWJlciIsICZjb2x1bW5OdW1iZXJfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBjb25kaXRpb25fdmFsdWVGb3VuZCA9IGZhbHNl
OwogICAgU3RyaW5nIGluX2NvbmRpdGlvbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
ICJjb25kaXRpb24iLCAmY29uZGl0aW9uX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdl
bnQtPnNldEJyZWFrcG9pbnRCeVVybCgmZXJyb3IsIGluX2xpbmVOdW1iZXIsIHVybF92YWx1ZUZv
dW5kID8gJmluX3VybCA6IDAsIHVybFJlZ2V4X3ZhbHVlRm91bmQgPyAmaW5fdXJsUmVnZXggOiAw
LCBjb2x1bW5OdW1iZXJfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OdW1iZXIgOiAwLCBjb25kaXRp
b25fdmFsdWVGb3VuZCA/ICZpbl9jb25kaXRpb24gOiAwLCAmb3V0X2JyZWFrcG9pbnRJZCwgb3V0
X2xvY2F0aW9ucyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJicmVha3BvaW50
SWQiLCBvdXRfYnJlYWtwb2ludElkKTsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25h
bCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImxvY2F0aW9ucyIsIG91dF9sb2NhdGlv
bnMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRl
YnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50KGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
U3RyaW5nIG91dF9icmVha3BvaW50SWQgPSAiIjsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG91dF9hY3R1YWxMb2NhdGlvbiA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fbG9jYXRpb24gPSBnZXRPYmplY3Qo
cGFyYW1zQ29udGFpbmVyUHRyLCAibG9jYXRpb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBib29sIGNvbmRpdGlvbl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fY29uZGl0
aW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbmRpdGlvbiIsICZjb25kaXRp
b25fdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludCgmZXJy
b3IsIGluX2xvY2F0aW9uLCBjb25kaXRpb25fdmFsdWVGb3VuZCA/ICZpbl9jb25kaXRpb24gOiAw
LCAmb3V0X2JyZWFrcG9pbnRJZCwgb3V0X2FjdHVhbExvY2F0aW9uKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIG91dF9icmVha3BvaW50SWQpOwogICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJhY3R1YWxMb2NhdGlvbiIsIG91dF9hY3R1YWxMb2NhdGlv
bik7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVi
dWdnZXIuc2V0QnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX2JyZWFrcG9pbnRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJicmVha3BvaW50SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5yZW1vdmVC
cmVha3BvaW50KCZlcnJvciwgaW5fYnJlYWtwb2ludElkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6RGVidWdnZXJfY29udGludWVUb0xvY2F0aW9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
ZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaW5fbG9jYXRpb24gPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRy
LCAibG9jYXRpb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jb250aW51ZVRvTG9jYXRp
b24oJmVycm9yLCBpbl9sb2NhdGlvbik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5jb250aW51ZVRvTG9jYXRpb24iKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVi
dWdnZXJfc3RlcE92ZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBPdmVyKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zdGVwT3ZlciIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpE
ZWJ1Z2dlcl9zdGVwSW50byhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fZGVidWdnZXJBZ2VudC0+c3RlcEludG8oJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnN0ZXBJbnRvIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRlYnVnZ2VyX3N0ZXBPdXQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBPdXQoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnN0ZXBPdXQiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RGVidWdnZXJfcGF1c2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5wYXVzZSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dl
cl9yZXN1bWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPnJlc3VtZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIucmVzdW1lIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3Nl
YXJjaEluQ29udGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X3Jlc3VsdCA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2NyaXB0SWQg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0SWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAicXVlcnkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRp
dmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9v
bGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdleCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFp
bmVyUHRyLCAiaXNSZWdleCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnNlYXJjaEluQ29udGVudCgmZXJyb3IsIGluX3NjcmlwdElkLCBpbl9xdWVyeSwgY2Fz
ZVNlbnNpdGl2ZV92YWx1ZUZvdW5kID8gJmluX2Nhc2VTZW5zaXRpdmUgOiAwLCBpc1JlZ2V4X3Zh
bHVlRm91bmQgPyAmaW5faXNSZWdleCA6IDAsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZWFyY2hJbkNvbnRlbnQi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6RGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgYm9vbCBvdXRfcmVzdWx0ID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5jYW5TZXRTY3JpcHRTb3VyY2UoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuY2Fu
U2V0U2NyaXB0U291cmNlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3NldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X2NhbGxGcmFtZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2NyaXB0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBTdHJpbmcgaW5fc2NyaXB0U291cmNlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInNjcmlwdFNvdXJjZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcHJldmll
d192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3ByZXZpZXcgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgInByZXZpZXciLCAmcHJldmlld192YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRTY3JpcHRTb3VyY2UoJmVycm9yLCBpbl9zY3JpcHRJZCwgaW5f
c2NyaXB0U291cmNlLCBwcmV2aWV3X3ZhbHVlRm91bmQgPyAmaW5fcHJldmlldyA6IDAsIG91dF9j
YWxsRnJhbWVzLCBvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQg
b3B0aW9uYWwgaGVyZS4KICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjYWxsRnJhbWVzIiwgb3V0
X2NhbGxGcmFtZXMpOwogICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuCiAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnNldFNjcmlw
dFNvdXJjZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9nZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRl
YnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X3Njcmlw
dFNvdXJjZSA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzY3JpcHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPmdldFNjcmlwdFNvdXJjZSgmZXJyb3IsIGluX3NjcmlwdElkLCAmb3V0X3NjcmlwdFNv
dXJjZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBv
dXRfc2NyaXB0U291cmNlKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZ2V0RnVu
Y3Rpb25Mb2NhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9sb2NhdGlvbiA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2Z1bmN0
aW9uSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnVuY3Rpb25JZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RlYnVnZ2VyQWdlbnQtPmdldEZ1bmN0aW9uTG9jYXRpb24oJmVycm9yLCBpbl9mdW5j
dGlvbklkLCBvdXRfbG9jYXRpb24pOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgi
bG9jYXRpb24iLCBvdXRfbG9jYXRpb24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmdldEZ1bmN0aW9uTG9jYXRpb24iKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVi
dWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2Vy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc3RhdGUg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic3RhdGUiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zZXRQYXVzZU9uRXhjZXB0aW9ucygmZXJyb3IsIGluX3N0YXRlKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLnNl
dFBhdXNlT25FeGNlcHRpb25zIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2V2YWx1YXRlT25DYWxsRnJhbWUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGJvb2wgb3V0X3dhc1Rocm93biA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0
cmluZyBpbl9jYWxsRnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJjYWxs
RnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9leHByZXNzaW9u
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV4cHJlc3Npb24iLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBib29sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJv
YmplY3RHcm91cCIsICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBi
b29sIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVy
UHRyLCAiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwgJmluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJh
bXNDb250YWluZXJQdHIsICJyZXR1cm5CeVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+ZXZhbHVhdGVPbkNhbGxGcmFtZSgmZXJyb3IsIGlu
X2NhbGxGcmFtZUlkLCBpbl9leHByZXNzaW9uLCBvYmplY3RHcm91cF92YWx1ZUZvdW5kID8gJmlu
X29iamVjdEdyb3VwIDogMCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPyAmaW5f
aW5jbHVkZUNvbW1hbmRMaW5lQVBJIDogMCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8gJmlu
X3JldHVybkJ5VmFsdWUgOiAwLCBvdXRfcmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICBp
ZiAob3V0X3dhc1Rocm93bikKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJ3YXNUaHJv
d24iLCBvdXRfd2FzVGhyb3duKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5ldmFsdWF0ZU9uQ2FsbEZyYW1lIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkRPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBp
bnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5zZXRET01C
cmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnNldERPTUJyZWFr
cG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJfcmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlk
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3R5cGUgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCAidHlwZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQt
PnJlbW92ZURPTUJyZWFrcG9pbnQoJmVycm9yLCBpbl9ub2RlSWQsIGluX3R5cGUpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NRGVidWdnZXIu
cmVtb3ZlRE9NQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJl
YWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9ldmVudE5hbWUgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXZlbnROYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tRGVidWdn
ZXJBZ2VudC0+c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9N
RGVidWdnZXIuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJfcmVt
b3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbURlYnVn
Z2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTURlYnVnZ2Vy
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5f
ZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV2ZW50TmFtZSIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50
KCZlcnJvciwgaW5fZXZlbnROYW1lKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkRPTURlYnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnNldFhIUkJyZWFrcG9pbnQoJmVycm9yLCBpbl91
cmwpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RE9NRGVidWdnZXIuc2V0WEhSQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01EZWJ1Z2dlcl9yZW1vdmVYSFJC
cmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5y
ZW1vdmVYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnJlbW92ZVhIUkJyZWFr
cG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbihs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmls
ZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZh
bHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+Y2F1c2VzUmVjb21waWxhdGlvbigmZXJy
b3IsICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1
bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJQcm9maWxlci5jYXVzZXNSZWNvbXBpbGF0aW9uIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2lz
U2FtcGxpbmcobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9y
ZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmlzU2FtcGxpbmcoJmVy
cm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVz
dWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUHJvZmlsZXIuaXNTYW1wbGluZyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9oYXNIZWFwUHJv
ZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1
bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmhhc0hlYXBQcm9maWxlcigm
ZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJy
ZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJQcm9maWxlci5oYXNIZWFwUHJvZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfZW5h
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQ
cm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9kaXNhYmxl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9m
aWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFn
ZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5kaXNhYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3N0YXJ0KGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
cm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50
LT5zdGFydCgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUHJvZmlsZXIuc3RhcnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfc3RvcChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcCgm
ZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiUHJvZmlsZXIuc3RvcCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVycyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmls
ZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0
X2hlYWRlcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5nZXRQcm9maWxlSGVhZGVycygmZXJyb3IsIG91dF9oZWFkZXJzKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVzdWx0LT5zZXRBcnJheSgiaGVhZGVycyIsIG91dF9oZWFkZXJzKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5nZXRQcm9m
aWxlSGVhZGVycyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9nZXRQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9m
aWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb3V0X3Byb2ZpbGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5
cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldFByb2Zp
bGUoJmVycm9yLCBpbl90eXBlLCBpbl91aWQsIG91dF9wcm9maWxlKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInByb2ZpbGUiLCBvdXRfcHJvZmlsZSk7CiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuZ2V0UHJvZmlsZSIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpQcm9maWxlcl9yZW1vdmVQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxl
ckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3R5cGUg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHlwZSIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl91aWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAidWlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVtb3ZlUHJvZmlsZSgmZXJyb3IsIGluX3R5cGUs
IGluX3VpZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJQcm9maWxlci5yZW1vdmVQcm9maWxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXMo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2Zp
bGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdl
bnQtPmNsZWFyUHJvZmlsZXMoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmNsZWFyUHJvZmlsZXMiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmls
ZXJfdGFrZUhlYXBTbmFwc2hvdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+dGFrZUhlYXBTbmFwc2hvdCgmZXJyb3IpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIudGFr
ZUhlYXBTbmFwc2hvdCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9jb2xsZWN0R2FyYmFnZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+Y29sbGVjdEdh
cmJhZ2UoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIlByb2ZpbGVyLmNvbGxlY3RHYXJiYWdlIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2dldE9iamVj
dEJ5SGVhcE9iamVjdElkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Jlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX29iamVjdElk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdElkIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJv
ZmlsZXJBZ2VudC0+Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoJmVycm9yLCBpbl9vYmplY3RJZCwg
b3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyZXN1bHQiLCBv
dXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJQcm9maWxlci5nZXRPYmplY3RCeUhlYXBPYmplY3RJZCIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5B
QkxFKFdPUktFUlMpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpXb3JrZXJfc2V0
V29ya2VySW5zcGVjdGlvbkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3dvcmtlckFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJXb3JrZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUgPSBnZXRCb29s
ZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQt
PnNldFdvcmtlckluc3BlY3Rpb25FbmFibGVkKCZlcnJvciwgaW5fdmFsdWUpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLnNldFdvcmtl
ckluc3BlY3Rpb25FbmFibGVkIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtlcl9zZW5kTWVzc2FnZVRvV29ya2VyKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV93b3JrZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiV29ya2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBpbnQgaW5fd29ya2VySWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAid29ya2Vy
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bl9tZXNzYWdlID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgIm1lc3NhZ2UiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV93b3JrZXJBZ2VudC0+c2VuZE1lc3NhZ2VUb1dvcmtlcigmZXJyb3IsIGluX3dvcmtl
cklkLCBpbl9tZXNzYWdlKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIldvcmtlci5zZW5kTWVzc2FnZVRvV29ya2VyIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtlcl9jb25u
ZWN0VG9Xb3JrZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3dvcmtlckFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJXb3JrZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl93b3JrZXJJZCA9IGdldEludChwYXJhbXNDb250
YWluZXJQdHIsICJ3b3JrZXJJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3dvcmtlckFnZW50LT5jb25uZWN0VG9X
b3JrZXIoJmVycm9yLCBpbl93b3JrZXJJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJXb3JrZXIuY29ubmVjdFRvV29ya2VyIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtl
cl9kaXNjb25uZWN0RnJvbVdvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgIndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fd29ya2VyQWdlbnQt
PmRpc2Nvbm5lY3RGcm9tV29ya2VyKCZlcnJvciwgaW5fd29ya2VySWQpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiV29ya2VyLmRpc2Nvbm5lY3RG
cm9tV29ya2VyIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6Oldvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
Ym9vbCBpbl92YWx1ZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV93b3JrZXJBZ2VudC0+c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoJmVycm9yLCBp
bl92YWx1ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJXb3JrZXIuc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QgPSB0aGlzOwogICAgdHlwZWRlZiB2
b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwo
RGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgQ2FsbEhhbmRsZXIgaGFu
ZGxlcnNbXSA9IHsKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oklu
c3BlY3Rvcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
Ok1lbW9yeV9nZXRET01Ob2RlQ291bnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6UGFnZV9lbmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6UGFnZV9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OlBhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX3JlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9yZWxvYWQsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9uYXZpZ2F0ZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX2dldENvb2tpZXMsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9kZWxldGVDb29raWUsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9nZXRSZXNvdXJjZVRy
ZWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9nZXRSZXNv
dXJjZUNvbnRlbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFn
ZV9zZWFyY2hJblJlc291cmNlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OlBhZ2Vfc2VhcmNoSW5SZXNvdXJjZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6UGFnZV9zZXREb2N1bWVudENvbnRlbnQsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9zZXRTY3JlZW5TaXplT3ZlcnJpZGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9ldmFsdWF0ZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpSdW50aW1lX2NhbGxGdW5jdGlvbk9u
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfZ2V0UHJv
cGVydGllcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpSdW50aW1l
X3JlbGVhc2VPYmplY3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
UnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXAsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6UnVudGltZV9ydW4sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q29uc29sZV9lbmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q29uc29sZV9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNvbnNvbGVfY2xlYXJNZXNzYWdlcywKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX3NldE1vbml0b3JpbmdYSFJFbmFibGVkLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9k
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2VuYWJs
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2Rpc2Fi
bGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19zZXRV
c2VyQWdlbnRPdmVycmlkZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19nZXRSZXNwb25zZUJvZHksCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDYWNoZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX2NsZWFyQnJvd3Nl
ckNhY2hlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtf
Y2FuQ2xlYXJCcm93c2VyQ29va2llcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpOZXR3b3JrX2NsZWFyQnJvd3NlckNvb2tpZXMsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19zZXRDYWNoZURpc2FibGVkLAojaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRhdGFiYXNlX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVzLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlX2V4ZWN1dGVTUUwsCiNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVkREJfZW5hYmxlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQl9kaXNhYmxlLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQl9yZXF1ZXN0RGF0YWJh
c2VOYW1lc0ZvckZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2UsCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFn
ZV9lbmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3Rv
cmFnZV9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRP
TVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUVudHJpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9zZXRET01TdG9yYWdlSXRlbSwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01TdG9yYWdlX3JlbW92ZURPTVN0b3JhZ2VJ
dGVtLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkFwcGxpY2F0aW9u
Q2FjaGVfZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpBcHBsaWNhdGlvbkNhY2hlX2VuYWJsZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpBcHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJh
bWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QXBwbGljYXRpb25D
YWNoZV9nZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUsCiNpZiBFTkFCTEUoRklMRV9TWVNURU0p
CgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkZpbGVTeXN0ZW1fZW5h
YmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkZpbGVTeXN0ZW1f
ZGlzYWJsZSwKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldERvY3VtZW50LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9yZXF1ZXN0Q2hpbGROb2RlcywKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlTZWxlY3RvciwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlTZWxlY3RvckFsbCwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0Tm9kZU5hbWUs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldE5vZGVWYWx1
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcmVtb3ZlTm9k
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0QXR0cmli
dXRlVmFsdWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3Nl
dEF0dHJpYnV0ZXNBc1RleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RE9NX3JlbW92ZUF0dHJpYnV0ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpET01fZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9nZXRPdXRlckhUTUwsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldE91dGVySFRNTCwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcGVyZm9ybVNlYXJjaCwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fZ2V0U2VhcmNoUmVzdWx0cywKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fZGlzY2FyZFNlYXJjaFJlc3Vs
dHMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3JlcXVlc3RO
b2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXRJbnNw
ZWN0TW9kZUVuYWJsZWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RE9NX2hpZ2hsaWdodFJlY3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RE9NX2hpZ2hsaWdodE5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6RE9NX2hpZGVIaWdobGlnaHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6RE9NX2hpZ2hsaWdodEZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkRPTV9wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3Jlc29sdmVOb2RlLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9nZXRBdHRyaWJ1dGVzLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9tb3ZlVG8sCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2VuYWJsZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldElubGluZVN0eWxlc0Zvck5v
ZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldENvbXB1
dGVkU3R5bGVGb3JOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNTU19nZXRBbGxTdHlsZVNoZWV0cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpDU1NfZ2V0U3R5bGVTaGVldCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDU1NfZ2V0U3R5bGVTaGVldFRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3NldFN0eWxlU2hlZXRUZXh0LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19zZXRQcm9wZXJ0eVRleHQsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3RvZ2dsZVByb3BlcnR5LAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19zZXRSdWxlU2VsZWN0b3IsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2FkZFJ1bGUsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3N0
YXJ0U2VsZWN0b3JQcm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6VGltZWxpbmVfc3RhcnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6VGltZWxpbmVfc3RvcCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpUaW1lbGluZV9zZXRJbmNsdWRlTWVtb3J5RGV0YWlscywKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpEZWJ1Z2dlcl9jYXVzZXNSZWNvbXBpbGF0aW9uLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3N1cHBvcnRzTmF0aXZlQnJlYWtwb2ludHMs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZW5hYmxl
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2Rpc2Fi
bGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0
QnJlYWtwb2ludHNBY3RpdmUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJsLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfcmVtb3ZlQnJlYWtwb2ludCwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9jb250aW51ZVRvTG9j
YXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJf
c3RlcE92ZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdn
ZXJfc3RlcEludG8sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVi
dWdnZXJfc3RlcE91dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpE
ZWJ1Z2dlcl9wYXVzZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpE
ZWJ1Z2dlcl9yZXN1bWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RGVidWdnZXJfc2VhcmNoSW5Db250ZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkRlYnVnZ2VyX2NhblNldFNjcmlwdFNvdXJjZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRTY3JpcHRTb3VyY2UsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZ2V0U2NyaXB0U291cmNl
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2dldEZ1
bmN0aW9uTG9jYXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZSwKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01EZWJ1Z2dlcl9z
ZXRET01CcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJfcmVt
b3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludCwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50
LAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OlByb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfaXNTYW1wbGluZywKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfZW5hYmxlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2Rpc2FibGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfc3RhcnQsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfc3RvcCwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVy
cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9nZXRQ
cm9maWxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVy
X3JlbW92ZVByb2ZpbGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
UHJvZmlsZXJfY2xlYXJQcm9maWxlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90LAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2dldE9iamVjdEJ5SGVhcE9iamVj
dElkLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKFdP
UktFUlMpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtlcl9z
ZXRXb3JrZXJJbnNwZWN0aW9uRW5hYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlciwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpXb3JrZXJfY29ubmVjdFRvV29ya2VyLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtlcl9kaXNjb25uZWN0RnJvbVdvcmtl
ciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpXb3JrZXJfc2V0QXV0
b2Nvbm5lY3RUb1dvcmtlcnMsCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCiAgICAgICAgfTsK
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29t
bWFuZE5hbWVzWzBdKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tp
XSk7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5z
cGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkTWVzc2FnZSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVz
dCBiZSBpbiBKU09OIGZvcm1hdCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3Qo
KTsKICAgIGlmICghbWVzc2FnZU9iamVjdCkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
MCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElk
VmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7CiAgICBpZiAoIWNhbGxJZFZhbHVlKSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJv
cGVydHkgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWNh
bGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUg
bnVtYmVyIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOwogICAgaWYgKCFt
ZXRob2RWYWx1ZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxp
ZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKICAgICAgICByZXR1
cm47CiAgICB9CgogICAgU3RyaW5nIG1ldGhvZDsKICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3Ry
aW5nKCZtZXRob2QpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZh
bGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5n
Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09
IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3Nh
Z2VPYmplY3QuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQp7CiAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKICAgICAg
ICByZXR1cm47CiAgICB9CiAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVy
cm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwogICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KSBjb25zdAp7CiAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgY29kZSwgZXJyb3JNZXNz
YWdlLCAwKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9j
b2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0
YSkgY29uc3QKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50PixzX2NvbW1vbkVy
cm9ycywpOwogICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKICAgICAgICBzX2NvbW1v
bkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAwKTsKICAgICAgICBzX2NvbW1vbkVycm9y
cy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7CiAgICAgICAgc19jb21tb25FcnJvcnMu
aW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwogICAgICAgIHNfY29tbW9uRXJyb3JzLmlu
c2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2Vy
dChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwogICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChT
ZXJ2ZXJFcnJvciwgLTMyMDAwKTsKICAgIH0KICAgIEFTU0VSVChjb2RlID49MCk7CiAgICBBU1NF
UlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9ycy5zaXplKCkpOwogICAgQVNTRVJUKHNf
Y29tbW9uRXJyb3JzW2NvZGVdKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBz
X2NvbW1vbkVycm9yc1tjb2RlXSk7CiAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJy
b3JNZXNzYWdlKTsKICAgIEFTU0VSVChlcnJvcik7CiAgICBpZiAoZGF0YSkKICAgICAgICBlcnJv
ci0+c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2FnZS0+c2V0T2JqZWN0
KCJlcnJvciIsIGVycm9yKTsKICAgIGlmIChjYWxsSWQpCiAgICAgICAgbWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsICpjYWxsSWQpOwogICAgZWxzZQogICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJp
ZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgppbnQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBpbnQgdmFsdWUgPSAwOwoKICAgIGlmICghb2Jq
ZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVpcmVk
IHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVz
dCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVyJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAg
fQoKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQo
KTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9i
amVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKICAgICAg
ICBpZiAoIXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5v
dCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAg
ICB9CgogICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVyKCZ2YWx1ZSkpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdOdW1iZXInLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZvdW5kKQogICAgICAgICAgICAq
dmFsdWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0KClN0cmluZyBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycykKewogICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKCiAgICBpZiAodmFsdWVGb3Vu
ZCkKICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwoKICAgIFN0cmluZyB2YWx1ZSA9ICIiOwoK
ICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAgICAgICAg
IC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCiAgICAg
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1z
JyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAn
U3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IHZhbHVlOwogICAgfQoKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
b2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBl
bmQpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0
cmluZycgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1
cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5n
KCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdTdHJpbmcnLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZvdW5kKQog
ICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0KCmJvb2wg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzKQp7CiAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwoKICAgIGlm
ICh2YWx1ZUZvdW5kKQogICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CgogICAgYm9vbCB2YWx1
ZSA9IGZhbHNlOwoKICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7
CiAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250
YWluZXIuCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMn
IHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVl
SXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQogICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycg
d2l0aCB0eXBlICdCb29sZWFuJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNl
Y29uZC0+YXNCb29sZWFuKCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0
IGJlICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgIGVsc2UKICAgICAgICBp
ZiAodmFsdWVGb3VuZCkKICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOwogICAgcmV0dXJu
IHZhbHVlOwp9CgpQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAg
ICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGlu
IG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVx
dWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwogICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5h
bWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAgICAgIGlmICghdmFsdWVG
b3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAo
IXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdy
b25nIHR5cGUuIEl0IG11c3QgYmUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICBlbHNlCiAgICAgICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2YWx1ZUZvdW5kID0g
dHJ1ZTsKICAgIHJldHVybiB2YWx1ZTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycykKewogICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKCiAgICBpZiAodmFs
dWVGb3VuZCkKICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFvYmpl
Y3QpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAgICAgICAgLy8gUmVxdWlyZWQg
cGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0
IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0K
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAg
aWYgKCF2YWx1ZUZvdW5kKQogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBm
b3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9
CgogICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQXJyYXkoJnZhbHVlKSkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKICAgIGVsc2UKICAgICAgICBpZiAodmFsdWVGb3VuZCkKICAgICAgICAgICAgKnZhbHVl
Rm91bmQgPSB0cnVlOwogICAgcmV0dXJuIHZhbHVlOwp9CmJvb2wgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiBy
ZXN1bHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1
ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwogICAgaWYgKCF2YWx1ZSkKICAgICAgICByZXR1cm4gZmFs
c2U7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0
KCk7CiAgICBpZiAoIW9iamVjdCkKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKCFvYmpl
Y3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKICAgICAgICByZXR1cm4gZmFsc2U7Cgog
ICAgcmV0dXJuIHRydWU7Cn0KCgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgojZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124043</attachid>
            <date>2012-01-25 17:19:51 -0800</date>
            <delta_ts>2012-01-25 17:19:51 -0800</delta_ts>
            <desc>original h</desc>
            <filename>InspectorBackendDispatcher.base.h</filename>
            <type>text/plain</type>
            <size>27137</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKI2Rl
ZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCgpuYW1lc3BhY2UgV2Vi
Q29yZSB7CgpjbGFzcyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpjbGFz
cyBJbnNwZWN0b3JBcnJheTsKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwoKY2xhc3Mg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OwpjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsK
Y2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwpjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCmNsYXNzIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCmNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCmNsYXNzIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgpjbGFz
cyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yTWVtb3J5QWdlbnQ7CmNsYXNzIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ7CmNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yUnVudGltZUFn
ZW50OwpjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwojaWYgRU5BQkxFKFdPUktFUlMpCgpj
bGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKCnR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwoKY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CnB1Ymxp
YzoKICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgICwgbV9hcHBsaWNhdGlv
bkNhY2hlQWdlbnQoMCkKICAgICAgICAsIG1fY3NzQWdlbnQoMCkKICAgICAgICAsIG1fY29uc29s
ZUFnZW50KDApCiAgICAgICAgLCBtX2RvbUFnZW50KDApCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICAgICAgLCBtX2RvbURlYnVnZ2VyQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAsIG1fZG9tU3RvcmFnZUFnZW50KDApCiNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgICAgICAsIG1fZGF0YWJhc2VBZ2VudCgwKQojZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAgICAgLCBtX2RlYnVnZ2VyQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAgLCBtX2ZpbGVT
eXN0ZW1BZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICAsIG1faW5kZXhlZERCQWdlbnQoMCkKI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICAsIG1faW5zcGVjdG9yQWdlbnQoMCkK
ICAgICAgICAsIG1fbWVtb3J5QWdlbnQoMCkKICAgICAgICAsIG1fbmV0d29ya0FnZW50KDApCiAg
ICAgICAgLCBtX3BhZ2VBZ2VudCgwKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgog
ICAgICAgICwgbV9wcm9maWxlckFnZW50KDApCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICAgICAgLCBtX3J1bnRpbWVBZ2VudCgwKQogICAgICAgICwgbV90aW1lbGlu
ZUFnZW50KDApCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICAgICAgLCBtX3dvcmtlckFnZW50KDAp
CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCiAgICB7IH0KCiAgICB2b2lkIHJlZ2lzdGVyQWdl
bnQoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQp
IHsgQVNTRVJUKCFtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7IG1fYXBwbGljYXRpb25DYWNoZUFn
ZW50ID0gYXBwbGljYXRpb25DYWNoZUFnZW50OyB9CiAgICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5z
cGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50KSB7IEFTU0VSVCghbV9jc3NBZ2VudCk7IG1fY3NzQWdl
bnQgPSBjc3NBZ2VudDsgfQogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvckNvbnNvbGVB
Z2VudCogY29uc29sZUFnZW50KSB7IEFTU0VSVCghbV9jb25zb2xlQWdlbnQpOyBtX2NvbnNvbGVB
Z2VudCA9IGNvbnNvbGVBZ2VudDsgfQogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCkgeyBBU1NFUlQoIW1fZG9tQWdlbnQpOyBtX2RvbUFnZW50ID0gZG9t
QWdlbnQ7IH0KI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgcmVnaXN0
ZXJBZ2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KiBkb21EZWJ1Z2dlckFnZW50KSB7IEFT
U0VSVCghbV9kb21EZWJ1Z2dlckFnZW50KTsgbV9kb21EZWJ1Z2dlckFnZW50ID0gZG9tRGVidWdn
ZXJBZ2VudDsgfQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdm9p
ZCByZWdpc3RlckFnZW50KEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50
KSB7IEFTU0VSVCghbV9kb21TdG9yYWdlQWdlbnQpOyBtX2RvbVN0b3JhZ2VBZ2VudCA9IGRvbVN0
b3JhZ2VBZ2VudDsgfQojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICB2b2lkIHJlZ2lzdGVy
QWdlbnQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGF0YWJhc2VBZ2VudCkgeyBBU1NFUlQoIW1f
ZGF0YWJhc2VBZ2VudCk7IG1fZGF0YWJhc2VBZ2VudCA9IGRhdGFiYXNlQWdlbnQ7IH0KI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CgogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2Vy
QWdlbnQpIHsgQVNTRVJUKCFtX2RlYnVnZ2VyQWdlbnQpOyBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1
Z2dlckFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCgogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudCogZmlsZVN5c3RlbUFnZW50KSB7IEFTU0VSVCghbV9maWxlU3lzdGVtQWdlbnQp
OyBtX2ZpbGVTeXN0ZW1BZ2VudCA9IGZpbGVTeXN0ZW1BZ2VudDsgfQojZW5kaWYgLy8gRU5BQkxF
KEZJTEVfU1lTVEVNKQoKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZvaWQgcmVn
aXN0ZXJBZ2VudChJbnNwZWN0b3JJbmRleGVkREJBZ2VudCogaW5kZXhlZERCQWdlbnQpIHsgQVNT
RVJUKCFtX2luZGV4ZWREQkFnZW50KTsgbV9pbmRleGVkREJBZ2VudCA9IGluZGV4ZWREQkFnZW50
OyB9CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2b2lkIHJlZ2lzdGVy
QWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KSB7IEFTU0VSVCghbV9pbnNwZWN0
b3JBZ2VudCk7IG1faW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudDsgfQogICAgdm9pZCBy
ZWdpc3RlckFnZW50KEluc3BlY3Rvck1lbW9yeUFnZW50KiBtZW1vcnlBZ2VudCkgeyBBU1NFUlQo
IW1fbWVtb3J5QWdlbnQpOyBtX21lbW9yeUFnZW50ID0gbWVtb3J5QWdlbnQ7IH0KICAgIHZvaWQg
cmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBuZXR3b3JrQWdlbnQpIHsgQVNT
RVJUKCFtX25ldHdvcmtBZ2VudCk7IG1fbmV0d29ya0FnZW50ID0gbmV0d29ya0FnZW50OyB9CiAg
ICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQpIHsgQVNT
RVJUKCFtX3BhZ2VBZ2VudCk7IG1fcGFnZUFnZW50ID0gcGFnZUFnZW50OyB9CiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCkgeyBBU1NFUlQoIW1fcHJvZmlsZXJBZ2VudCk7IG1f
cHJvZmlsZXJBZ2VudCA9IHByb2ZpbGVyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JSdW50aW1lQWdl
bnQqIHJ1bnRpbWVBZ2VudCkgeyBBU1NFUlQoIW1fcnVudGltZUFnZW50KTsgbV9ydW50aW1lQWdl
bnQgPSBydW50aW1lQWdlbnQ7IH0KICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50KSB7IEFTU0VSVCghbV90aW1lbGluZUFnZW50KTsgbV90
aW1lbGluZUFnZW50ID0gdGltZWxpbmVBZ2VudDsgfQojaWYgRU5BQkxFKFdPUktFUlMpCgogICAg
dm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50KiB3b3JrZXJBZ2VudCkgeyBB
U1NFUlQoIW1fd29ya2VyQWdlbnQpOyBtX3dvcmtlckFnZW50ID0gd29ya2VyQWdlbnQ7IH0KI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKCiAgICB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsgfQoKICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsK
ICAgICAgICBQYXJzZUVycm9yID0gMCwKICAgICAgICBJbnZhbGlkUmVxdWVzdCwKICAgICAgICBN
ZXRob2ROb3RGb3VuZCwKICAgICAgICBJbnZhbGlkUGFyYW1zLAogICAgICAgIEludGVybmFsRXJy
b3IsCiAgICAgICAgU2VydmVyRXJyb3IsCiAgICAgICAgTGFzdEVudHJ5LAogICAgfTsKCiAgICB2
b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25F
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKICAgIHZvaWQgcmVw
b3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGRhdGEpIGNvbnN0OwogICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwog
ICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJp
bmcqIHJlc3VsdCk7CgogICAgZW51bSBNZXRob2ROYW1lcyB7CiAgICAgICAga0luc3BlY3Rvcl9l
bmFibGVDbWQsCiAgICAgICAga0luc3BlY3Rvcl9kaXNhYmxlQ21kLAogICAgICAgIGtNZW1vcnlf
Z2V0RE9NTm9kZUNvdW50Q21kLAogICAgICAgIGtQYWdlX2VuYWJsZUNtZCwKICAgICAgICBrUGFn
ZV9kaXNhYmxlQ21kLAogICAgICAgIGtQYWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWRDbWQs
CiAgICAgICAga1BhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENtZCwKICAgICAgICBr
UGFnZV9yZWxvYWRDbWQsCiAgICAgICAga1BhZ2VfbmF2aWdhdGVDbWQsCiAgICAgICAga1BhZ2Vf
Z2V0Q29va2llc0NtZCwKICAgICAgICBrUGFnZV9kZWxldGVDb29raWVDbWQsCiAgICAgICAga1Bh
Z2VfZ2V0UmVzb3VyY2VUcmVlQ21kLAogICAgICAgIGtQYWdlX2dldFJlc291cmNlQ29udGVudENt
ZCwKICAgICAgICBrUGFnZV9zZWFyY2hJblJlc291cmNlQ21kLAogICAgICAgIGtQYWdlX3NlYXJj
aEluUmVzb3VyY2VzQ21kLAogICAgICAgIGtQYWdlX3NldERvY3VtZW50Q29udGVudENtZCwKICAg
ICAgICBrUGFnZV9zZXRTY3JlZW5TaXplT3ZlcnJpZGVDbWQsCiAgICAgICAga1J1bnRpbWVfZXZh
bHVhdGVDbWQsCiAgICAgICAga1J1bnRpbWVfY2FsbEZ1bmN0aW9uT25DbWQsCiAgICAgICAga1J1
bnRpbWVfZ2V0UHJvcGVydGllc0NtZCwKICAgICAgICBrUnVudGltZV9yZWxlYXNlT2JqZWN0Q21k
LAogICAgICAgIGtSdW50aW1lX3JlbGVhc2VPYmplY3RHcm91cENtZCwKICAgICAgICBrUnVudGlt
ZV9ydW5DbWQsCiAgICAgICAga0NvbnNvbGVfZW5hYmxlQ21kLAogICAgICAgIGtDb25zb2xlX2Rp
c2FibGVDbWQsCiAgICAgICAga0NvbnNvbGVfY2xlYXJNZXNzYWdlc0NtZCwKICAgICAgICBrQ29u
c29sZV9zZXRNb25pdG9yaW5nWEhSRW5hYmxlZENtZCwKICAgICAgICBrQ29uc29sZV9hZGRJbnNw
ZWN0ZWROb2RlQ21kLAogICAgICAgIGtOZXR3b3JrX2VuYWJsZUNtZCwKICAgICAgICBrTmV0d29y
a19kaXNhYmxlQ21kLAogICAgICAgIGtOZXR3b3JrX3NldFVzZXJBZ2VudE92ZXJyaWRlQ21kLAog
ICAgICAgIGtOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnNDbWQsCiAgICAgICAga05ldHdvcmtf
Z2V0UmVzcG9uc2VCb2R5Q21kLAogICAgICAgIGtOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hl
Q21kLAogICAgICAgIGtOZXR3b3JrX2NsZWFyQnJvd3NlckNhY2hlQ21kLAogICAgICAgIGtOZXR3
b3JrX2NhbkNsZWFyQnJvd3NlckNvb2tpZXNDbWQsCiAgICAgICAga05ldHdvcmtfY2xlYXJCcm93
c2VyQ29va2llc0NtZCwKICAgICAgICBrTmV0d29ya19zZXRDYWNoZURpc2FibGVkQ21kLAojaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICAgICAga0RhdGFiYXNlX2VuYWJsZUNtZCwKICAgICAg
ICBrRGF0YWJhc2VfZGlzYWJsZUNtZCwKICAgICAgICBrRGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJs
ZU5hbWVzQ21kLAogICAgICAgIGtEYXRhYmFzZV9leGVjdXRlU1FMQ21kLAojZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAg
a0luZGV4ZWREQl9lbmFibGVDbWQsCiAgICAgICAga0luZGV4ZWREQl9kaXNhYmxlQ21kLAogICAg
ICAgIGtJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZUNtZCwKICAgICAgICBr
SW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZUNtZCwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKICAgICAgICBrRE9NU3RvcmFnZV9lbmFibGVDbWQsCiAgICAgICAga0RPTVN0b3Jh
Z2VfZGlzYWJsZUNtZCwKICAgICAgICBrRE9NU3RvcmFnZV9nZXRET01TdG9yYWdlRW50cmllc0Nt
ZCwKICAgICAgICBrRE9NU3RvcmFnZV9zZXRET01TdG9yYWdlSXRlbUNtZCwKICAgICAgICBrRE9N
U3RvcmFnZV9yZW1vdmVET01TdG9yYWdlSXRlbUNtZCwKICAgICAgICBrQXBwbGljYXRpb25DYWNo
ZV9nZXRGcmFtZXNXaXRoTWFuaWZlc3RzQ21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2Vu
YWJsZUNtZCwKICAgICAgICBrQXBwbGljYXRpb25DYWNoZV9nZXRNYW5pZmVzdEZvckZyYW1lQ21k
LAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZUNt
ZCwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAga0ZpbGVTeXN0ZW1fZW5hYmxlQ21k
LAogICAgICAgIGtGaWxlU3lzdGVtX2Rpc2FibGVDbWQsCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9T
WVNURU0pCgogICAgICAgIGtET01fZ2V0RG9jdW1lbnRDbWQsCiAgICAgICAga0RPTV9yZXF1ZXN0
Q2hpbGROb2Rlc0NtZCwKICAgICAgICBrRE9NX3F1ZXJ5U2VsZWN0b3JDbWQsCiAgICAgICAga0RP
TV9xdWVyeVNlbGVjdG9yQWxsQ21kLAogICAgICAgIGtET01fc2V0Tm9kZU5hbWVDbWQsCiAgICAg
ICAga0RPTV9zZXROb2RlVmFsdWVDbWQsCiAgICAgICAga0RPTV9yZW1vdmVOb2RlQ21kLAogICAg
ICAgIGtET01fc2V0QXR0cmlidXRlVmFsdWVDbWQsCiAgICAgICAga0RPTV9zZXRBdHRyaWJ1dGVz
QXNUZXh0Q21kLAogICAgICAgIGtET01fcmVtb3ZlQXR0cmlidXRlQ21kLAogICAgICAgIGtET01f
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlQ21kLAogICAgICAgIGtET01fZ2V0T3V0ZXJIVE1MQ21k
LAogICAgICAgIGtET01fc2V0T3V0ZXJIVE1MQ21kLAogICAgICAgIGtET01fcGVyZm9ybVNlYXJj
aENtZCwKICAgICAgICBrRE9NX2dldFNlYXJjaFJlc3VsdHNDbWQsCiAgICAgICAga0RPTV9kaXNj
YXJkU2VhcmNoUmVzdWx0c0NtZCwKICAgICAgICBrRE9NX3JlcXVlc3ROb2RlQ21kLAogICAgICAg
IGtET01fc2V0SW5zcGVjdE1vZGVFbmFibGVkQ21kLAogICAgICAgIGtET01faGlnaGxpZ2h0UmVj
dENtZCwKICAgICAgICBrRE9NX2hpZ2hsaWdodE5vZGVDbWQsCiAgICAgICAga0RPTV9oaWRlSGln
aGxpZ2h0Q21kLAogICAgICAgIGtET01faGlnaGxpZ2h0RnJhbWVDbWQsCiAgICAgICAga0RPTV9w
dXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmRDbWQsCiAgICAgICAga0RPTV9yZXNvbHZlTm9kZUNtZCwK
ICAgICAgICBrRE9NX2dldEF0dHJpYnV0ZXNDbWQsCiAgICAgICAga0RPTV9tb3ZlVG9DbWQsCiAg
ICAgICAga0NTU19lbmFibGVDbWQsCiAgICAgICAga0NTU19kaXNhYmxlQ21kLAogICAgICAgIGtD
U1NfZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGVDbWQsCiAgICAgICAga0NTU19nZXRJbmxpbmVTdHls
ZXNGb3JOb2RlQ21kLAogICAgICAgIGtDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGVDbWQsCiAg
ICAgICAga0NTU19nZXRBbGxTdHlsZVNoZWV0c0NtZCwKICAgICAgICBrQ1NTX2dldFN0eWxlU2hl
ZXRDbWQsCiAgICAgICAga0NTU19nZXRTdHlsZVNoZWV0VGV4dENtZCwKICAgICAgICBrQ1NTX3Nl
dFN0eWxlU2hlZXRUZXh0Q21kLAogICAgICAgIGtDU1Nfc2V0UHJvcGVydHlUZXh0Q21kLAogICAg
ICAgIGtDU1NfdG9nZ2xlUHJvcGVydHlDbWQsCiAgICAgICAga0NTU19zZXRSdWxlU2VsZWN0b3JD
bWQsCiAgICAgICAga0NTU19hZGRSdWxlQ21kLAogICAgICAgIGtDU1NfZ2V0U3VwcG9ydGVkQ1NT
UHJvcGVydGllc0NtZCwKICAgICAgICBrQ1NTX3N0YXJ0U2VsZWN0b3JQcm9maWxlckNtZCwKICAg
ICAgICBrQ1NTX3N0b3BTZWxlY3RvclByb2ZpbGVyQ21kLAogICAgICAgIGtUaW1lbGluZV9zdGFy
dENtZCwKICAgICAgICBrVGltZWxpbmVfc3RvcENtZCwKICAgICAgICBrVGltZWxpbmVfc2V0SW5j
bHVkZU1lbW9yeURldGFpbHNDbWQsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAg
ICAgICAga0RlYnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRpb25DbWQsCiAgICAgICAga0RlYnVnZ2Vy
X3N1cHBvcnRzTmF0aXZlQnJlYWtwb2ludHNDbWQsCiAgICAgICAga0RlYnVnZ2VyX2VuYWJsZUNt
ZCwKICAgICAgICBrRGVidWdnZXJfZGlzYWJsZUNtZCwKICAgICAgICBrRGVidWdnZXJfc2V0QnJl
YWtwb2ludHNBY3RpdmVDbWQsCiAgICAgICAga0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRCeVVybENt
ZCwKICAgICAgICBrRGVidWdnZXJfc2V0QnJlYWtwb2ludENtZCwKICAgICAgICBrRGVidWdnZXJf
cmVtb3ZlQnJlYWtwb2ludENtZCwKICAgICAgICBrRGVidWdnZXJfY29udGludWVUb0xvY2F0aW9u
Q21kLAogICAgICAgIGtEZWJ1Z2dlcl9zdGVwT3ZlckNtZCwKICAgICAgICBrRGVidWdnZXJfc3Rl
cEludG9DbWQsCiAgICAgICAga0RlYnVnZ2VyX3N0ZXBPdXRDbWQsCiAgICAgICAga0RlYnVnZ2Vy
X3BhdXNlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9yZXN1bWVDbWQsCiAgICAgICAga0RlYnVnZ2Vy
X3NlYXJjaEluQ29udGVudENtZCwKICAgICAgICBrRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNl
Q21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRTY3JpcHRTb3VyY2VDbWQsCiAgICAgICAga0RlYnVn
Z2VyX2dldFNjcmlwdFNvdXJjZUNtZCwKICAgICAgICBrRGVidWdnZXJfZ2V0RnVuY3Rpb25Mb2Nh
dGlvbkNtZCwKICAgICAgICBrRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnNDbWQsCiAgICAg
ICAga0RlYnVnZ2VyX2V2YWx1YXRlT25DYWxsRnJhbWVDbWQsCiNlbmRpZiAvLyBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAg
ICAga0RPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RPTURlYnVnZ2Vy
X3JlbW92ZURPTUJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RPTURlYnVnZ2VyX3NldEV2ZW50TGlz
dGVuZXJCcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3Rl
bmVyQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludENt
ZCwKICAgICAgICBrRE9NRGVidWdnZXJfcmVtb3ZlWEhSQnJlYWtwb2ludENtZCwKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQoKICAgICAgICBrUHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbkNtZCwKICAgICAgICBr
UHJvZmlsZXJfaXNTYW1wbGluZ0NtZCwKICAgICAgICBrUHJvZmlsZXJfaGFzSGVhcFByb2ZpbGVy
Q21kLAogICAgICAgIGtQcm9maWxlcl9lbmFibGVDbWQsCiAgICAgICAga1Byb2ZpbGVyX2Rpc2Fi
bGVDbWQsCiAgICAgICAga1Byb2ZpbGVyX3N0YXJ0Q21kLAogICAgICAgIGtQcm9maWxlcl9zdG9w
Q21kLAogICAgICAgIGtQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVyc0NtZCwKICAgICAgICBrUHJv
ZmlsZXJfZ2V0UHJvZmlsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfcmVtb3ZlUHJvZmlsZUNtZCwK
ICAgICAgICBrUHJvZmlsZXJfY2xlYXJQcm9maWxlc0NtZCwKICAgICAgICBrUHJvZmlsZXJfdGFr
ZUhlYXBTbmFwc2hvdENtZCwKICAgICAgICBrUHJvZmlsZXJfY29sbGVjdEdhcmJhZ2VDbWQsCiAg
ICAgICAga1Byb2ZpbGVyX2dldE9iamVjdEJ5SGVhcE9iamVjdElkQ21kLAojZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgICAgIGtX
b3JrZXJfc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWRDbWQsCiAgICAgICAga1dvcmtlcl9zZW5k
TWVzc2FnZVRvV29ya2VyQ21kLAogICAgICAgIGtXb3JrZXJfY29ubmVjdFRvV29ya2VyQ21kLAog
ICAgICAgIGtXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXJDbWQsCiAgICAgICAga1dvcmtlcl9z
ZXRBdXRvY29ubmVjdFRvV29ya2Vyc0NtZCwKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKICAg
IH07CgogICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOwoKcHJpdmF0ZToKICAg
IHN0YXRpYyBpbnQgZ2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7
CiAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpOwogICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOwogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnMpOwogICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JT
dHJpbmcgaW52b2NhdGlvbkVycm9yKTsKCiAgICB2b2lkIEluc3BlY3Rvcl9lbmFibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBJ
bnNwZWN0b3JfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIE1lbW9yeV9nZXRET01Ob2RlQ291bnQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2Vu
YWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIFBhZ2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9h
ZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIFBhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfcmVsb2Fk
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgUGFnZV9uYXZpZ2F0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZ2V0Q29va2llcyhsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZGVsZXRl
Q29va2llKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgUGFnZV9nZXRSZXNvdXJjZVRyZWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2dldFJlc291cmNlQ29u
dGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIFBhZ2Vfc2VhcmNoSW5SZXNvdXJjZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2VhcmNoSW5SZXNvdXJj
ZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBQYWdlX3NldERvY3VtZW50Q29udGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2V0U2NyZWVuU2l6ZU92
ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgUnVudGltZV9ldmFsdWF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfY2FsbEZ1bmN0aW9uT24o
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBSdW50aW1lX2dldFByb3BlcnRpZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBSdW50aW1lX3JlbGVhc2VPYmplY3QobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBSdW50aW1lX3JlbGVhc2VPYmplY3RHcm91cChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcnVuKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ29uc29s
ZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBDb25zb2xlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2NsZWFyTWVzc2FnZXMo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBDb25zb2xlX3NldE1vbml0b3JpbmdYSFJFbmFibGVkKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ29uc29sZV9hZGRJbnNw
ZWN0ZWROb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgTmV0d29ya19lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBOZXR3b3JrX2Rpc2FibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX3NldFVzZXJBZ2VudE92ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19zZXRFeHRyYUhUVFBIZWFk
ZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgTmV0d29ya19nZXRSZXNwb25zZUJvZHkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBOZXR3b3JrX2NhbkNsZWFyQnJv
d3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgTmV0d29ya19jbGVhckJyb3dzZXJDYWNoZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2Fu
Q2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llcyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IE5ldHdvcmtfc2V0Q2FjaGVEaXNhYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgIHZvaWQg
RGF0YWJhc2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgRGF0YWJhc2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERhdGFiYXNlX2dldERh
dGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIERhdGFiYXNlX2V4ZWN1dGVTUUwobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2b2lkIEluZGV4
ZWREQl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBJbmRleGVkREJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEluZGV4ZWREQl9yZXF1ZXN0
RGF0YWJhc2VOYW1lc0ZvckZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2b2lkIERPTVN0b3JhZ2VfZW5hYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgRE9NU3RvcmFnZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFnZV9nZXRET01TdG9yYWdlRW50cmll
cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIERPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01TdG9yYWdlX3JlbW92
ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgQXBwbGljYXRpb25DYWNoZV9nZXRGcmFtZXNXaXRoTWFuaWZl
c3RzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgQXBwbGljYXRpb25DYWNoZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dl
dE1hbmlmZXN0Rm9yRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2Fj
aGVGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7CiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgdm9pZCBGaWxlU3lzdGVtX2VuYWJs
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIEZpbGVTeXN0ZW1fZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgogICAg
dm9pZCBET01fZ2V0RG9jdW1lbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcmVxdWVzdENoaWxkTm9kZXMobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01f
cXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERPTV9xdWVyeVNlbGVjdG9yQWxsKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldE5vZGVO
YW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRE9NX3NldE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZW1vdmVOb2RlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3Nl
dEF0dHJpYnV0ZVZhbHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldEF0dHJpYnV0ZXNBc1RleHQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcmVt
b3ZlQXR0cmlidXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRE9NX2dldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9n
ZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBET01fc2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3BlcmZvcm1TZWFyY2go
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBET01fZ2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9kaXNjYXJkU2VhcmNoUmVzdWx0cyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIERPTV9yZXF1ZXN0Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9zZXRJbnNwZWN0TW9kZUVuYWJsZWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01faGlnaGxpZ2h0UmVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9oaWdobGlnaHROb2RlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2hpZGVIaWdo
bGlnaHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBET01faGlnaGxpZ2h0RnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRE9NX3Jlc29sdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2dldEF0dHJpYnV0ZXMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01fbW92ZVRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgQ1NTX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldE1h
dGNoZWRTdHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldElubGluZVN0eWxlc0Zvck5vZGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBD
U1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0QWxsU3R5bGVTaGVldHMobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBDU1NfZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19nZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19z
ZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zZXRQcm9wZXJ0eVRleHQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfdG9nZ2xl
UHJvcGVydHkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBDU1Nfc2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2FkZFJ1bGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBD
U1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zdGFydFNlbGVjdG9yUHJvZmls
ZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBUaW1lbGluZV9zdGFydChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IFRpbWVsaW5lX3N0b3AobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBUaW1lbGluZV9zZXRJbmNsdWRlTWVtb3J5RGV0YWlscyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERlYnVnZ2VyX2NhdXNlc1JlY29tcGls
YXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdn
ZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3NldEJyZWFrcG9p
bnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJf
c2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3JlbW92ZUJyZWFrcG9pbnQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dl
cl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdGVwT3Zlcihsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2Vy
X3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc3RlcE91dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3BhdXNlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2VhcmNoSW5Db250ZW50KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdn
ZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0U2NyaXB0U291cmNlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RGVidWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0RnVuY3Rpb25Mb2NhdGlv
bihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIERlYnVnZ2VyX3NldFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZXZhbHVh
dGVPbkNhbGxGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERPTURlYnVnZ2VyX3NldERPTUJyZWFr
cG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVET01CcmVha3BvaW50KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NRGVidWdn
ZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgUHJv
ZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2lzU2FtcGxpbmcobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQ
cm9maWxlcl9oYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxl
cl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfc3RhcnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9zdG9wKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9nZXRQcm9maWxlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJv
ZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2NsZWFyUHJvZmlsZXMobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9m
aWxlcl90YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfY29sbGVjdEdhcmJhZ2UobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQ
cm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICB2b2lkIFdvcmtlcl9zZXRXb3JrZXJJ
bnNwZWN0aW9uRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9zZW5kTWVzc2FnZVRvV29ya2VyKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgV29y
a2VyX2Nvbm5lY3RUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9kaXNjb25uZWN0RnJvbVdvcmtlcihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IFdvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgog
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogbV9hcHBsaWNhdGlvbkNhY2hlQWdl
bnQ7CiAgICBJbnNwZWN0b3JDU1NBZ2VudCogbV9jc3NBZ2VudDsKICAgIEluc3BlY3RvckNvbnNv
bGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiAgICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2Vu
dDsKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQqIG1fZG9tRGVidWdnZXJBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogbV9kb21TdG9yYWdlQWdl
bnQ7CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQq
IG1fZGF0YWJhc2VBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9k
ZWJ1Z2dlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCogbV9maWxl
U3lzdGVtQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgojaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCgogICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQqIG1faW5kZXhlZERC
QWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICBJbnNwZWN0b3JB
Z2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KiBtX21lbW9y
eUFnZW50OwogICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogbV9uZXR3b3JrQWdlbnQ7CiAgICBJ
bnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgogICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogbV9wcm9maWxlckFnZW50OwojZW5k
aWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KiBtX3J1bnRpbWVBZ2VudDsKICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIG1fdGltZWxp
bmVBZ2VudDsKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIEluc3BlY3RvcldvcmtlckFnZW50KiBt
X3dvcmtlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgp9OwoKfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJf
aCkKCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124044</attachid>
            <date>2012-01-25 17:22:48 -0800</date>
            <delta_ts>2012-01-25 17:22:48 -0800</delta_ts>
            <desc>new cpp</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>text/plain</type>
            <size>192767</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1
ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKI2luY2x1
ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQu
aCIKI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgiCiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaCIKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaW5jbHVkZSAiSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5oIgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgiCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCgojaW5jbHVkZSAiSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmgiCiNlbmRpZiAv
LyBFTkFCTEUoRklMRV9TWVNURU0pCgojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgojaW5j
bHVkZSAiSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCIKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQoKI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0
b3JNZW1vcnlBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgojaW5j
bHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKCiNpbmNsdWRlICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIK
I2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKI2lmIEVOQUJMRShXT1JLRVJTKQoK
I2luY2x1ZGUgIkluc3BlY3RvcldvcmtlckFnZW50LmgiCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKCgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiAgICAiSW5zcGVjdG9yLmVuYWJsZSIsCiAgICAi
SW5zcGVjdG9yLmRpc2FibGUiLAogICAgIk1lbW9yeS5nZXRET01Ob2RlQ291bnQiLAogICAgIlBh
Z2UuZW5hYmxlIiwKICAgICJQYWdlLmRpc2FibGUiLAogICAgIlBhZ2UuYWRkU2NyaXB0VG9FdmFs
dWF0ZU9uTG9hZCIsCiAgICAiUGFnZS5yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwKICAg
ICJQYWdlLnJlbG9hZCIsCiAgICAiUGFnZS5uYXZpZ2F0ZSIsCiAgICAiUGFnZS5nZXRDb29raWVz
IiwKICAgICJQYWdlLmRlbGV0ZUNvb2tpZSIsCiAgICAiUGFnZS5nZXRSZXNvdXJjZVRyZWUiLAog
ICAgIlBhZ2UuZ2V0UmVzb3VyY2VDb250ZW50IiwKICAgICJQYWdlLnNlYXJjaEluUmVzb3VyY2Ui
LAogICAgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZXMiLAogICAgIlBhZ2Uuc2V0RG9jdW1lbnRDb250
ZW50IiwKICAgICJQYWdlLnNldFNjcmVlblNpemVPdmVycmlkZSIsCiAgICAiUnVudGltZS5ldmFs
dWF0ZSIsCiAgICAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIsCiAgICAiUnVudGltZS5nZXRQcm9w
ZXJ0aWVzIiwKICAgICJSdW50aW1lLnJlbGVhc2VPYmplY3QiLAogICAgIlJ1bnRpbWUucmVsZWFz
ZU9iamVjdEdyb3VwIiwKICAgICJSdW50aW1lLnJ1biIsCiAgICAiQ29uc29sZS5lbmFibGUiLAog
ICAgIkNvbnNvbGUuZGlzYWJsZSIsCiAgICAiQ29uc29sZS5jbGVhck1lc3NhZ2VzIiwKICAgICJD
b25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIiwKICAgICJDb25zb2xlLmFkZEluc3BlY3Rl
ZE5vZGUiLAogICAgIk5ldHdvcmsuZW5hYmxlIiwKICAgICJOZXR3b3JrLmRpc2FibGUiLAogICAg
Ik5ldHdvcmsuc2V0VXNlckFnZW50T3ZlcnJpZGUiLAogICAgIk5ldHdvcmsuc2V0RXh0cmFIVFRQ
SGVhZGVycyIsCiAgICAiTmV0d29yay5nZXRSZXNwb25zZUJvZHkiLAogICAgIk5ldHdvcmsuY2Fu
Q2xlYXJCcm93c2VyQ2FjaGUiLAogICAgIk5ldHdvcmsuY2xlYXJCcm93c2VyQ2FjaGUiLAogICAg
Ik5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIsCiAgICAiTmV0d29yay5jbGVhckJyb3dz
ZXJDb29raWVzIiwKICAgICJOZXR3b3JrLnNldENhY2hlRGlzYWJsZWQiLAojaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKCiAgICAiRGF0YWJhc2UuZW5hYmxlIiwKICAgICJEYXRhYmFzZS5kaXNhYmxl
IiwKICAgICJEYXRhYmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiLAogICAgIkRhdGFiYXNlLmV4
ZWN1dGVTUUwiLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKCiAgICAiSW5kZXhlZERCLmVuYWJsZSIsCiAgICAiSW5kZXhlZERCLmRp
c2FibGUiLAogICAgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lIiwKICAg
ICJJbmRleGVkREIucmVxdWVzdERhdGFiYXNlIiwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKICAgICJET01TdG9yYWdlLmVuYWJsZSIsCiAgICAiRE9NU3RvcmFnZS5kaXNhYmxl
IiwKICAgICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVzIiwKICAgICJET01TdG9yYWdl
LnNldERPTVN0b3JhZ2VJdGVtIiwKICAgICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVt
IiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMiLAogICAgIkFw
cGxpY2F0aW9uQ2FjaGUuZW5hYmxlIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldE1hbmlmZXN0
Rm9yRnJhbWUiLAogICAgIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lIiwKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAiRmlsZVN5c3RlbS5lbmFibGUiLAog
ICAgIkZpbGVTeXN0ZW0uZGlzYWJsZSIsCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgog
ICAgIkRPTS5nZXREb2N1bWVudCIsCiAgICAiRE9NLnJlcXVlc3RDaGlsZE5vZGVzIiwKICAgICJE
T00ucXVlcnlTZWxlY3RvciIsCiAgICAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLAogICAgIkRPTS5z
ZXROb2RlTmFtZSIsCiAgICAiRE9NLnNldE5vZGVWYWx1ZSIsCiAgICAiRE9NLnJlbW92ZU5vZGUi
LAogICAgIkRPTS5zZXRBdHRyaWJ1dGVWYWx1ZSIsCiAgICAiRE9NLnNldEF0dHJpYnV0ZXNBc1Rl
eHQiLAogICAgIkRPTS5yZW1vdmVBdHRyaWJ1dGUiLAogICAgIkRPTS5nZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUiLAogICAgIkRPTS5nZXRPdXRlckhUTUwiLAogICAgIkRPTS5zZXRPdXRlckhUTUwi
LAogICAgIkRPTS5wZXJmb3JtU2VhcmNoIiwKICAgICJET00uZ2V0U2VhcmNoUmVzdWx0cyIsCiAg
ICAiRE9NLmRpc2NhcmRTZWFyY2hSZXN1bHRzIiwKICAgICJET00ucmVxdWVzdE5vZGUiLAogICAg
IkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgIkRPTS5oaWdobGlnaHRSZWN0IiwKICAg
ICJET00uaGlnaGxpZ2h0Tm9kZSIsCiAgICAiRE9NLmhpZGVIaWdobGlnaHQiLAogICAgIkRPTS5o
aWdobGlnaHRGcmFtZSIsCiAgICAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCIsCiAgICAi
RE9NLnJlc29sdmVOb2RlIiwKICAgICJET00uZ2V0QXR0cmlidXRlcyIsCiAgICAiRE9NLm1vdmVU
byIsCiAgICAiQ1NTLmVuYWJsZSIsCiAgICAiQ1NTLmRpc2FibGUiLAogICAgIkNTUy5nZXRNYXRj
aGVkU3R5bGVzRm9yTm9kZSIsCiAgICAiQ1NTLmdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAg
IkNTUy5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSIsCiAgICAiQ1NTLmdldEFsbFN0eWxlU2hlZXRz
IiwKICAgICJDU1MuZ2V0U3R5bGVTaGVldCIsCiAgICAiQ1NTLmdldFN0eWxlU2hlZXRUZXh0IiwK
ICAgICJDU1Muc2V0U3R5bGVTaGVldFRleHQiLAogICAgIkNTUy5zZXRQcm9wZXJ0eVRleHQiLAog
ICAgIkNTUy50b2dnbGVQcm9wZXJ0eSIsCiAgICAiQ1NTLnNldFJ1bGVTZWxlY3RvciIsCiAgICAi
Q1NTLmFkZFJ1bGUiLAogICAgIkNTUy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiwKICAgICJD
U1Muc3RhcnRTZWxlY3RvclByb2ZpbGVyIiwKICAgICJDU1Muc3RvcFNlbGVjdG9yUHJvZmlsZXIi
LAogICAgIlRpbWVsaW5lLnN0YXJ0IiwKICAgICJUaW1lbGluZS5zdG9wIiwKICAgICJUaW1lbGlu
ZS5zZXRJbmNsdWRlTWVtb3J5RGV0YWlscyIsCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAiRGVidWdnZXIuY2F1c2VzUmVjb21waWxhdGlvbiIsCiAgICAiRGVidWdnZXIuc3Vw
cG9ydHNOYXRpdmVCcmVha3BvaW50cyIsCiAgICAiRGVidWdnZXIuZW5hYmxlIiwKICAgICJEZWJ1
Z2dlci5kaXNhYmxlIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIsCiAgICAi
RGVidWdnZXIuc2V0QnJlYWtwb2ludEJ5VXJsIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50
IiwKICAgICJEZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5jb250aW51
ZVRvTG9jYXRpb24iLAogICAgIkRlYnVnZ2VyLnN0ZXBPdmVyIiwKICAgICJEZWJ1Z2dlci5zdGVw
SW50byIsCiAgICAiRGVidWdnZXIuc3RlcE91dCIsCiAgICAiRGVidWdnZXIucGF1c2UiLAogICAg
IkRlYnVnZ2VyLnJlc3VtZSIsCiAgICAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50IiwKICAgICJE
ZWJ1Z2dlci5jYW5TZXRTY3JpcHRTb3VyY2UiLAogICAgIkRlYnVnZ2VyLnNldFNjcmlwdFNvdXJj
ZSIsCiAgICAiRGVidWdnZXIuZ2V0U2NyaXB0U291cmNlIiwKICAgICJEZWJ1Z2dlci5nZXRGdW5j
dGlvbkxvY2F0aW9uIiwKICAgICJEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyIsCiAgICAi
RGVidWdnZXIuZXZhbHVhdGVPbkNhbGxGcmFtZSIsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAiRE9NRGVi
dWdnZXIuc2V0RE9NQnJlYWtwb2ludCIsCiAgICAiRE9NRGVidWdnZXIucmVtb3ZlRE9NQnJlYWtw
b2ludCIsCiAgICAiRE9NRGVidWdnZXIuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiLAogICAg
IkRPTURlYnVnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50IiwKICAgICJET01EZWJ1
Z2dlci5zZXRYSFJCcmVha3BvaW50IiwKICAgICJET01EZWJ1Z2dlci5yZW1vdmVYSFJCcmVha3Bv
aW50IiwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJQcm9maWxlci5jYXVzZXNSZWNvbXBpbGF0aW9uIiwK
ICAgICJQcm9maWxlci5pc1NhbXBsaW5nIiwKICAgICJQcm9maWxlci5oYXNIZWFwUHJvZmlsZXIi
LAogICAgIlByb2ZpbGVyLmVuYWJsZSIsCiAgICAiUHJvZmlsZXIuZGlzYWJsZSIsCiAgICAiUHJv
ZmlsZXIuc3RhcnQiLAogICAgIlByb2ZpbGVyLnN0b3AiLAogICAgIlByb2ZpbGVyLmdldFByb2Zp
bGVIZWFkZXJzIiwKICAgICJQcm9maWxlci5nZXRQcm9maWxlIiwKICAgICJQcm9maWxlci5yZW1v
dmVQcm9maWxlIiwKICAgICJQcm9maWxlci5jbGVhclByb2ZpbGVzIiwKICAgICJQcm9maWxlci50
YWtlSGVhcFNuYXBzaG90IiwKICAgICJQcm9maWxlci5jb2xsZWN0R2FyYmFnZSIsCiAgICAiUHJv
ZmlsZXIuZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgIldvcmtlci5zZXRXb3JrZXJJ
bnNwZWN0aW9uRW5hYmxlZCIsCiAgICAiV29ya2VyLnNlbmRNZXNzYWdlVG9Xb3JrZXIiLAogICAg
Ildvcmtlci5jb25uZWN0VG9Xb3JrZXIiLAogICAgIldvcmtlci5kaXNjb25uZWN0RnJvbVdvcmtl
ciIsCiAgICAiV29ya2VyLnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzIiwKI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQoKfTsKCgpjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwgOiBw
dWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewpwdWJsaWM6CiAgICBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCgw
KQogICAgICAgICwgbV9jc3NBZ2VudCgwKQogICAgICAgICwgbV9jb25zb2xlQWdlbnQoMCkKICAg
ICAgICAsIG1fZG9tQWdlbnQoMCkKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAg
ICAgICAsIG1fZG9tRGVidWdnZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgogICAgICAgICwgbV9kb21TdG9yYWdlQWdlbnQoMCkKI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCgogICAgICAgICwgbV9kYXRhYmFzZUFnZW50KDApCiNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAs
IG1fZGVidWdnZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgICAgICAsIG1fZmlsZVN5c3RlbUFnZW50KDAp
CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgojaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCgogICAgICAgICwgbV9pbmRleGVkREJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCgogICAgICAgICwgbV9pbnNwZWN0b3JBZ2VudCgwKQogICAgICAgICwgbV9t
ZW1vcnlBZ2VudCgwKQogICAgICAgICwgbV9uZXR3b3JrQWdlbnQoMCkKICAgICAgICAsIG1fcGFn
ZUFnZW50KDApCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgLCBtX3By
b2ZpbGVyQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAg
ICAgICAsIG1fcnVudGltZUFnZW50KDApCiAgICAgICAgLCBtX3RpbWVsaW5lQWdlbnQoMCkKI2lm
IEVOQUJMRShXT1JLRVJTKQoKICAgICAgICAsIG1fd29ya2VyQWdlbnQoMCkKI2VuZGlmIC8vIEVO
QUJMRShXT1JLRVJTKQoKICAgIHsgfQoKICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9CiAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29u
c3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsKICAgIHVzaW5nIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yOwoKICAgIHZvaWQgcmVnaXN0
ZXJBZ2VudChJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgLyogQXBwbGljYXRpb25DYWNo
ZUNvbW1hbmRIYW5kbGVyICovKiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQpIHsgQVNTRVJUKCFtX2Fw
cGxpY2F0aW9uQ2FjaGVBZ2VudCk7IG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0gYXBwbGljYXRp
b25DYWNoZUFnZW50OyB9CiAgICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yQ1NTQWdlbnQg
LyogQ1NTQ29tbWFuZEhhbmRsZXIgKi8qIGNzc0FnZW50KSB7IEFTU0VSVCghbV9jc3NBZ2VudCk7
IG1fY3NzQWdlbnQgPSBjc3NBZ2VudDsgfQogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3Rv
ckNvbnNvbGVBZ2VudCAvKiBDb25zb2xlQ29tbWFuZEhhbmRsZXIgKi8qIGNvbnNvbGVBZ2VudCkg
eyBBU1NFUlQoIW1fY29uc29sZUFnZW50KTsgbV9jb25zb2xlQWdlbnQgPSBjb25zb2xlQWdlbnQ7
IH0KICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JET01BZ2VudCAvKiBET01Db21tYW5k
SGFuZGxlciAqLyogZG9tQWdlbnQpIHsgQVNTRVJUKCFtX2RvbUFnZW50KTsgbV9kb21BZ2VudCA9
IGRvbUFnZW50OyB9CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIHJl
Z2lzdGVyQWdlbnQoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCAvKiBET01EZWJ1Z2dlckNvbW1h
bmRIYW5kbGVyICovKiBkb21EZWJ1Z2dlckFnZW50KSB7IEFTU0VSVCghbV9kb21EZWJ1Z2dlckFn
ZW50KTsgbV9kb21EZWJ1Z2dlckFnZW50ID0gZG9tRGVidWdnZXJBZ2VudDsgfQojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdm9pZCByZWdpc3RlckFnZW50KEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudCAvKiBET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIgKi8qIGRvbVN0
b3JhZ2VBZ2VudCkgeyBBU1NFUlQoIW1fZG9tU3RvcmFnZUFnZW50KTsgbV9kb21TdG9yYWdlQWdl
bnQgPSBkb21TdG9yYWdlQWdlbnQ7IH0KI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdm9p
ZCByZWdpc3RlckFnZW50KEluc3BlY3RvckRhdGFiYXNlQWdlbnQgLyogRGF0YWJhc2VDb21tYW5k
SGFuZGxlciAqLyogZGF0YWJhc2VBZ2VudCkgeyBBU1NFUlQoIW1fZGF0YWJhc2VBZ2VudCk7IG1f
ZGF0YWJhc2VBZ2VudCA9IGRhdGFiYXNlQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShTUUxfREFU
QUJBU0UpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdm9pZCByZWdpc3Rl
ckFnZW50KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgLyogRGVidWdnZXJDb21tYW5kSGFuZGxlciAq
LyogZGVidWdnZXJBZ2VudCkgeyBBU1NFUlQoIW1fZGVidWdnZXJBZ2VudCk7IG1fZGVidWdnZXJB
Z2VudCA9IGRlYnVnZ2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5z
cGVjdG9yRmlsZVN5c3RlbUFnZW50IC8qIEZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlciAqLyogZmls
ZVN5c3RlbUFnZW50KSB7IEFTU0VSVCghbV9maWxlU3lzdGVtQWdlbnQpOyBtX2ZpbGVTeXN0ZW1B
Z2VudCA9IGZpbGVTeXN0ZW1BZ2VudDsgfQojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoK
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudCAvKiBJbmRleGVkREJDb21tYW5kSGFuZGxlciAqLyogaW5kZXhl
ZERCQWdlbnQpIHsgQVNTRVJUKCFtX2luZGV4ZWREQkFnZW50KTsgbV9pbmRleGVkREJBZ2VudCA9
IGluZGV4ZWREQkFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAg
ICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yQWdlbnQgLyogSW5zcGVjdG9yQ29tbWFuZEhh
bmRsZXIgKi8qIGluc3BlY3RvckFnZW50KSB7IEFTU0VSVCghbV9pbnNwZWN0b3JBZ2VudCk7IG1f
aW5zcGVjdG9yQWdlbnQgPSBpbnNwZWN0b3JBZ2VudDsgfQogICAgdm9pZCByZWdpc3RlckFnZW50
KEluc3BlY3Rvck1lbW9yeUFnZW50IC8qIE1lbW9yeUNvbW1hbmRIYW5kbGVyICovKiBtZW1vcnlB
Z2VudCkgeyBBU1NFUlQoIW1fbWVtb3J5QWdlbnQpOyBtX21lbW9yeUFnZW50ID0gbWVtb3J5QWdl
bnQ7IH0KICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JSZXNvdXJjZUFnZW50IC8qIE5l
dHdvcmtDb21tYW5kSGFuZGxlciAqLyogbmV0d29ya0FnZW50KSB7IEFTU0VSVCghbV9uZXR3b3Jr
QWdlbnQpOyBtX25ldHdvcmtBZ2VudCA9IG5ldHdvcmtBZ2VudDsgfQogICAgdm9pZCByZWdpc3Rl
ckFnZW50KEluc3BlY3RvclBhZ2VBZ2VudCAvKiBQYWdlQ29tbWFuZEhhbmRsZXIgKi8qIHBhZ2VB
Z2VudCkgeyBBU1NFUlQoIW1fcGFnZUFnZW50KTsgbV9wYWdlQWdlbnQgPSBwYWdlQWdlbnQ7IH0K
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgcmVnaXN0ZXJBZ2VudChJ
bnNwZWN0b3JQcm9maWxlckFnZW50IC8qIFByb2ZpbGVyQ29tbWFuZEhhbmRsZXIgKi8qIHByb2Zp
bGVyQWdlbnQpIHsgQVNTRVJUKCFtX3Byb2ZpbGVyQWdlbnQpOyBtX3Byb2ZpbGVyQWdlbnQgPSBw
cm9maWxlckFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAg
ICB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yUnVudGltZUFnZW50IC8qIFJ1bnRpbWVDb21t
YW5kSGFuZGxlciAqLyogcnVudGltZUFnZW50KSB7IEFTU0VSVCghbV9ydW50aW1lQWdlbnQpOyBt
X3J1bnRpbWVBZ2VudCA9IHJ1bnRpbWVBZ2VudDsgfQogICAgdm9pZCByZWdpc3RlckFnZW50KElu
c3BlY3RvclRpbWVsaW5lQWdlbnQgLyogVGltZWxpbmVDb21tYW5kSGFuZGxlciAqLyogdGltZWxp
bmVBZ2VudCkgeyBBU1NFUlQoIW1fdGltZWxpbmVBZ2VudCk7IG1fdGltZWxpbmVBZ2VudCA9IHRp
bWVsaW5lQWdlbnQ7IH0KI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIHZvaWQgcmVnaXN0ZXJBZ2Vu
dChJbnNwZWN0b3JXb3JrZXJBZ2VudCAvKiBXb3JrZXJDb21tYW5kSGFuZGxlciAqLyogd29ya2Vy
QWdlbnQpIHsgQVNTRVJUKCFtX3dvcmtlckFnZW50KTsgbV93b3JrZXJBZ2VudCA9IHdvcmtlckFn
ZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICB2b2lkIEluc3Bl
Y3Rvcl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBJbnNwZWN0b3JfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE1lbW9yeV9nZXRET01Ob2Rl
Q291bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBQYWdlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfYWRkU2Ny
aXB0VG9FdmFsdWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9h
ZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIFBhZ2VfcmVsb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9uYXZpZ2F0ZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfZ2V0Q29va2ll
cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIFBhZ2VfZGVsZXRlQ29va2llKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9nZXRSZXNvdXJjZVRyZWUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQ
YWdlX2dldFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2VhcmNoSW5SZXNvdXJjZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBh
Z2Vfc2VhcmNoSW5SZXNvdXJjZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX3NldERvY3VtZW50Q29udGVudChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBh
Z2Vfc2V0U2NyZWVuU2l6ZU92ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9ldmFsdWF0ZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRp
bWVfY2FsbEZ1bmN0aW9uT24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBSdW50aW1lX2dldFByb3BlcnRpZXMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBSdW50aW1l
X3JlbGVhc2VPYmplY3QobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBSdW50aW1lX3JlbGVhc2VPYmplY3RHcm91cChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRp
bWVfcnVuKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgQ29uc29sZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2Rpc2FibGUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25z
b2xlX2NsZWFyTWVzc2FnZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX3NldE1vbml0b3JpbmdYSFJFbmFibGVkKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgQ29uc29sZV9hZGRJbnNwZWN0ZWROb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19lbmFibGUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBOZXR3
b3JrX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBOZXR3b3JrX3NldFVzZXJBZ2VudE92ZXJyaWRlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29y
a19zZXRFeHRyYUhUVFBIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19nZXRSZXNwb25zZUJvZHkobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBO
ZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29ya19jbGVhckJyb3dzZXJDYWNo
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIE5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2xlYXJC
cm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfc2V0Q2FjaGVEaXNhYmxlZChsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQoKICAgIHZvaWQgRGF0YWJhc2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGF0YWJhc2VfZGlzYWJsZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIERhdGFiYXNlX2dldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERhdGFiYXNlX2V4ZWN1dGVT
UUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwoj
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKCiAgICB2b2lkIEluZGV4ZWREQl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBJbmRleGVkREJfZGlzYWJsZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IEluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSW5kZXhlZERCX3Jl
cXVlc3REYXRhYmFzZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2b2lkIERP
TVN0b3JhZ2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFnZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFnZV9n
ZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW0obG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBET01TdG9yYWdlX3JlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQXBwbGljYXRpb25DYWNoZV9n
ZXRGcmFtZXNXaXRoTWFuaWZlc3RzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQXBwbGljYXRpb25DYWNoZV9lbmFibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
X2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgdm9p
ZCBGaWxlU3lzdGVtX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEZpbGVTeXN0ZW1fZGlzYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUo
RklMRV9TWVNURU0pCgogICAgdm9pZCBET01fZ2V0RG9jdW1lbnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcmVxdWVzdENo
aWxkTm9kZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBET01fcXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9xdWVyeVNlbGVjdG9yQWxs
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRE9NX3NldE5vZGVOYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldE5vZGVWYWx1ZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZW1v
dmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRE9NX3NldEF0dHJpYnV0ZVZhbHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldEF0dHJpYnV0ZXNB
c1RleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBET01fcmVtb3ZlQXR0cmlidXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2dldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIERPTV9nZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fc2V0T3V0ZXJIVE1MKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RE9NX3BlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fZ2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9kaXNj
YXJkU2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZXF1ZXN0Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9zZXRJbnNwZWN0
TW9kZUVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBET01faGlnaGxpZ2h0UmVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9oaWdobGlnaHROb2Rl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRE9NX2hpZGVIaWdobGlnaHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01faGlnaGxpZ2h0RnJhbWUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01f
cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3Jlc29sdmVOb2RlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2dl
dEF0dHJpYnV0ZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBET01fbW92ZVRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2VuYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19kaXNh
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgQ1NTX2dldE1hdGNoZWRTdHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldElubGluZVN0
eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0
QWxsU3R5bGVTaGVldHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19nZXRTdHlsZVNo
ZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIENTU19zZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zZXRQcm9wZXJ0eVRl
eHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBDU1NfdG9nZ2xlUHJvcGVydHkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc2V0UnVsZVNlbGVjdG9yKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19z
dGFydFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBU
aW1lbGluZV9zdGFydChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIFRpbWVsaW5lX3N0b3AobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBUaW1lbGluZV9zZXRJbmNsdWRl
TWVtb3J5RGV0YWlscyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERlYnVn
Z2VyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFr
cG9pbnRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZGlzYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5
VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3JlbW92ZUJyZWFr
cG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdGVw
T3Zlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc3RlcE91dChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERl
YnVnZ2VyX3BhdXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2VhcmNoSW5D
b250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0
U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJf
Z2V0RnVuY3Rpb25Mb2NhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3NldFBhdXNlT25FeGNlcHRpb25zKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgRGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERPTURl
YnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVET01CcmVha3Bv
aW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRE9NRGVidWdnZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01E
ZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2VyX3Nl
dFhIUkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQoKICAgIHZvaWQgUHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVy
X2lzU2FtcGxpbmcobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9l
bmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBQcm9maWxlcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfc3RhcnQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9m
aWxlcl9zdG9wKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9n
ZXRQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2NsZWFy
UHJvZmlsZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfY29s
bGVjdEdhcmJhZ2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICB2b2lk
IFdvcmtlcl9zZXRXb3JrZXJJbnNwZWN0aW9uRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9zZW5kTWVzc2Fn
ZVRvV29ya2VyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgV29ya2VyX2Nvbm5lY3RUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9kaXNjb25u
ZWN0RnJvbVdvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKCgogICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCAvKiBB
cHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIgKi8qIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
OwogICAgSW5zcGVjdG9yQ1NTQWdlbnQgLyogQ1NTQ29tbWFuZEhhbmRsZXIgKi8qIG1fY3NzQWdl
bnQ7CiAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQgLyogQ29uc29sZUNvbW1hbmRIYW5kbGVyICov
KiBtX2NvbnNvbGVBZ2VudDsKICAgIEluc3BlY3RvckRPTUFnZW50IC8qIERPTUNvbW1hbmRIYW5k
bGVyICovKiBtX2RvbUFnZW50OwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAg
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCAvKiBET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyICov
KiBtX2RvbURlYnVnZ2VyQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgLyogRE9NU3RvcmFnZUNvbW1hbmRIYW5k
bGVyICovKiBtX2RvbVN0b3JhZ2VBZ2VudDsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAg
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCAvKiBEYXRhYmFzZUNvbW1hbmRIYW5kbGVyICovKiBtX2Rh
dGFiYXNlQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgLyogRGVidWdn
ZXJDb21tYW5kSGFuZGxlciAqLyogbV9kZWJ1Z2dlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgIEluc3BlY3Rv
ckZpbGVTeXN0ZW1BZ2VudCAvKiBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIgKi8qIG1fZmlsZVN5
c3RlbUFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQoKICAgIEluc3BlY3RvckluZGV4ZWREQkFnZW50IC8qIEluZGV4ZWREQkNv
bW1hbmRIYW5kbGVyICovKiBtX2luZGV4ZWREQkFnZW50OwojZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCgogICAgSW5zcGVjdG9yQWdlbnQgLyogSW5zcGVjdG9yQ29tbWFuZEhhbmRs
ZXIgKi8qIG1faW5zcGVjdG9yQWdlbnQ7CiAgICBJbnNwZWN0b3JNZW1vcnlBZ2VudCAvKiBNZW1v
cnlDb21tYW5kSGFuZGxlciAqLyogbV9tZW1vcnlBZ2VudDsKICAgIEluc3BlY3RvclJlc291cmNl
QWdlbnQgLyogTmV0d29ya0NvbW1hbmRIYW5kbGVyICovKiBtX25ldHdvcmtBZ2VudDsKICAgIElu
c3BlY3RvclBhZ2VBZ2VudCAvKiBQYWdlQ29tbWFuZEhhbmRsZXIgKi8qIG1fcGFnZUFnZW50Owoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dCAvKiBQcm9maWxlckNvbW1hbmRIYW5kbGVyICovKiBtX3Byb2ZpbGVyQWdlbnQ7CiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQg
LyogUnVudGltZUNvbW1hbmRIYW5kbGVyICovKiBtX3J1bnRpbWVBZ2VudDsKICAgIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQgLyogVGltZWxpbmVDb21tYW5kSGFuZGxlciAqLyogbV90aW1lbGluZUFn
ZW50OwojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgSW5zcGVjdG9yV29ya2VyQWdlbnQgLyogV29y
a2VyQ29tbWFuZEhhbmRsZXIgKi8qIG1fd29ya2VyQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoV09S
S0VSUykKCgogICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzKTsKICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCog
b2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9ycyk7CiAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOwogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CiAgICB2b2lkIHNlbmRSZXNwb25zZShs
b25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpOwoKfTsKCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpJbnNwZWN0b3JfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5zcGVjdG9yIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckFnZW50LT5lbmFibGUoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIklu
c3BlY3Rvci5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Okluc3BlY3Rvcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5zcGVjdG9yIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kaXNhYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJJbnNwZWN0b3IuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TWVtb3J5X2dldERPTU5vZGVDb3VudChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bWVtb3J5QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk1lbW9yeSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBv
dXRfZG9tR3JvdXBzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gb3V0X3N0cmluZ3MgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fbWVtb3J5QWdlbnQtPmdldERPTU5vZGVDb3VudCgmZXJyb3IsIG91dF9kb21Hcm91
cHMsIG91dF9zdHJpbmdzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiZG9tR3Jv
dXBzIiwgb3V0X2RvbUdyb3Vwcyk7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0cmluZ3Mi
LCBvdXRfc3RyaW5ncyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiTWVtb3J5LmdldERPTU5vZGVDb3VudCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9lbmFibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Bh
Z2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPmVuYWJsZSgmZXJy
b3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
UGFnZS5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5kaXNhYmxlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpQYWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF9pZGVudGlmaWVyID0gIiI7
CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdFNvdXJjZSA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJzY3JpcHRTb3VyY2UiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPmFk
ZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9zY3JpcHRTb3VyY2UsICZvdXRfaWRl
bnRpZmllcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZGVudGlmaWVyIiwg
b3V0X2lkZW50aWZpZXIpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIlBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIpLCBwcm90b2NvbEVycm9y
cywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9y
ZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9pZGVudGlmaWVyID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImlkZW50aWZpZXIiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9w
YWdlQWdlbnQtPnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9pZGVudGlm
aWVyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IlBhZ2UucmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9yZWxvYWQo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwogICAgYm9vbCBpZ25vcmVDYWNoZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2ln
bm9yZUNhY2hlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpZ25vcmVDYWNoZSIs
ICZpZ25vcmVDYWNoZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHNj
cmlwdFRvRXZhbHVhdGVPbkxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3Nj
cmlwdFRvRXZhbHVhdGVPbkxvYWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2Ny
aXB0VG9FdmFsdWF0ZU9uTG9hZCIsICZzY3JpcHRUb0V2YWx1YXRlT25Mb2FkX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX3BhZ2VBZ2VudC0+cmVsb2FkKCZlcnJvciwgaWdub3JlQ2FjaGVfdmFsdWVGb3Vu
ZCA/ICZpbl9pZ25vcmVDYWNoZSA6IDAsIHNjcmlwdFRvRXZhbHVhdGVPbkxvYWRfdmFsdWVGb3Vu
ZCA/ICZpbl9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkIDogMCk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQYWdlLnJlbG9hZCIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFn
ZV9uYXZpZ2F0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgInVybCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3BhZ2VBZ2VudC0+bmF2aWdhdGUoJmVycm9yLCBpbl91
cmwpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
UGFnZS5uYXZpZ2F0ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRDb29raWVzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2Nvb2tpZXMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBTdHJpbmcgb3V0X2Nvb2tpZXNTdHJpbmcgPSAiIjsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX3BhZ2VBZ2VudC0+Z2V0Q29va2llcygmZXJyb3IsIG91dF9jb29raWVzLCAmb3V0
X2Nvb2tpZXNTdHJpbmcpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb29raWVz
Iiwgb3V0X2Nvb2tpZXMpOwogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjb29raWVzU3RyaW5n
Iiwgb3V0X2Nvb2tpZXNTdHJpbmcpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZ2V0Q29va2llcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9kZWxldGVDb29r
aWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX2Nvb2tpZU5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAiY29va2llTmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9k
b21haW4gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZG9tYWluIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fcGFnZUFnZW50LT5kZWxldGVDb29raWUoJmVycm9yLCBpbl9jb29raWVOYW1lLCBpbl9kb21h
aW4pOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
UGFnZS5kZWxldGVDb29raWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZ2V0UmVzb3VyY2VUcmVlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9mcmFtZVRy
ZWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5n
ZXRSZXNvdXJjZVRyZWUoJmVycm9yLCBvdXRfZnJhbWVUcmVlKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoImZyYW1lVHJlZSIsIG91dF9mcmFtZVRyZWUpOwogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2UuZ2V0UmVzb3VyY2VUcmVl
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQYWdlX2dldFJlc291cmNlQ29udGVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2NvbnRlbnQgPSAiIjsKICAg
IGJvb2wgb3V0X2Jhc2U2NEVuY29kZWQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdlbnQtPmdldFJlc291cmNlQ29u
dGVudCgmZXJyb3IsIGluX2ZyYW1lSWQsIGluX3VybCwgJm91dF9jb250ZW50LCAmb3V0X2Jhc2U2
NEVuY29kZWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygiY29udGVudCIsIG91
dF9jb250ZW50KTsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oImJhc2U2NEVuY29kZWQiLCBv
dXRfYmFzZTY0RW5jb2RlZCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiUGFnZS5nZXRSZXNvdXJjZUNvbnRlbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2VhcmNo
SW5SZXNvdXJjZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXJsIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3F1ZXJ5ID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgInF1ZXJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBj
YXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fY2FzZVNlbnNpdGl2
ZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiY2FzZVNlbnNpdGl2ZSIsICZjYXNl
U2Vuc2l0aXZlX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaXNSZWdl
eF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2lzUmVnZXggPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgImlzUmVnZXgiLCAmaXNSZWdleF92YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9wYWdlQWdlbnQtPnNlYXJjaEluUmVzb3VyY2UoJmVycm9yLCBpbl9mcmFtZUlkLCBpbl91cmws
IGluX3F1ZXJ5LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6
IDAsIGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2VhcmNo
SW5SZXNvdXJjZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZWFyY2hJblJlc291cmNlcyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQ
YWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidGV4dCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5k
ID0gZmFsc2U7CiAgICBib29sIGluX2Nhc2VTZW5zaXRpdmUgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgImNhc2VTZW5zaXRpdmUiLCAmY2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgYm9vbCBpbl9pc1JlZ2V4ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpc1Jl
Z2V4IiwgJmlzUmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZWFyY2hJblJl
c291cmNlcygmZXJyb3IsIGluX3RleHQsIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA/ICZpbl9j
YXNlU2Vuc2l0aXZlIDogMCwgaXNSZWdleF92YWx1ZUZvdW5kID8gJmluX2lzUmVnZXggOiAwLCBv
dXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYg
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgicmVzdWx0Iiwgb3V0
X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiUGFnZS5zZWFyY2hJblJlc291cmNlcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZXREb2N1bWVudENvbnRl
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9odG1sID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImh0bWwiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wYWdlQWdl
bnQtPnNldERvY3VtZW50Q29udGVudCgmZXJyb3IsIGluX2ZyYW1lSWQsIGluX2h0bWwpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUGFnZS5zZXRE
b2N1bWVudENvbnRlbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0U2NyZWVuU2l6ZU92ZXJyaWRlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IGludCBpbl93aWR0aCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ3aWR0aCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9oZWlnaHQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCAiaGVpZ2h0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5zZXRTY3JlZW5TaXplT3Zl
cnJpZGUoJmVycm9yLCBpbl93aWR0aCwgaW5faGVpZ2h0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlBhZ2Uuc2V0U2NyZWVuU2l6ZU92ZXJyaWRl
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpSdW50aW1lX2V2YWx1YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9ydW50aW1l
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRpbWUgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9y
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYm9vbCBvdXRfd2FzVGhyb3du
ID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGlu
X29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdyb3Vw
IiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5j
bHVkZUNvbW1hbmRMaW5lQVBJID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNs
dWRlQ29tbWFuZExpbmVBUEkiLCAmaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc192YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBib29sIGluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnMgPSBnZXRCb29s
ZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImRvTm90UGF1c2VPbkV4Y2VwdGlvbnMiLCAmZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29s
IGZyYW1lSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJhbWVJZCIsICZmcmFtZUlkX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID0g
ZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9ydW50aW1lQWdlbnQtPmV2YWx1YXRlKCZlcnJvciwgaW5fZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIGluY2x1ZGVDb21tYW5kTGlu
ZUFQSV92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVDb21tYW5kTGluZUFQSSA6IDAsIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNfdmFsdWVGb3VuZCA/ICZpbl9kb05vdFBhdXNlT25FeGNlcHRpb25zIDog
MCwgZnJhbWVJZF92YWx1ZUZvdW5kID8gJmluX2ZyYW1lSWQgOiAwLCByZXR1cm5CeVZhbHVlX3Zh
bHVlRm91bmQgPyAmaW5fcmV0dXJuQnlWYWx1ZSA6IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhy
b3duKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1
bHQpOwogICAgICAgIGlmIChvdXRfd2FzVGhyb3duKQogICAgICAgICAgICByZXN1bHQtPnNldEJv
b2xlYW4oIndhc1Rocm93biIsIG91dF93YXNUaHJvd24pOwogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlJ1bnRpbWUuZXZhbHVhdGUiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1
bnRpbWVfY2FsbEZ1bmN0aW9uT24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Jlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBib29sIG91dF93YXNUaHJvd24gPSBmYWxz
ZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fZnVuY3Rpb25EZWNsYXJhdGlvbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
ICJmdW5jdGlvbkRlY2xhcmF0aW9uIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBh
cmd1bWVudHNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBp
bl9hcmd1bWVudHMgPSBnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsICJhcmd1bWVudHMiLCAm
YXJndW1lbnRzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJu
QnlWYWx1ZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBn
ZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlW
YWx1ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9ydW50aW1lQWdlbnQtPmNhbGxGdW5jdGlvbk9uKCZl
cnJvciwgaW5fb2JqZWN0SWQsIGluX2Z1bmN0aW9uRGVjbGFyYXRpb24sIGFyZ3VtZW50c192YWx1
ZUZvdW5kID8gJmluX2FyZ3VtZW50cyA6IDAsIHJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCA/ICZp
bl9yZXR1cm5CeVZhbHVlIDogMCwgb3V0X3Jlc3VsdCwgJm91dF93YXNUaHJvd24pOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICAgICAg
aWYgKG91dF93YXNUaHJvd24pCiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigid2FzVGhy
b3duIiwgb3V0X3dhc1Rocm93bik7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiUnVudGltZS5jYWxsRnVuY3Rpb25PbiIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9n
ZXRQcm9wZXJ0aWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X3Jlc3VsdCA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIG93blByb3BlcnRpZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9v
bCBpbl9vd25Qcm9wZXJ0aWVzID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJvd25Q
cm9wZXJ0aWVzIiwgJm93blByb3BlcnRpZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFn
ZW50LT5nZXRQcm9wZXJ0aWVzKCZlcnJvciwgaW5fb2JqZWN0SWQsIG93blByb3BlcnRpZXNfdmFs
dWVGb3VuZCA/ICZpbl9vd25Qcm9wZXJ0aWVzIDogMCwgb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlJ1bnRpbWUuZ2V0UHJvcGVydGll
cyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UnVudGltZV9yZWxlYXNlT2JqZWN0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9y
dW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlJ1bnRpbWUg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9v
YmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX3J1bnRpbWVBZ2VudC0+cmVsZWFzZU9iamVjdCgmZXJyb3IsIGluX29iamVjdElkKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlJ1bnRp
bWUucmVsZWFzZU9iamVjdCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXAobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgIm9iamVjdEdyb3VwIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcnVudGltZUFnZW50LT5yZWxlYXNlT2Jq
ZWN0R3JvdXAoJmVycm9yLCBpbl9vYmplY3RHcm91cCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJSdW50aW1lLnJlbGVhc2VPYmplY3RHcm91cCIp
LCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6UnVudGltZV9ydW4obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9ydW50aW1lQWdlbnQtPnJ1bigmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUnVudGltZS5ydW4iKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNv
bGVfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29u
c29sZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2Rp
c2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2NvbnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
Q29uc29sZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jb25zb2xl
QWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9jbGVh
ck1lc3NhZ2VzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29u
c29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDb25zb2xlLmNsZWFyTWVzc2FnZXMiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNvbnNvbGVfc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2NvbnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29s
ZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9l
bmFibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fY29uc29sZUFnZW50LT5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCgmZXJyb3IsIGluX2Vu
YWJsZWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiQ29uc29sZS5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9hZGRJ
bnNwZWN0ZWROb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29uc29sZUFnZW50LT5hZGRJbnNwZWN0
ZWROb2RlKCZlcnJvciwgaW5fbm9kZUlkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNvbnNvbGUuYWRkSW5zcGVjdGVkTm9kZSIpLCBwcm90b2Nv
bEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
TmV0d29ya19lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9uZXR3b3JrQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5lbmFibGUiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdv
cmtfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX25l
dHdvcmtBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5kaXNhYmxlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3Jr
X3NldFVzZXJBZ2VudE92ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91c2VyQWdlbnQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXNlckFnZW50IiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0
d29ya0FnZW50LT5zZXRVc2VyQWdlbnRPdmVycmlkZSgmZXJyb3IsIGluX3VzZXJBZ2VudCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3Jr
LnNldFVzZXJBZ2VudE92ZXJyaWRlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRl
cnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5faGVhZGVycyA9IGdldE9i
amVjdChwYXJhbXNDb250YWluZXJQdHIsICJoZWFkZXJzIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0Fn
ZW50LT5zZXRFeHRyYUhUVFBIZWFkZXJzKCZlcnJvciwgaW5faGVhZGVycyk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLnNldEV4dHJh
SFRUUEhlYWRlcnMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZ2V0UmVzcG9uc2VCb2R5KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRf
Ym9keSA9ICIiOwogICAgYm9vbCBvdXRfYmFzZTY0RW5jb2RlZCA9IGZhbHNlOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFN0cmluZyBpbl9yZXF1ZXN0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAicmVxdWVzdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5nZXRSZXNwb25zZUJvZHko
JmVycm9yLCBpbl9yZXF1ZXN0SWQsICZvdXRfYm9keSwgJm91dF9iYXNlNjRFbmNvZGVkKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImJvZHkiLCBvdXRfYm9keSk7CiAgICAgICAg
cmVzdWx0LT5zZXRCb29sZWFuKCJiYXNlNjRFbmNvZGVkIiwgb3V0X2Jhc2U2NEVuY29kZWQpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk5ldHdvcmsu
Z2V0UmVzcG9uc2VCb2R5IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9u
ZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNl
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fbmV0d29ya0FnZW50LT5jYW5DbGVhckJyb3dzZXJDYWNoZSgmZXJyb3Is
ICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkg
JiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQi
LCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJOZXR3b3JrLmNhbkNsZWFyQnJvd3NlckNhY2hlIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2Ns
ZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fbmV0d29ya0FnZW50LT5jbGVhckJyb3dzZXJDYWNoZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiTmV0d29yay5jbGVhckJyb3dz
ZXJDYWNoZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29raWVzKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9uZXR3b3Jr
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fbmV0d29ya0FnZW50LT5jYW5DbGVhckJyb3dzZXJDb29raWVzKCZlcnJvciwgJm91
dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91
dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIk5ldHdvcmsuY2FuQ2xlYXJCcm93c2VyQ29va2llcyIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jbGVh
ckJyb3dzZXJDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9y
U3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fbmV0d29ya0FnZW50LT5jbGVhckJyb3dzZXJDb29raWVzKCZlcnJvcik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJOZXR3b3JrLmNsZWFyQnJv
d3NlckNvb2tpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0Q2FjaGVEaXNhYmxlZChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBib29sIGluX2NhY2hlRGlzYWJsZWQgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwg
ImNhY2hlRGlzYWJsZWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPnNldENhY2hlRGlzYWJs
ZWQoJmVycm9yLCBpbl9jYWNoZURpc2FibGVkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIk5ldHdvcmsuc2V0Q2FjaGVEaXNhYmxlZCIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RhdGFiYXNlQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRhdGFiYXNlIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RhdGFiYXNlQWdlbnQtPmVuYWJsZSgm
ZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZW5hYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9kaXNhYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5kaXNhYmxl
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEYXRhYmFzZS5kaXNhYmxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxl
TmFtZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RhdGFiYXNlQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRhdGFiYXNlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF90YWJsZU5hbWVzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9kYXRhYmFzZUlkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImRhdGFiYXNlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kYXRhYmFz
ZUFnZW50LT5nZXREYXRhYmFzZVRhYmxlTmFtZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBvdXRf
dGFibGVOYW1lcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInRhYmxlTmFtZXMi
LCBvdXRfdGFibGVOYW1lcyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGF0YWJhc2UuZ2V0RGF0YWJhc2VUYWJsZU5hbWVzIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRh
YmFzZV9leGVjdXRlU1FMKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc3VjY2VzcyA9IGZhbHNlOwogICAgaW50IG91dF90
cmFuc2FjdGlvbklkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJkYXRhYmFzZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgU3RyaW5nIGluX3F1ZXJ5ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
InF1ZXJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+ZXhlY3V0ZVNRTCgmZXJyb3IsIGlu
X2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCAmb3V0X3N1Y2Nlc3MsICZvdXRfdHJhbnNhY3Rpb25JZCk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigic3VjY2VzcyIsIG91dF9zdWNjZXNz
KTsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigidHJhbnNhY3Rpb25JZCIsIG91dF90cmFuc2Fj
dGlvbklkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJEYXRhYmFzZS5leGVjdXRlU1FMIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCiNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9lbmFibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2lu
ZGV4ZWREQkFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVk
REIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5kZXhlZERCQWdl
bnQtPmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiSW5kZXhlZERCLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX2Rpc2Fi
bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2luZGV4ZWREQkFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJ
bmRleGVkREIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5kZXhl
ZERCQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5kaXNhYmxlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVk
REJfcmVxdWVzdERhdGFiYXNlTmFtZXNGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5k
ZXhlZERCQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluZGV4ZWRE
QiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3Jl
cXVlc3RJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJyZXF1ZXN0SWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1faW5kZXhlZERCQWdlbnQtPnJlcXVl
c3REYXRhYmFzZU5hbWVzRm9yRnJhbWUoJmVycm9yLCBpbl9yZXF1ZXN0SWQsIGluX2ZyYW1lSWQp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiSW5k
ZXhlZERCLnJlcXVlc3REYXRhYmFzZU5hbWVzRm9yRnJhbWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9y
ZXF1ZXN0RGF0YWJhc2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9yZXF1ZXN0SWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAicmVxdWVzdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJh
bWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9kYXRhYmFzZU5hbWUg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZGF0YWJhc2VOYW1lIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1faW5kZXhlZERCQWdlbnQtPnJlcXVlc3REYXRhYmFzZSgmZXJyb3IsIGluX3JlcXVlc3RJZCwg
aW5fZnJhbWVJZCwgaW5fZGF0YWJhc2VOYW1lKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkluZGV4ZWREQi5yZXF1ZXN0RGF0YWJhc2UiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2VfZW5hYmxl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9kb21TdG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TVN0b3JhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3Rv
cmFnZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTVN0b3JhZ2UuZW5hYmxlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9y
YWdlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9kb21TdG9yYWdlQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTVN0b3JhZ2UuZGlzYWJsZSIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RE9NU3RvcmFnZV9nZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
T01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IG91dF9lbnRyaWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGludCBpbl9zdG9yYWdlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAi
c3RvcmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5nZXRET01TdG9yYWdlRW50
cmllcygmZXJyb3IsIGluX3N0b3JhZ2VJZCwgb3V0X2VudHJpZXMpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJlbnRyaWVzIiwgb3V0X2VudHJpZXMpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTVN0b3JhZ2UuZ2V0RE9NU3RvcmFn
ZUVudHJpZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9v
bCBvdXRfc3VjY2VzcyA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9zdG9yYWdlSWQg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAic3RvcmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgU3RyaW5nIGluX2tleSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
ICJrZXkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21TdG9yYWdl
QWdlbnQtPnNldERPTVN0b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3RvcmFnZUlkLCBpbl9rZXksIGlu
X3ZhbHVlLCAmb3V0X3N1Y2Nlc3MpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4o
InN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRE9NU3RvcmFnZS5zZXRET01TdG9yYWdlSXRlbSIpLCBwcm90b2Nv
bEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
RE9NU3RvcmFnZV9yZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9t
U3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01TdG9y
YWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9zdWNjZXNzID0g
ZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3N0b3JhZ2VJZCA9IGdldEludChwYXJhbXND
b250YWluZXJQdHIsICJzdG9yYWdlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fa2V5ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImtleSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RvbVN0b3JhZ2VBZ2VudC0+cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oJmVycm9yLCBpbl9zdG9y
YWdlSWQsIGluX2tleSwgJm91dF9zdWNjZXNzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRC
b29sZWFuKCJzdWNjZXNzIiwgb3V0X3N1Y2Nlc3MpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTVN0b3JhZ2UucmVtb3ZlRE9NU3RvcmFnZUl0ZW0i
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYXBwbGlj
YXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBs
aWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IG91dF9mcmFtZUlkcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cygm
ZXJyb3IsIG91dF9mcmFtZUlkcyk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImZy
YW1lSWRzIiwgb3V0X2ZyYW1lSWRzKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJBcHBsaWNhdGlvbkNhY2hlLmdldEZyYW1lc1dpdGhNYW5pZmVzdHMi
KSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2FjaGUgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fYXBwbGljYXRpb25DYWNoZUFn
ZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkFwcGxpY2F0aW9uQ2FjaGUuZW5hYmxlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNh
dGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2FwcGxp
Y2F0aW9uQ2FjaGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQXBw
bGljYXRpb25DYWNoZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91
dF9tYW5pZmVzdFVSTCA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9hcHBs
aWNhdGlvbkNhY2hlQWdlbnQtPmdldE1hbmlmZXN0Rm9yRnJhbWUoJmVycm9yLCBpbl9mcmFtZUlk
LCAmb3V0X21hbmlmZXN0VVJMKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm1h
bmlmZXN0VVJMIiwgb3V0X21hbmlmZXN0VVJMKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJBcHBsaWNhdGlvbkNhY2hlLmdldE1hbmlmZXN0Rm9yRnJh
bWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1l
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2FjaGUgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9hcHBsaWNhdGlv
bkNhY2hlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJp
bmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50LT5nZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoJmVycm9yLCBpbl9mcmFtZUlkLCBvdXRfYXBwbGljYXRpb25DYWNoZSk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJhcHBsaWNhdGlvbkNhY2hlIiwgb3V0X2FwcGxpY2F0
aW9uQ2FjaGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPmVu
YWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiRmlsZVN5c3RlbS5lbmFibGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkZpbGVTeXN0ZW1fZGlzYWJsZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
ZmlsZVN5c3RlbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJGaWxl
U3lzdGVtIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2ZpbGVTeXN0
ZW1BZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRmlsZVN5c3RlbS5kaXNhYmxlIiksIHByb3RvY29sRXJyb3Jz
LCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2dldERvY3VtZW50KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcm9vdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+Z2V0RG9jdW1lbnQoJmVycm9y
LCBvdXRfcm9vdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyb290Iiwgb3V0
X3Jvb3QpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTS5nZXREb2N1bWVudCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlcXVlc3RDaGlsZE5vZGVzKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQg
aW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAg
ICBtX2RvbUFnZW50LT5yZXF1ZXN0Q2hpbGROb2RlcygmZXJyb3IsIGluX25vZGVJZCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVxdWVz
dENoaWxkTm9kZXMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9xdWVyeVNlbGVjdG9yKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJu
b2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VsZWN0b3IiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21B
Z2VudC0+cXVlcnlTZWxlY3RvcigmZXJyb3IsIGluX25vZGVJZCwgaW5fc2VsZWN0b3IsICZvdXRf
bm9kZUlkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9u
b2RlSWQpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTS5xdWVyeVNlbGVjdG9yIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcXVlcnlTZWxlY3RvckFsbChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBvdXRfbm9kZUlkcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJ
ZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9zZWxlY3RvciA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzZWxlY3RvciIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50
LT5xdWVyeVNlbGVjdG9yQWxsKCZlcnJvciwgaW5fbm9kZUlkLCBpbl9zZWxlY3Rvciwgb3V0X25v
ZGVJZHMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJub2RlSWRzIiwgb3V0X25v
ZGVJZHMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRPTS5xdWVyeVNlbGVjdG9yQWxsIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fc2V0Tm9kZU5hbWUobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGludCBvdXRfbm9kZUlkID0g
MDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9uYW1l
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm5hbWUiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21B
Z2VudC0+c2V0Tm9kZU5hbWUoJmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUsICZvdXRfbm9kZUlk
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9ub2RlSWQp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5z
ZXROb2RlTmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9
IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
dmFsdWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+c2V0Tm9kZVZhbHVlKCZlcnJvciwgaW5fbm9k
ZUlkLCBpbl92YWx1ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJET00uc2V0Tm9kZVZhbHVlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVtb3ZlTm9kZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
aW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kb21BZ2VudC0+cmVtb3ZlTm9kZSgmZXJyb3IsIGluX25vZGVJZCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVtb3ZlTm9k
ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3NldEF0dHJpYnV0ZVZhbHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
b21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIFN0cmluZyBpbl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm5hbWUi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+c2V0QXR0
cmlidXRlVmFsdWUoJmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUsIGluX3ZhbHVlKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5zZXRBdHRy
aWJ1dGVWYWx1ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEF0dHJpYnV0ZXNBc1RleHQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9u
b2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAidGV4dCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbmFtZV92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fbmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJuYW1lIiwgJm5hbWVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldEF0
dHJpYnV0ZXNBc1RleHQoJmVycm9yLCBpbl9ub2RlSWQsIGluX3RleHQsIG5hbWVfdmFsdWVGb3Vu
ZCA/ICZpbl9uYW1lIDogMCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJET00uc2V0QXR0cmlidXRlc0FzVGV4dCIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92
ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIs
ICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fbmFtZSA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJuYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQt
PnJlbW92ZUF0dHJpYnV0ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFtZSk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVtb3ZlQXR0cmli
dXRlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01fZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9N
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG91dF9saXN0ZW5lcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kb21BZ2VudC0+Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKCZlcnJvciwgaW5f
bm9kZUlkLCBvdXRfbGlzdGVuZXJzKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
bGlzdGVuZXJzIiwgb3V0X2xpc3RlbmVycyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX2dldE91dGVySFRNTChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgU3RyaW5nIG91dF9vdXRlckhUTUwgPSAiIjsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBp
bnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RvbUFnZW50LT5nZXRPdXRlckhUTUwoJmVycm9yLCBpbl9ub2RlSWQsICZvdXRfb3V0
ZXJIVE1MKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm91dGVySFRNTCIsIG91
dF9vdXRlckhUTUwpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRPTS5nZXRPdXRlckhUTUwiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRPdXRlckhUTUwobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGlu
dCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX291dGVySFRNTCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsICJvdXRlckhUTUwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+c2V0T3V0
ZXJIVE1MKCZlcnJvciwgaW5fbm9kZUlkLCBpbl9vdXRlckhUTUwpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLnNldE91dGVySFRNTCIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RE9NX3BlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfc2VhcmNoSWQgPSAiIjsKICAgIGludCBvdXRfcmVz
dWx0Q291bnQgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5wZXJm
b3JtU2VhcmNoKCZlcnJvciwgaW5fcXVlcnksICZvdXRfc2VhcmNoSWQsICZvdXRfcmVzdWx0Q291
bnQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2VhcmNoSWQiLCBvdXRfc2Vh
cmNoSWQpOwogICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJyZXN1bHRDb3VudCIsIG91dF9yZXN1
bHRDb3VudCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRE9NLnBlcmZvcm1TZWFyY2giKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRTZWFyY2hSZXN1bHRzKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IG91dF9ub2RlSWRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9zZWFyY2hJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJzZWFyY2hJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9mcm9tSW5k
ZXggPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiZnJvbUluZGV4IiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgaW50IGluX3RvSW5kZXggPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAidG9JbmRleCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5nZXRTZWFyY2hSZXN1bHRzKCZlcnJv
ciwgaW5fc2VhcmNoSWQsIGluX2Zyb21JbmRleCwgaW5fdG9JbmRleCwgb3V0X25vZGVJZHMpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICByZXN1bHQtPnNldEFycmF5KCJub2RlSWRzIiwgb3V0X25vZGVJZHMpOwog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5nZXRT
ZWFyY2hSZXN1bHRzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fZGlzY2FyZFNlYXJjaFJlc3VsdHMobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmlu
ZyBpbl9zZWFyY2hJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzZWFyY2hJZCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2RvbUFnZW50LT5kaXNjYXJkU2VhcmNoUmVzdWx0cygmZXJyb3IsIGluX3Nl
YXJjaElkKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRPTS5kaXNjYXJkU2VhcmNoUmVzdWx0cyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlcXVlc3ROb2RlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25v
ZGVJZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnJl
cXVlc3ROb2RlKCZlcnJvciwgaW5fb2JqZWN0SWQsICZvdXRfbm9kZUlkKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9ub2RlSWQpOwogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5yZXF1ZXN0Tm9kZSIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RE9NX3NldEluc3BlY3RNb2RlRW5hYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9t
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVkID0gZ2V0
Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgYm9vbCBoaWdobGlnaHRDb25maWdfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaW5faGlnaGxpZ2h0Q29uZmlnID0gZ2V0T2JqZWN0KHBhcmFt
c0NvbnRhaW5lclB0ciwgImhpZ2hsaWdodENvbmZpZyIsICZoaWdobGlnaHRDb25maWdfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPnNldEluc3BlY3RNb2RlRW5hYmxlZCgmZXJyb3IsIGlu
X2VuYWJsZWQsIGhpZ2hsaWdodENvbmZpZ192YWx1ZUZvdW5kID8gJmluX2hpZ2hsaWdodENvbmZp
ZyA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRE9NLnNldEluc3BlY3RNb2RlRW5hYmxlZCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZ2hsaWdodFJlY3Qo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGludCBpbl94ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIngiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5feSA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ5
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3dpZHRoID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgIndpZHRoIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGlu
X2hlaWdodCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJoZWlnaHQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBib29sIGNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGluX2NvbG9yID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0
ciwgImNvbG9yIiwgJmNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgb3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGluX291dGxpbmVDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJv
dXRsaW5lQ29sb3IiLCAmb3V0bGluZUNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50
LT5oaWdobGlnaHRSZWN0KCZlcnJvciwgaW5feCwgaW5feSwgaW5fd2lkdGgsIGluX2hlaWdodCwg
Y29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb2xvciA6IDAsIG91dGxpbmVDb2xvcl92YWx1ZUZvdW5k
ID8gJmluX291dGxpbmVDb2xvciA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmhpZ2hsaWdodFJlY3QiKSwgcHJvdG9jb2xFcnJvcnMs
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdo
bGlnaHROb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
Im5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX2hpZ2hsaWdodENvbmZpZyA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJo
aWdobGlnaHRDb25maWciLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0Tm9kZSgmZXJy
b3IsIGluX25vZGVJZCwgaW5faGlnaGxpZ2h0Q29uZmlnKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTS5oaWdobGlnaHROb2RlIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01faGlkZUhpZ2hsaWdodChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9k
b21BZ2VudC0+aGlkZUhpZ2hsaWdodCgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRE9NLmhpZGVIaWdobGlnaHQiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRP
TV9oaWdobGlnaHRGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
Y29udGVudENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX2NvbnRlbnRDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJjb250
ZW50Q29sb3IiLCAmY29udGVudENvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgY29udGVudE91dGxpbmVDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb250ZW50T3V0bGluZUNvbG9yID0gZ2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lclB0ciwgImNvbnRlbnRPdXRsaW5lQ29sb3IiLCAmY29udGVudE91dGxpbmVD
b2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0RnJhbWUoJmVycm9y
LCBpbl9mcmFtZUlkLCBjb250ZW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb250ZW50Q29sb3Ig
OiAwLCBjb250ZW50T3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29udGVudE91dGxpbmVD
b2xvciA6IDApOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRE9NLmhpZ2hsaWdodEZyYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBp
bnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3BhdGggPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAicGF0aCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbUFnZW50LT5w
dXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoJmVycm9yLCBpbl9wYXRoLCAmb3V0X25vZGVJZCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucHVzaE5v
ZGVCeVBhdGhUb0Zyb250ZW5kIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVzb2x2ZU5vZGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG91dF9vYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBvYmplY3RHcm91cF92YWx1ZUZvdW5kID0g
ZmFsc2U7CiAgICBTdHJpbmcgaW5fb2JqZWN0R3JvdXAgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAib2JqZWN0R3JvdXAiLCAmb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
ZG9tQWdlbnQtPnJlc29sdmVOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBvYmplY3RHcm91cF92YWx1
ZUZvdW5kID8gJmluX29iamVjdEdyb3VwIDogMCwgb3V0X29iamVjdCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJvYmplY3QiLCBvdXRfb2JqZWN0KTsKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00ucmVzb2x2ZU5vZGUiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9nZXRBdHRyaWJ1dGVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9hdHRyaWJ1dGVzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQt
PmdldEF0dHJpYnV0ZXMoJmVycm9yLCBpbl9ub2RlSWQsIG91dF9hdHRyaWJ1dGVzKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIG91dF9hdHRyaWJ1dGVzKTsK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJET00uZ2V0
QXR0cmlidXRlcyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX21vdmVUbyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9t
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3RhcmdldE5vZGVJZCA9IGdldEludChw
YXJhbXNDb250YWluZXJQdHIsICJ0YXJnZXROb2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGluc2VydEJlZm9yZU5vZGVJZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQg
aW5faW5zZXJ0QmVmb3JlTm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImluc2Vy
dEJlZm9yZU5vZGVJZCIsICZpbnNlcnRCZWZvcmVOb2RlSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
ZG9tQWdlbnQtPm1vdmVUbygmZXJyb3IsIGluX25vZGVJZCwgaW5fdGFyZ2V0Tm9kZUlkLCBpbnNl
cnRCZWZvcmVOb2RlSWRfdmFsdWVGb3VuZCA/ICZpbl9pbnNlcnRCZWZvcmVOb2RlSWQgOiAwLCAm
b3V0X25vZGVJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYm
ICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBv
dXRfbm9kZUlkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJET00ubW92ZVRvIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5lbmFibGUiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkNTU19kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJv
cjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50
LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJDU1MuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldE1hdGNoZWRTdHlsZXNG
b3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9tYXRjaGVkQ1NTUnVsZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9wc2V1ZG9FbGVtZW50
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
b3V0X2luaGVyaXRlZCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgZm9yY2VkUHNldWRvQ2xhc3Nlc192YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluX2ZvcmNlZFBzZXVkb0Ns
YXNzZXMgPSBnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsICJmb3JjZWRQc2V1ZG9DbGFzc2Vz
IiwgJmZvcmNlZFBzZXVkb0NsYXNzZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgYm9vbCBpbmNsdWRlUHNldWRvX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5j
bHVkZVBzZXVkbyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaW5jbHVkZVBzZXVk
byIsICZpbmNsdWRlUHNldWRvX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgaW5jbHVkZUluaGVyaXRlZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2luY2x1
ZGVJbmhlcml0ZWQgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImluY2x1ZGVJbmhl
cml0ZWQiLCAmaW5jbHVkZUluaGVyaXRlZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+
Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIGZvcmNlZFBzZXVkb0Ns
YXNzZXNfdmFsdWVGb3VuZCA/ICZpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzIDogMCwgaW5jbHVkZVBz
ZXVkb192YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVQc2V1ZG8gOiAwLCBpbmNsdWRlSW5oZXJpdGVk
X3ZhbHVlRm91bmQgPyAmaW5faW5jbHVkZUluaGVyaXRlZCA6IDAsIG91dF9tYXRjaGVkQ1NTUnVs
ZXMsIG91dF9wc2V1ZG9FbGVtZW50cywgb3V0X2luaGVyaXRlZCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIC8v
IEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuCiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
bWF0Y2hlZENTU1J1bGVzIiwgb3V0X21hdGNoZWRDU1NSdWxlcyk7CiAgICAgICAgLy8gRklYTUU6
IHN1cHBvcnQgb3B0aW9uYWwgaGVyZS4KICAgICAgICByZXN1bHQtPnNldEFycmF5KCJwc2V1ZG9F
bGVtZW50cyIsIG91dF9wc2V1ZG9FbGVtZW50cyk7CiAgICAgICAgLy8gRklYTUU6IHN1cHBvcnQg
b3B0aW9uYWwgaGVyZS4KICAgICAgICByZXN1bHQtPnNldEFycmF5KCJpbmhlcml0ZWQiLCBvdXRf
aW5oZXJpdGVkKTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJDU1MuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRJbmxpbmVT
dHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfaW5saW5lU3R5bGUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfc3R5bGVBdHRy
aWJ1dGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAg
IG1fY3NzQWdlbnQtPmdldElubGluZVN0eWxlc0Zvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIG91
dF9pbmxpbmVTdHlsZSwgb3V0X3N0eWxlQXR0cmlidXRlcyk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIC8vIEZJ
WE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUuCiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoImlu
bGluZVN0eWxlIiwgb3V0X2lubGluZVN0eWxlKTsKICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBv
cHRpb25hbCBoZXJlLgogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInN0eWxlQXR0cmlidXRlcyIs
IG91dF9zdHlsZUF0dHJpYnV0ZXMpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRJbmxpbmVTdHlsZXNGb3JOb2RlIiksIHByb3RvY29sRXJy
b3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nf
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0X2NvbXB1dGVkU3R5bGUg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJ
ZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGZvcmNlZFBzZXVkb0NsYXNzZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzID0gZ2V0QXJy
YXkocGFyYW1zQ29udGFpbmVyUHRyLCAiZm9yY2VkUHNldWRvQ2xhc3NlcyIsICZmb3JjZWRQc2V1
ZG9DbGFzc2VzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRDb21wdXRlZFN0eWxl
Rm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3Nlc192YWx1ZUZvdW5k
ID8gJmluX2ZvcmNlZFBzZXVkb0NsYXNzZXMgOiAwLCBvdXRfY29tcHV0ZWRTdHlsZSk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbXB1dGVkU3R5bGUiLCBvdXRfY29tcHV0ZWRT
dHlsZSk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
Q1NTLmdldENvbXB1dGVkU3R5bGVGb3JOb2RlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0QWxsU3R5bGVTaGVl
dHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gb3V0
X2hlYWRlcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2Vu
dC0+Z2V0QWxsU3R5bGVTaGVldHMoJmVycm9yLCBvdXRfaGVhZGVycyk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImhlYWRlcnMiLCBvdXRfaGVhZGVycyk7CiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmdldEFsbFN0eWxlU2hlZXRz
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpDU1NfZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlU2hl
ZXQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9zdHlsZVNoZWV0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVTaGVl
dElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fY3NzQWdlbnQtPmdldFN0eWxlU2hlZXQoJmVycm9yLCBpbl9zdHls
ZVNoZWV0SWQsIG91dF9zdHlsZVNoZWV0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInN0eWxlU2hlZXQiLCBvdXRfc3R5bGVTaGVldCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiQ1NTLmdldFN0eWxlU2hlZXQiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNT
U19nZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgU3RyaW5nIG91dF90ZXh0ID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3N0eWxlU2hlZXRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzdHlsZVNo
ZWV0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0U3R5bGVTaGVldFRleHQoJmVycm9yLCBp
bl9zdHlsZVNoZWV0SWQsICZvdXRfdGV4dCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJ0ZXh0Iiwgb3V0X3RleHQpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdHlsZVNoZWV0VGV4dCIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFN0
eWxlU2hlZXRUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgInN0eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9jc3NBZ2VudC0+c2V0U3R5bGVTaGVldFRleHQoJmVycm9yLCBpbl9zdHlsZVNo
ZWV0SWQsIGluX3RleHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ1NTLnNldFN0eWxlU2hlZXRUZXh0IiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0UHJvcGVy
dHlUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxlSWQg
PSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGludCBpbl9wcm9wZXJ0eUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgInByb3BlcnR5SW5kZXgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcg
aW5fdGV4dCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ0ZXh0IiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbl9vdmVyd3JpdGUgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgIm92ZXJ3cml0ZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5zZXRQcm9wZXJ0
eVRleHQoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9wZXJ0eUluZGV4LCBpbl90ZXh0LCBpbl9v
dmVyd3JpdGUsIG91dF9zdHlsZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
dHlsZSIsIG91dF9zdHlsZSk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiQ1NTLnNldFByb3BlcnR5VGV4dCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3RvZ2dsZVByb3Bl
cnR5KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxlSWQgPSBn
ZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl9wcm9wZXJ0eUluZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgInByb3BlcnR5SW5kZXgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluX2Rp
c2FibGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImRpc2FibGUiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9jc3NBZ2VudC0+dG9nZ2xlUHJvcGVydHkoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9w
ZXJ0eUluZGV4LCBpbl9kaXNhYmxlLCBvdXRfc3R5bGUpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQt
PnNldE9iamVjdCgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy50b2dnbGVQcm9wZXJ0eSIpLCBwcm90b2NvbEVy
cm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NT
X3NldFJ1bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3J1bGUgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlu
X3J1bGVJZCA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJydWxlSWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAic2VsZWN0b3IiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+c2V0UnVsZVNl
bGVjdG9yKCZlcnJvciwgaW5fcnVsZUlkLCBpbl9zZWxlY3Rvciwgb3V0X3J1bGUpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicnVsZSIsIG91dF9ydWxlKTsKICAgIH0KICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1Muc2V0UnVsZVNlbGVjdG9y
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpDU1NfYWRkUnVsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3J1bGUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9jb250ZXh0Tm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbnRleHROb2RlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAic2VsZWN0b3IiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+YWRkUnVsZSgmZXJy
b3IsIGluX2NvbnRleHROb2RlSWQsIGluX3NlbGVjdG9yLCBvdXRfcnVsZSk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJydWxlIiwgb3V0X3J1bGUpOwogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5hZGRSdWxlIiksIHByb3RvY29s
RXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpD
U1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfY3NzUHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKCZlcnJvciwgb3V0X2Nzc1Byb3BlcnRpZXMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgb3V0X2Nzc1Byb3BlcnRpZXMpOwogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkNTUy5nZXRTdXBwb3J0ZWRDU1NQ
cm9wZXJ0aWVzIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc3RhcnRTZWxlY3RvclByb2ZpbGVyKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2Nzc0FnZW50LT5zdGFydFNlbGVjdG9yUHJvZmlsZXIo
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkNTUy5zdGFydFNlbGVjdG9yUHJvZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zdG9wU2VsZWN0b3JQ
cm9maWxlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNT
UyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb3V0X3Byb2ZpbGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
Y3NzQWdlbnQtPnN0b3BTZWxlY3RvclByb2ZpbGVyKCZlcnJvciwgb3V0X3Byb2ZpbGUpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicHJvZmlsZSIsIG91dF9wcm9maWxlKTsKICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJDU1Muc3RvcFNl
bGVjdG9yUHJvZmlsZXIiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV90aW1lbGluZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJU
aW1lbGluZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9v
bCBtYXhDYWxsU3RhY2tEZXB0aF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fbWF4Q2Fs
bFN0YWNrRGVwdGggPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibWF4Q2FsbFN0YWNrRGVw
dGgiLCAmbWF4Q2FsbFN0YWNrRGVwdGhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2Vu
dC0+c3RhcnQoJmVycm9yLCBtYXhDYWxsU3RhY2tEZXB0aF92YWx1ZUZvdW5kID8gJmluX21heENh
bGxTdGFja0RlcHRoIDogMCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJUaW1lbGluZS5zdGFydCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6VGltZWxpbmVfc3RvcChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fdGlt
ZWxpbmVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiVGltZWxpbmUg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+
c3RvcCgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiVGltZWxpbmUuc3RvcCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6VGltZWxpbmVfc2V0SW5jbHVkZU1lbW9y
eURldGFpbHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3RpbWVsaW5lQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlRpbWVsaW5lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGluX2VuYWJsZWQgPSBnZXRCb29sZWFuKHBhcmFt
c0NvbnRhaW5lclB0ciwgImVuYWJsZWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV90aW1lbGluZUFnZW50LT5zZXRJ
bmNsdWRlTWVtb3J5RGV0YWlscygmZXJyb3IsIGluX2VuYWJsZWQpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiVGltZWxpbmUuc2V0SW5jbHVkZU1l
bW9yeURldGFpbHMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRl
YnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCop
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBib29sIG91dF9yZXN1bHQgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdl
bnQtPmNhdXNlc1JlY29tcGlsYXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuY2F1c2VzUmVj
b21waWxhdGlvbiIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3VwcG9ydHNOYXRpdmVCcmVha3BvaW50cyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
ZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdn
ZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZh
bHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c3VwcG9ydHNOYXRpdmVCcmVha3BvaW50
cygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRzIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuZW5hYmxlIiksIHBy
b3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5kaXNhYmxlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVi
dWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wg
aW5fYWN0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJhY3RpdmUiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZSgmZXJyb3IsIGluX2Fj
dGl2ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJl
YWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgU3RyaW5nIG91dF9icmVha3BvaW50SWQgPSAiIjsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X2xvY2F0aW9ucyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbGluZU51bWJlciA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJsaW5lTnVtYmVyIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCB1cmxf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJ1cmwiLCAmdXJsX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgdXJsUmVnZXhfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VybFJl
Z2V4ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybFJlZ2V4IiwgJnVybFJlZ2V4
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29sdW1uTnVtYmVyX3Zh
bHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9jb2x1bW5OdW1iZXIgPSBnZXRJbnQocGFyYW1z
Q29udGFpbmVyUHRyLCAiY29sdW1uTnVtYmVyIiwgJmNvbHVtbk51bWJlcl92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbmRpdGlvbl92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBTdHJpbmcgaW5fY29uZGl0aW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
ImNvbmRpdGlvbiIsICZjb25kaXRpb25fdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+c2V0QnJlYWtwb2ludEJ5VXJsKCZlcnJvciwgaW5fbGluZU51bWJlciwgdXJsX3ZhbHVlRm91
bmQgPyAmaW5fdXJsIDogMCwgdXJsUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl91cmxSZWdleCA6IDAs
IGNvbHVtbk51bWJlcl92YWx1ZUZvdW5kID8gJmluX2NvbHVtbk51bWJlciA6IDAsIGNvbmRpdGlv
bl92YWx1ZUZvdW5kID8gJmluX2NvbmRpdGlvbiA6IDAsICZvdXRfYnJlYWtwb2ludElkLCBvdXRf
bG9jYXRpb25zKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYg
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJ
ZCIsIG91dF9icmVha3BvaW50SWQpOwogICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFs
IGhlcmUuCiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgibG9jYXRpb25zIiwgb3V0X2xvY2F0aW9u
cyk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVi
dWdnZXIuc2V0QnJlYWtwb2ludEJ5VXJsIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgU3RyaW5nIG91dF9icmVha3BvaW50SWQgPSAiIjsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG91dF9hY3R1YWxMb2NhdGlvbiA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fbG9jYXRpb24gPSBnZXRPYmpl
Y3QocGFyYW1zQ29udGFpbmVyUHRyLCAibG9jYXRpb24iLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGNvbmRpdGlvbl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fY29u
ZGl0aW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNvbmRpdGlvbiIsICZjb25k
aXRpb25fdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludCgm
ZXJyb3IsIGluX2xvY2F0aW9uLCBjb25kaXRpb25fdmFsdWVGb3VuZCA/ICZpbl9jb25kaXRpb24g
OiAwLCAmb3V0X2JyZWFrcG9pbnRJZCwgb3V0X2FjdHVhbExvY2F0aW9uKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIG91dF9icmVha3BvaW50SWQpOwog
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJhY3R1YWxMb2NhdGlvbiIsIG91dF9hY3R1YWxMb2Nh
dGlvbik7CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGVidWdnZXIuc2V0QnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfcmVtb3ZlQnJlYWtwb2lu
dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9icmVha3BvaW50SWQgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAiYnJlYWtwb2ludElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
cmVtb3ZlQnJlYWtwb2ludCgmZXJyb3IsIGluX2JyZWFrcG9pbnRJZCk7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5yZW1vdmVCcmVh
a3BvaW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9sb2NhdGlvbiA9IGdldE9iamVjdChwYXJhbXND
b250YWluZXJQdHIsICJsb2NhdGlvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNvbnRp
bnVlVG9Mb2NhdGlvbigmZXJyb3IsIGluX2xvY2F0aW9uKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmNvbnRpbnVlVG9Mb2NhdGlv
biIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfc3RlcE92ZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBPdmVyKCZlcnJvcik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5z
dGVwT3ZlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3RlcEludG8obG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBJbnRvKCZlcnJvcik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1
Z2dlci5zdGVwSW50byIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3RlcE91dChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c3RlcE91dCgmZXJy
b3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGVidWdnZXIuc3RlcE91dCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfcGF1c2UobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnBhdXNlKCZlcnJv
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJE
ZWJ1Z2dlci5wYXVzZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5yZXN1bWUoJmVycm9y
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRl
YnVnZ2VyLnJlc3VtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2VhcmNoSW5Db250ZW50KGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsICJzY3JpcHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBib29sIGluX2Nhc2VTZW5zaXRpdmUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0
ciwgImNhc2VTZW5zaXRpdmUiLCAmY2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9pc1JlZ2V4ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpc1JlZ2V4IiwgJmlz
UmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2VhcmNoSW5Db250ZW50
KCZlcnJvciwgaW5fc2NyaXB0SWQsIGluX3F1ZXJ5LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQg
PyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAsIGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4
IDogMCwgb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3Vs
dCIsIG91dF9yZXN1bHQpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRlYnVnZ2VyLnNlYXJjaEluQ29udGVudCIpLCBwcm90b2NvbEVycm9ycywgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfY2Fu
U2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9v
bCBvdXRfcmVzdWx0ID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jYW5TZXRT
Y3JpcHRTb3VyY2UoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlc3VsdC0+
c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGVidWdnZXIuY2FuU2V0U2NyaXB0U291cmNlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpEZWJ1Z2dlcl9zZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rl
YnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2Vy
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IG91dF9jYWxsRnJhbWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gb3V0X3Jlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInNjcmlwdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGlu
X3NjcmlwdFNvdXJjZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzY3JpcHRTb3Vy
Y2UiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHByZXZpZXdfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgYm9vbCBpbl9wcmV2aWV3ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQ
dHIsICJwcmV2aWV3IiwgJnByZXZpZXdfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+c2V0U2NyaXB0U291cmNlKCZlcnJvciwgaW5fc2NyaXB0SWQsIGluX3NjcmlwdFNvdXJjZSwg
cHJldmlld192YWx1ZUZvdW5kID8gJmluX3ByZXZpZXcgOiAwLCBvdXRfY2FsbEZyYW1lcywgb3V0
X3Jlc3VsdCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGhlcmUu
CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY2FsbEZyYW1lcyIsIG91dF9jYWxsRnJhbWVzKTsK
ICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLgogICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRTY3JpcHRTb3VyY2UiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRlYnVnZ2VyX2dldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdn
ZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfc2NyaXB0U291cmNlID0g
IiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdElkID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgInNjcmlwdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Z2V0
U2NyaXB0U291cmNlKCZlcnJvciwgaW5fc2NyaXB0SWQsICZvdXRfc2NyaXB0U291cmNlKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmlwdFNvdXJjZSIsIG91dF9zY3JpcHRT
b3VyY2UpOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRlYnVnZ2VyLmdldFNjcmlwdFNvdXJjZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfZ2V0RnVuY3Rpb25M
b2NhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9sb2NhdGlvbiA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2Z1bmN0aW9uSWQg
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZnVuY3Rpb25JZCIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBt
X2RlYnVnZ2VyQWdlbnQtPmdldEZ1bmN0aW9uTG9jYXRpb24oJmVycm9yLCBpbl9mdW5jdGlvbklk
LCBvdXRfbG9jYXRpb24pOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgibG9jYXRp
b24iLCBvdXRfbG9jYXRpb24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmdldEZ1bmN0aW9uTG9jYXRpb24iKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVn
Z2VyX3NldFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3N0YXRlID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0YXRlIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+c2V0UGF1c2VPbkV4Y2VwdGlvbnMoJmVycm9yLCBpbl9zdGF0ZSk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEZWJ1Z2dlci5zZXRQ
YXVzZU9uRXhjZXB0aW9ucyIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgYm9vbCBvdXRfd2FzVGhyb3duID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX2NhbGxGcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImNh
bGxGcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2V4cHJlc3Np
b24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
Im9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGJvb2wgaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsICJpbmNsdWRlQ29tbWFuZExpbmVBUEkiLCAmaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5ldmFsdWF0ZU9uQ2FsbEZyYW1lKCZlcnJvciwg
aW5fY2FsbEZyYW1lSWQsIGluX2V4cHJlc3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAm
aW5fb2JqZWN0R3JvdXAgOiAwLCBpbmNsdWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/ICZp
bl9pbmNsdWRlQ29tbWFuZExpbmVBUEkgOiAwLCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPyAm
aW5fcmV0dXJuQnlWYWx1ZSA6IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAg
IGlmIChvdXRfd2FzVGhyb3duKQogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Ro
cm93biIsIG91dF93YXNUaHJvd24pOwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRlYnVnZ2VyLmV2YWx1YXRlT25DYWxsRnJhbWUiKSwgcHJvdG9jb2xF
cnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0
cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5z
ZXRET01CcmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnNldERP
TUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnQobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1
Z2dlckFnZW50LT5yZW1vdmVET01CcmVha3BvaW50KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBl
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRP
TURlYnVnZ2VyLnJlbW92ZURPTUJyZWFrcG9pbnQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldEV2
ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V2ZW50
TmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJldmVudE5hbWUiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9kb21EZWJ1Z2dlckFnZW50LT5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCgmZXJyb3Is
IGluX2V2ZW50TmFtZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJET01EZWJ1Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIpLCBwcm90
b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NRGVidWdnZXJfcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgImV2ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZUV2ZW50
TGlzdGVuZXJCcmVha3BvaW50KCZlcnJvciwgaW5fZXZlbnROYW1lKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnJlbW92ZUV2
ZW50TGlzdGVuZXJCcmVha3BvaW50IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRYSFJCcmVha3Bv
aW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5zZXRYSFJC
cmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRPTURlYnVnZ2VyLnNldFhIUkJyZWFrcG9pbnQiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTURlYnVnZ2VyX3JlbW92ZVhIUkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnJlbW92ZVhIUkJyZWFrcG9pbnQoJmVycm9yLCBpbl91
cmwpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RE9NRGVidWdnZXIucmVtb3ZlWEhSQnJlYWtwb2ludCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3Ip
Owp9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAgIEVycm9yU3RyaW5nIGVycm9y
OwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJB
Z2VudC0+Y2F1c2VzUmVjb21waWxhdGlvbigmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5jYXVzZXNS
ZWNvbXBpbGF0aW9uIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9pc1NhbXBsaW5nKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfcmVzdWx0ID0gZmFsc2U7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9wcm9maWxlckFnZW50LT5pc1NhbXBsaW5nKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmlz
U2FtcGxpbmciKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2hhc0hlYXBQcm9maWxlcihsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdCA9IGZhbHNlOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgIG1fcHJvZmlsZXJBZ2VudC0+aGFzSGVhcFByb2ZpbGVyKCZlcnJvciwgJm91dF9yZXN1bHQp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQp
OwogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2Zp
bGVyLmhhc0hlYXBQcm9maWxlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZW5hYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUo
JmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIlByb2ZpbGVyLmVuYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZGlzYWJsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+ZGlzYWJs
ZSgmZXJyb3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiUHJvZmlsZXIuZGlzYWJsZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfc3RhcnQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVy
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0YXJ0
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJQcm9maWxlci5zdGFydCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfc3RvcChsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcCgmZXJy
b3IpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
UHJvZmlsZXIuc3RvcCIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2Zp
bGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91
dF9oZWFkZXJzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmls
ZXJBZ2VudC0+Z2V0UHJvZmlsZUhlYWRlcnMoJmVycm9yLCBvdXRfaGVhZGVycyk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImhlYWRlcnMiLCBvdXRfaGVhZGVycyk7CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuZ2V0UHJv
ZmlsZUhlYWRlcnMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGUobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvdXRfcHJvZmlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX3R5cGUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAidHlwZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl91aWQgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAidWlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+Z2V0
UHJvZmlsZSgmZXJyb3IsIGluX3R5cGUsIGluX3VpZCwgb3V0X3Byb2ZpbGUpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICByZXN1bHQtPnNldE9iamVjdCgicHJvZmlsZSIsIG91dF9wcm9maWxlKTsKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5nZXRQcm9m
aWxlIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQcm9maWxlcl9yZW1vdmVQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9m
aWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3R5cGUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHlwZSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGludCBpbl91aWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAidWlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVtb3ZlUHJvZmlsZSgmZXJyb3Is
IGluX3R5cGUsIGluX3VpZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJQcm9maWxlci5yZW1vdmVQcm9maWxlIiksIHByb3RvY29sRXJyb3JzLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9j
bGVhclByb2ZpbGVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9wcm9maWxlckFnZW50LT5jbGVhclByb2ZpbGVzKCZlcnJvcik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJQcm9maWxlci5jbGVhclByb2ZpbGVz
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT50YWtlSGVhcFNuYXBzaG90
KCZlcnJvcik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJQcm9maWxlci50YWtlSGVhcFNuYXBzaG90IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9jb2xsZWN0
R2FyYmFnZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcHJv
ZmlsZXJBZ2VudC0+Y29sbGVjdEdhcmJhZ2UoJmVycm9yKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlByb2ZpbGVyLmNvbGxlY3RHYXJiYWdlIiks
IHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQcm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
UHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGludCBpbl9vYmplY3RJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJv
YmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldE9iamVjdEJ5SGVhcE9iamVj
dElkKCZlcnJvciwgaW5fb2JqZWN0SWQsIG91dF9yZXN1bHQpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiUHJvZmlsZXIuZ2V0T2JqZWN0QnlIZWFwT2Jq
ZWN0SWQiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9zZXRXb3JrZXJJbnNwZWN0aW9uRW5hYmxlZChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIldvcmtlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OwogICAgYm9vbCBpbl92YWx1ZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAidmFs
dWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpCiAgICAgICAgbV93b3JrZXJBZ2VudC0+c2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWQo
JmVycm9yLCBpbl92YWx1ZSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJXb3JrZXIuc2V0V29ya2VySW5zcGVjdGlvbkVuYWJsZWQiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
Oldvcmtlcl9zZW5kTWVzc2FnZVRvV29ya2VyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV93b3JrZXJB
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiV29ya2VyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd29ya2VySWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAid29ya2VySWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9tZXNzYWdlID0gZ2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm1lc3NhZ2UiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV93b3JrZXJBZ2VudC0+c2Vu
ZE1lc3NhZ2VUb1dvcmtlcigmZXJyb3IsIGluX3dvcmtlcklkLCBpbl9tZXNzYWdlKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIldvcmtlci5zZW5k
TWVzc2FnZVRvV29ya2VyIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJfY29ubmVjdFRvV29ya2VyKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV93b3JrZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiV29ya2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fd29ya2VySWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAid29ya2VySWQi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgbV93b3JrZXJBZ2VudC0+Y29ubmVjdFRvV29ya2VyKCZlcnJvciwgaW5fd29y
a2VySWQpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiV29ya2VyLmNvbm5lY3RUb1dvcmtlciIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Rpc2Nvbm5lY3RGcm9t
V29ya2VyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV93b3JrZXJBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiV29ya2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd29ya2VySWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAid29ya2VySWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV93b3JrZXJBZ2VudC0+ZGlzY29ubmVjdEZyb21X
b3JrZXIoJmVycm9yLCBpbl93b3JrZXJJZCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJXb3JrZXIuZGlzY29ubmVjdEZyb21Xb3JrZXIiKSwgcHJv
dG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Oldvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
d29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl92YWx1
ZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV93
b3JrZXJBZ2VudC0+c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoJmVycm9yLCBpbl92YWx1ZSk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJXb3JrZXIu
c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKfQoKI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKClBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCnsKICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkpOwp9CgoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0ID0gdGhpczsKICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIG1lc3NhZ2VPYmplY3QpOwogICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+IERpc3BhdGNoTWFwOwogICAgREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlz
cGF0Y2hNYXAsICk7CiAgICBsb25nIGNhbGxJZCA9IDA7CgogICAgaWYgKGRpc3BhdGNoTWFwLmlz
RW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0gewogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbnNwZWN0b3JfZW5hYmxl
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbnNwZWN0b3Jf
ZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TWVt
b3J5X2dldERPTU5vZGVDb3VudCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6UGFnZV9lbmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlBhZ2VfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3JlbW92ZVNjcmlwdFRvRXZhbHVh
dGVPbkxvYWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBh
Z2VfcmVsb2FkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQ
YWdlX25hdmlnYXRlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpQYWdlX2dldENvb2tpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2VfZGVsZXRlQ29va2llLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQYWdlX2dldFJlc291cmNlVHJlZSwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZUNvbnRlbnQsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2VhcmNoSW5SZXNvdXJj
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZWFy
Y2hJblJlc291cmNlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6UGFnZV9zZXREb2N1bWVudENvbnRlbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0U2NyZWVuU2l6ZU92ZXJyaWRlLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2V2YWx1YXRlLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2NhbGxGdW5jdGlv
bk9uLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1l
X2dldFByb3BlcnRpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXAsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfcnVuLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2VuYWJsZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9kaXNhYmxlLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2NsZWFyTWVz
c2FnZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNv
bGVfc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9kZSwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19lbmFibGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZGlzYWJsZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19zZXRVc2VyQWdl
bnRPdmVycmlkZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
TmV0d29ya19zZXRFeHRyYUhUVFBIZWFkZXJzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2dldFJlc3BvbnNlQm9keSwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDYWNo
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19j
bGVhckJyb3dzZXJDYWNoZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29raWVzLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2NsZWFyQnJvd3NlckNvb2tpZXMsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0Q2Fj
aGVEaXNhYmxlZCwKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9lbmFibGUsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRhdGFiYXNlX2Rpc2FibGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRhdGFiYXNlX2dldERhdGFiYXNl
VGFibGVOYW1lcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
RGF0YWJhc2VfZXhlY3V0ZVNRTCwKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpJbmRleGVkREJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5hbWVz
Rm9yRnJhbWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oklu
ZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2UsCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3Jh
Z2VfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
T01TdG9yYWdlX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUVudHJpZXMsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW0s
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vf
cmVtb3ZlRE9NU3RvcmFnZUl0ZW0sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cywKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6QXBwbGljYXRpb25DYWNoZV9l
bmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkFwcGxp
Y2F0aW9uQ2FjaGVfZ2V0TWFuaWZlc3RGb3JGcmFtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6QXBwbGljYXRpb25DYWNoZV9nZXRBcHBsaWNhdGlvbkNhY2hl
Rm9yRnJhbWUsCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCgogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX2VuYWJsZSwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9kaXNhYmxlLAojZW5kaWYg
Ly8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX2dldERvY3VtZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01fcmVxdWVzdENoaWxkTm9kZXMsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9xdWVyeVNlbGVjdG9yLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcXVlcnlTZWxlY3RvckFsbCwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVO
YW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fc2V0
Tm9kZVZhbHVlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
T01fcmVtb3ZlTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX3NldEF0dHJpYnV0ZVZhbHVlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpET01fc2V0QXR0cmlidXRlc0FzVGV4dCwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92ZUF0dHJpYnV0ZSwKICAgICAgICAg
ICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2dldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X2dldE91dGVySFRNTCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX3NldE91dGVySFRNTCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RE9NX3BlcmZvcm1TZWFyY2gsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTV9nZXRTZWFyY2hSZXN1bHRzLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fZGlzY2FyZFNlYXJjaFJlc3VsdHMsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZXF1ZXN0Tm9kZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEluc3Bl
Y3RNb2RlRW5hYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX2hpZ2hsaWdodFJlY3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTV9oaWdobGlnaHROb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01faGlkZUhpZ2hsaWdodCwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZ2hsaWdodEZyYW1lLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcHVzaE5vZGVCeVBhdGhUb0Zyb250
ZW5kLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVz
b2x2ZU5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRP
TV9nZXRBdHRyaWJ1dGVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpET01fbW92ZVRvLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpDU1NfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpDU1NfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6Q1NTX2dldE1hdGNoZWRTdHlsZXNGb3JOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0SW5saW5lU3R5bGVzRm9yTm9kZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldENvbXB1dGVkU3R5
bGVGb3JOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpD
U1NfZ2V0QWxsU3R5bGVTaGVldHMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkNTU19nZXRTdHlsZVNoZWV0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3R5bGVTaGVldFRleHQsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zZXRTdHlsZVNoZWV0VGV4dCwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFByb3BlcnR5VGV4
dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3RvZ2ds
ZVByb3BlcnR5LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpD
U1Nfc2V0UnVsZVNlbGVjdG9yLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1NfYWRkUnVsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6Q1NTX2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zdGFydFNlbGVjdG9yUHJvZmlsZXIsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zdG9wU2VsZWN0
b3JQcm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
VGltZWxpbmVfc3RhcnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OlRpbWVsaW5lX3N0b3AsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlRpbWVsaW5lX3NldEluY2x1ZGVNZW1vcnlEZXRhaWxzLAojaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9jYXVzZXNSZWNvbXBpbGF0aW9uLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRz
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9l
bmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVn
Z2VyX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50QnlVcmwsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldEJyZWFrcG9p
bnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2Vy
X3JlbW92ZUJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRlYnVnZ2VyX2NvbnRpbnVlVG9Mb2NhdGlvbiwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3RlcE92ZXIsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBJbnRvLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zdGVwT3V0LAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9wYXVz
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJf
cmVzdW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1
Z2dlcl9zZWFyY2hJbkNvbnRlbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRlYnVnZ2VyX2NhblNldFNjcmlwdFNvdXJjZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0U2NyaXB0U291cmNlLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9nZXRTY3Jp
cHRTb3VyY2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRl
YnVnZ2VyX2dldEZ1bmN0aW9uTG9jYXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFBhdXNlT25FeGNlcHRpb25zLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2Fs
bEZyYW1lLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRET01CcmVha3BvaW50LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9yZW1vdmVET01CcmVha3Bv
aW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1
Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURl
YnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZVhIUkJyZWFrcG9pbnQsCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVy
X2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlByb2ZpbGVyX2lzU2FtcGxpbmcsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2hhc0hlYXBQcm9maWxlciwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZW5hYmxlLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9kaXNhYmxlLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9zdGFy
dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJf
c3RvcCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmls
ZXJfZ2V0UHJvZmlsZUhlYWRlcnMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OlByb2ZpbGVyX2dldFByb2ZpbGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3JlbW92ZVByb2ZpbGUsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXMsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX3Rha2VI
ZWFwU25hcHNob3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZCwKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX3NldFdvcmtlcklu
c3BlY3Rpb25FbmFibGVkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlciwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Nvbm5lY3RUb1dvcmtlciwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Rpc2Nvbm5lY3RGcm9tV29y
a2VyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpXb3JrZXJf
c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMsCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCiAgICAg
ICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXpl
b2YoY29tbWFuZE5hbWVzWzBdKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5k
bGVyc1tpXSk7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdl
ID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkTWVz
c2FnZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3Nh
Z2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNP
YmplY3QoKTsKICAgIGlmICghbWVzc2FnZU9iamVjdCkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2Jq
ZWN0Iik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
Y2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7CiAgICBpZiAoIWNhbGxJZFZh
bHVlKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidp
ZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11
c3QgYmUgbnVtYmVyIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOwogICAg
aWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIG1ldGhvZDsKICAgIGlmICghbWV0aG9kVmFsdWUt
PmFzU3RyaW5nKCZtZXRob2QpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUg
c3RyaW5nIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYg
KGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigm
Y2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQs
IG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKewog
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9y
cyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGlu
dm9jYXRpb25FcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBs
b25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgY29uc3QKewogICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUs
IGVycm9yTWVzc2FnZSwgMCk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJy
b3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBkYXRhKSBjb25zdAp7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rvcjxp
bnQ+LHNfY29tbW9uRXJyb3JzLCk7CiAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNpemUoKSkgewog
ICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3MDApOwogICAgICAg
IHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKICAgICAgICBz
X2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7CiAgICAgICAgc19j
b21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7CiAgICAgICAgc19jb21t
b25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7CiAgICAgICAgc19jb21tb25F
cnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOwogICAgfQogICAgQVNTRVJUKGNvZGUg
Pj0wKTsKICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7
CiAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZXJyb3ItPnNldE51
bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKICAgIGVycm9yLT5zZXRTdHJpbmco
Im1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAgQVNTRVJUKGVycm9yKTsKICAgIGlmIChkYXRh
KQogICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNz
YWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IpOwogICAgaWYgKGNhbGxJZCkKICAgICAgICBt
ZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7CiAgICBlbHNlCiAgICAgICAgbWVzc2Fn
ZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCmludCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYg
KHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAgICBpbnQgdmFsdWUg
PSAwOwoKICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CiAgICAg
ICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIu
CiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIn
cGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGgg
dHlwZSAnTnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgfQoKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
dmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRv
ciA9PSBlbmQpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5
cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAg
ICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
TnVtYmVyKCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdOdW1i
ZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZv
dW5kKQogICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0K
ClN0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFN0cmluZyhJbnNwZWN0
b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9y
cyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAg
ICBTdHJpbmcgdmFsdWUgPSAiIjsKCiAgICBpZiAoIW9iamVjdCkgewogICAgICAgIGlmICghdmFs
dWVGb3VuZCkgewogICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBw
YXJhbXMgY29udGFpbmVyLgogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJh
bWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CiAgICBJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CgogICAg
aWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQogICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVy
YXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4g
SXQgbXVzdCBiZSAnU3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgIGVsc2UKICAg
ICAgICBpZiAodmFsdWVGb3VuZCkKICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOwogICAg
cmV0dXJuIHZhbHVlOwp9Cgpib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0
Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91
bmQgPSBmYWxzZTsKCiAgICBib29sIHZhbHVlID0gZmFsc2U7CgogICAgaWYgKCFvYmplY3QpIHsK
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1l
dGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KICAgICAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRh
aW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdCb29sZWFuJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+
ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAo
IXZhbHVlRm91bmQpCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nIHdhcyBub3QgZm91
bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoK
ICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKSkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgZWxzZQogICAgICAgIGlmICh2YWx1ZUZvdW5kKQogICAgICAgICAgICAqdmFs
dWVGb3VuZCA9IHRydWU7CiAgICByZXR1cm4gdmFsdWU7Cn0KClBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldE9iamVjdChJbnNwZWN0
b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFTU0VSVChwcm90b2NvbEVycm9y
cyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CgogICAgaWYgKCFvYmplY3QpIHsKICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKICAgICAg
ICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4K
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidw
YXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0
eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIH0KICAgICAgICBy
ZXR1cm4gdmFsdWU7CiAgICB9CgogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBvYmplY3QtPmVuZCgpOwogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2
YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9y
ID09IGVuZCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAg
IHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNP
YmplY3QoJnZhbHVlKSkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ09iamVj
dCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICBlbHNlCiAgICAgICAgaWYgKHZhbHVlRm91
bmQpCiAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKICAgIHJldHVybiB2YWx1ZTsKfQoK
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCnsKICAgIEFT
U0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZhbHVl
Rm91bmQgPSBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgaWYgKCF2YWx1
ZUZvdW5kKSB7CiAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBh
cmFtcyBjb250YWluZXIuCiAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFt
ZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAg
ICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwogICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwoKICAgIGlm
ICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBt
dXN0IGJlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICBlbHNlCiAgICAgICAg
aWYgKHZhbHVlRm91bmQpCiAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKICAgIHJldHVy
biB2YWx1ZTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tbWFuZE5h
bWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKewogICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7
CiAgICBpZiAoIXZhbHVlKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKICAgIGlmICghb2JqZWN0KQog
ICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIW9iamVjdC0+Z2V0U3RyaW5nKCJtZXRob2Qi
LCByZXN1bHQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKfQoKCn0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>124045</attachid>
            <date>2012-01-25 17:23:14 -0800</date>
            <delta_ts>2012-01-25 17:23:14 -0800</delta_ts>
            <desc>new h</desc>
            <filename>InspectorBackendDispatcher.h</filename>
            <type>text/plain</type>
            <size>27004</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKI2Rl
ZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCgpuYW1lc3BhY2UgV2Vi
Q29yZSB7CgpjbGFzcyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpjbGFz
cyBJbnNwZWN0b3JBcnJheTsKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwoKY2xhc3Mg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OwpjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsK
Y2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwpjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCmNsYXNzIEluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKCmNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1NZU1RFTSkKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCmNsYXNzIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgpjbGFz
cyBJbnNwZWN0b3JBZ2VudDsKY2xhc3MgSW5zcGVjdG9yTWVtb3J5QWdlbnQ7CmNsYXNzIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ7CmNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKY2xhc3MgSW5zcGVjdG9yUnVudGltZUFn
ZW50OwpjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwojaWYgRU5BQkxFKFdPUktFUlMpCgpj
bGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudDsKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKCnR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwoKY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CnB1Ymxp
YzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpOwoK
ICAgIGNsYXNzIEluc3BlY3RvckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgfTsKCiAgICBjbGFzcyBNZW1vcnlDb21t
YW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGdldERPTU5vZGVD
b3VudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9kb21Hcm91cHMs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfc3RyaW5ncykgPSAwOwogICAgfTsKCiAgICBj
bGFzcyBQYWdlQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9p
ZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFkZFNjcmlwdFRvRXZhbHVh
dGVPbkxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdFNvdXJjZSwgU3Ry
aW5nKiBvdXRfaWRlbnRpZmllcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3Jp
cHRUb0V2YWx1YXRlT25Mb2FkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9pZGVudGlm
aWVyKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbG9hZChFcnJvclN0cmluZyosIGNvbnN0
IGJvb2wqIGluX2lnbm9yZUNhY2hlLCBjb25zdCBTdHJpbmcqIGluX3NjcmlwdFRvRXZhbHVhdGVP
bkxvYWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGUoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX3VybCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRDb29raWVz
KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2Nvb2tpZXMsIFN0cmlu
Zyogb3V0X2Nvb2tpZXNTdHJpbmcpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQ29v
a2llKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9jb29raWVOYW1lLCBjb25zdCBTdHJp
bmcmIGluX2RvbWFpbikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVRyZWUo
RXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X2ZyYW1lVHJlZSkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaW5fdXJsLCBTdHJpbmcqIG91
dF9jb250ZW50LCBib29sKiBvdXRfYmFzZTY0RW5jb2RlZCkgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3VybCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgY29uc3Qg
Ym9vbCogaW5fY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaW5faXNSZWdleCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZWFy
Y2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdGV4dCwgY29uc3Qg
Ym9vbCogaW5fY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaW5faXNSZWdleCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRE
b2N1bWVudENvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgaW5faHRtbCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JlZW5T
aXplT3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd2lkdGgsIGludCBpbl9oZWlnaHQpID0g
MDsKICAgIH07CgogICAgY2xhc3MgUnVudGltZUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoK
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGluX2V4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wq
IGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogaW5fZG9Ob3RQYXVzZU9uRXhj
ZXB0aW9ucywgY29uc3QgU3RyaW5nKiBpbl9mcmFtZUlkLCBjb25zdCBib29sKiBpbl9yZXR1cm5C
eVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Jlc3VsdCwgYm9vbCogb3V0X3dh
c1Rocm93bikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgaW5fZnVuY3Rp
b25EZWNsYXJhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5fYXJndW1lbnRz
LCBjb25zdCBib29sKiBpbl9yZXR1cm5CeVZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
b3V0X3Jlc3VsdCwgYm9vbCogb3V0X3dhc1Rocm93bikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwg
Y29uc3QgYm9vbCogaW5fb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0
X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX29iamVj
dEdyb3VwKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyopID0gMDsK
ICAgIH07CgogICAgY2xhc3MgQ29uc29sZUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBj
bGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRN
b25pdG9yaW5nWEhSRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgaW5fZW5hYmxlZCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nKiwgaW50IGlu
X25vZGVJZCkgPSAwOwogICAgfTsKCiAgICBjbGFzcyBOZXR3b3JrQ29tbWFuZEhhbmRsZXIgewog
ICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl91c2VyQWdlbnQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0cmFIVFRQ
SGVhZGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBpbl9o
ZWFkZXJzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgaW5fcmVxdWVzdElkLCBTdHJpbmcqIG91dF9ib2R5LCBib29s
KiBvdXRfYmFzZTY0RW5jb2RlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjYW5DbGVhckJy
b3dzZXJDYWNoZShFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIGNhbkNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcqLCBib29sKiBv
dXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNvb2tpZXMo
RXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldENhY2hlRGlzYWJsZWQo
RXJyb3JTdHJpbmcqLCBib29sIGluX2NhY2hlRGlzYWJsZWQpID0gMDsKICAgIH07CgojaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNzIERhdGFiYXNlQ29tbWFuZEhhbmRsZXIgewogICAg
cHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyosIGludCBpbl9kYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfdGFibGVOYW1lcykgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIGJvb2wqIG91dF9zdWNjZXNzLCBpbnQqIG91dF90
cmFuc2FjdGlvbklkKSA9IDA7CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgIGNsYXNzIEluZGV4ZWREQkNvbW1hbmRI
YW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lKEVycm9y
U3RyaW5nKiwgaW50IGluX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyosIGludCBp
bl9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBpbl9k
YXRhYmFzZU5hbWUpID0gMDsKICAgIH07CgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICBjbGFzcyBET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAg
ICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdl
dERPTVN0b3JhZ2VFbnRyaWVzKEVycm9yU3RyaW5nKiwgaW50IGluX3N0b3JhZ2VJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYgb3V0X2VudHJpZXMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcqLCBpbnQgaW5fc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGluX2tleSwgY29uc3QgU3RyaW5nJiBpbl92YWx1ZSwgYm9vbCogb3V0X3N1Y2Nlc3Mp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJp
bmcqLCBpbnQgaW5fc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGluX2tleSwgYm9vbCogb3V0X3N1
Y2Nlc3MpID0gMDsKICAgIH07CgogICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUNvbW1hbmRIYW5k
bGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlm
ZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9mcmFtZUlkcykg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX2ZyYW1lSWQsIFN0cmluZyogb3V0X21hbmlmZXN0VVJMKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9hcHBs
aWNhdGlvbkNhY2hlKSA9IDA7CiAgICB9OwoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNs
YXNzIEZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVh
bCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyopID0gMDsKICAgIH07CgojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lT
VEVNKQogICAgY2xhc3MgRE9NQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZp
cnR1YWwgdm9pZCBnZXREb2N1bWVudChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBvdXRfcm9vdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hpbGROb2Rl
cyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYg
aW5fc2VsZWN0b3IsIGludCogb3V0X25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBx
dWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5n
JiBpbl9zZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X25vZGVJZHMpID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIGluX25hbWUsIGludCogb3V0X25vZGVJZCkgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBj
b25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5v
ZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3Ry
aW5nJiBpbl9uYW1lLCBjb25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBj
b25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IFN0cmluZyogaW5fbmFtZSkgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlk
LCBjb25zdCBTdHJpbmcmIGluX25hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RXZl
bnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiYgb3V0X2xpc3RlbmVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBn
ZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBTdHJpbmcqIG91dF9vdXRl
ckhUTUwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5n
KiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9vdXRlckhUTUwpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnksIFN0cmluZyogb3V0X3NlYXJjaElkLCBpbnQqIG91dF9yZXN1bHRDb3VudCkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBpbl9zZWFyY2hJZCwgaW50IGluX2Zyb21JbmRleCwgaW50IGluX3RvSW5kZXgs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9ub2RlSWRzKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBp
bl9zZWFyY2hJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0SWQsIGludCogb3V0X25vZGVJZCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcqLCBi
b29sIGluX2VuYWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9oaWdobGln
aHRDb25maWcpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0
cmluZyosIGludCBpbl94LCBpbnQgaW5feSwgaW50IGluX3dpZHRoLCBpbnQgaW5faGVpZ2h0LCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5fY29sb3IsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBpbl9vdXRsaW5lQ29sb3IpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBpbl9oaWdobGlnaHRDb25maWcpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9jb250ZW50Q29sb3IsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9jb250ZW50T3V0bGluZUNvbG9yKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fcGF0aCwgaW50KiBvdXRfbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3Ry
aW5nKiBpbl9vYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9vYmplY3Qp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyosIGlu
dCBpbl9ub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9hdHRyaWJ1dGVzKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQs
IGludCBpbl90YXJnZXROb2RlSWQsIGNvbnN0IGludCogaW5faW5zZXJ0QmVmb3JlTm9kZUlkLCBp
bnQqIG91dF9ub2RlSWQpID0gMDsKICAgIH07CgogICAgY2xhc3MgQ1NTQ29tbWFuZEhhbmRsZXIg
ewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50
IGluX25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5fZm9yY2VkUHNldWRv
Q2xhc3NlcywgY29uc3QgYm9vbCogaW5faW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5faW5j
bHVkZUluaGVyaXRlZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X21hdGNoZWRDU1NSdWxl
cywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X3BzZXVkb0VsZW1lbnRzLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+JiBvdXRfaW5oZXJpdGVkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdl
dElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgb3V0X2lubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
JiBvdXRfc3R5bGVBdHRyaWJ1dGVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldENvbXB1
dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogaW5fZm9yY2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiYgb3V0X2NvbXB1dGVkU3R5bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0
QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRf
aGVhZGVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBvdXRfc3R5bGVTaGVldCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc3R5bGVTaGVldElkLCBTdHJp
bmcqIG91dF90ZXh0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRUZXh0
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgaW5fdGV4dCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eVRleHQoRXJy
b3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3R5bGVJZCwgaW50
IGluX3Byb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgaW5fdGV4dCwgYm9vbCBpbl9vdmVyd3Jp
dGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRfc3R5bGUpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgaW5fc3R5bGVJZCwgaW50IGluX3Byb3BlcnR5SW5kZXgsIGJvb2wgaW5fZGlz
YWJsZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9zdHlsZSkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgaW5fcnVsZUlkLCBjb25zdCBTdHJpbmcmIGluX3NlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3J1bGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkUnVsZShFcnJvclN0cmluZyosIGludCBpbl9jb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcm
IGluX3NlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3J1bGUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyos
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9jc3NQcm9wZXJ0aWVzKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Byb2ZpbGUpID0gMDsKICAgIH07CgogICAgY2xhc3Mg
VGltZWxpbmVDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0KEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBpbl9tYXhDYWxsU3RhY2tEZXB0aCkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRJbmNsdWRlTWVtb3J5RGV0YWlscyhFcnJvclN0cmluZyosIGJvb2wgaW5f
ZW5hYmxlZCkgPSAwOwogICAgfTsKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
IGNsYXNzIERlYnVnZ2VyQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1
YWwgdm9pZCBjYXVzZXNSZWNvbXBpbGF0aW9uKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3Vs
dCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdXBwb3J0c05hdGl2ZUJyZWFrcG9pbnRzKEVy
cm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZl
KEVycm9yU3RyaW5nKiwgYm9vbCBpbl9hY3RpdmUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiwgaW50IGluX2xpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyogaW5fdXJsLCBjb25zdCBTdHJpbmcqIGluX3VybFJlZ2V4LCBjb25zdCBpbnQqIGlu
X2NvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nKiBpbl9jb25kaXRpb24sIFN0cmluZyogb3V0X2Jy
ZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0X2xvY2F0aW9ucykgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIGluX2xvY2F0aW9uLCBjb25zdCBTdHJpbmcqIGluX2NvbmRp
dGlvbiwgU3RyaW5nKiBvdXRfYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
b3V0X2FjdHVhbExvY2F0aW9uKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2JyZWFrcG9pbnRJZCkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbG9jYXRpb24pID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RlcE92ZXIoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IHN0ZXBJbnRvKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdGVwT3V0
KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBwYXVzZShFcnJvclN0cmlu
ZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nKikgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBjb25zdCBib29sKiBp
bl9jYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpbl9pc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhblNldFNjcmlw
dFNvdXJjZShFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9z
Y3JpcHRJZCwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRTb3VyY2UsIGNvbnN0IGJvb2wqIGluX3By
ZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dF9jYWxsRnJhbWVzLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRT
Y3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdElkLCBTdHJp
bmcqIG91dF9zY3JpcHRTb3VyY2UpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RnVuY3Rp
b25Mb2NhdGlvbihFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnVuY3Rpb25JZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mIG91dF9sb2NhdGlvbikgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
c3RhdGUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgaW5f
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5f
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBpbl9yZXR1cm5CeVZhbHVlLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Jlc3VsdCwgYm9vbCogb3V0X3dhc1Rocm93bikgPSAw
OwogICAgfTsKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRE9NRGVidWdnZXJDb21tYW5kSGFuZGxl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3R5cGUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0cmluZyosIGludCBp
bl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fdHlwZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fZXZlbnROYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9ldmVudE5hbWUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0WEhSQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fdXJsKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVhIUkJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3VybCkgPSAwOwogICAgfTsK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmlsZXJDb21tYW5kSGFuZGxlciB7CiAgICBwdWJs
aWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGNhdXNlc1JlY29tcGlsYXRpb24oRXJyb3JTdHJpbmcq
LCBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGlzU2FtcGxpbmco
RXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGhhc0hlYXBQcm9maWxlcihFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBz
dGFydChFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcChFcnJvclN0
cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoRXJyb3JT
dHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRfaGVhZGVycykgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBnZXRQcm9maWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl90
eXBlLCBpbnQgaW5fdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3V0X3Byb2ZpbGUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fdHlwZSwgaW50IGluX3VpZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBj
bGVhclByb2ZpbGVzKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0YWtl
SGVhcFNuYXBzaG90KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjb2xs
ZWN0R2FyYmFnZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2Jq
ZWN0QnlIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fb2JqZWN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBjbGFzcyBXb3Jr
ZXJDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFdv
cmtlckluc3BlY3Rpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBpbl92YWx1ZSkgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nKiwgaW50
IGluX3dvcmtlcklkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbWVzc2FnZSkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9Xb3JrZXIoRXJyb3JTdHJpbmcqLCBp
bnQgaW5fd29ya2VySWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21X
b3JrZXIoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQpID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcqLCBib29sIGluX3ZhbHVl
KSA9IDA7CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckFnZW50KEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCAvKiBBcHBsaWNh
dGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIgKi8qIGFwcGxpY2F0aW9uQ2FjaGVBZ2VudCkgPSAwOwog
ICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yQ1NTQWdlbnQgLyogQ1NTQ29t
bWFuZEhhbmRsZXIgKi8qIGNzc0FnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJB
Z2VudChJbnNwZWN0b3JDb25zb2xlQWdlbnQgLyogQ29uc29sZUNvbW1hbmRIYW5kbGVyICovKiBj
b25zb2xlQWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3Rv
ckRPTUFnZW50IC8qIERPTUNvbW1hbmRIYW5kbGVyICovKiBkb21BZ2VudCkgPSAwOwojaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQo
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCAvKiBET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyICov
KiBkb21EZWJ1Z2dlckFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQgLyogRE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyICovKiBkb21TdG9yYWdlQWdlbnQpID0g
MDsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdl
bnQoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCAvKiBEYXRhYmFzZUNvbW1hbmRIYW5kbGVyICovKiBk
YXRhYmFzZUFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50
KEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgLyogRGVidWdnZXJDb21tYW5kSGFuZGxlciAqLyogZGVi
dWdnZXJBZ2VudCkgPSAwOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgoj
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KElu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudCAvKiBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIgKi8qIGZp
bGVTeXN0ZW1BZ2VudCkgPSAwOwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQoKI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KElu
c3BlY3RvckluZGV4ZWREQkFnZW50IC8qIEluZGV4ZWREQkNvbW1hbmRIYW5kbGVyICovKiBpbmRl
eGVkREJBZ2VudCkgPSAwOwojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yQWdlbnQgLyogSW5zcGVjdG9yQ29t
bWFuZEhhbmRsZXIgKi8qIGluc3BlY3RvckFnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJBZ2VudChJbnNwZWN0b3JNZW1vcnlBZ2VudCAvKiBNZW1vcnlDb21tYW5kSGFuZGxlciAq
LyogbWVtb3J5QWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEluc3Bl
Y3RvclJlc291cmNlQWdlbnQgLyogTmV0d29ya0NvbW1hbmRIYW5kbGVyICovKiBuZXR3b3JrQWdl
bnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEluc3BlY3RvclBhZ2VBZ2Vu
dCAvKiBQYWdlQ29tbWFuZEhhbmRsZXIgKi8qIHBhZ2VBZ2VudCkgPSAwOwojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudCAvKiBQcm9maWxlckNvbW1hbmRIYW5kbGVyICovKiBwcm9maWxlckFn
ZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNwZWN0b3JSdW50aW1lQWdlbnQgLyogUnVudGltZUNv
bW1hbmRIYW5kbGVyICovKiBydW50aW1lQWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckFnZW50KEluc3BlY3RvclRpbWVsaW5lQWdlbnQgLyogVGltZWxpbmVDb21tYW5kSGFuZGxl
ciAqLyogdGltZWxpbmVBZ2VudCkgPSAwOwojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyQWdlbnQoSW5zcGVjdG9yV29ya2VyQWdlbnQgLyogV29ya2VyQ29tbWFu
ZEhhbmRsZXIgKi8qIHdvcmtlckFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
CgogICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKSA9IDA7CgogICAgZW51bSBDb21tb25F
cnJvckNvZGUgewogICAgICAgIFBhcnNlRXJyb3IgPSAwLAogICAgICAgIEludmFsaWRSZXF1ZXN0
LAogICAgICAgIE1ldGhvZE5vdEZvdW5kLAogICAgICAgIEludmFsaWRQYXJhbXMsCiAgICAgICAg
SW50ZXJuYWxFcnJvciwKICAgICAgICBTZXJ2ZXJFcnJvciwKICAgICAgICBMYXN0RW50cnksCiAg
ICB9OwoKICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxs
SWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Owog
ICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2Fs
bElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiAgICBzdGF0aWMgYm9vbCBnZXRDb21t
YW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsKCiAgICBlbnVt
IE1ldGhvZE5hbWVzIHsKICAgICAgICBrSW5zcGVjdG9yX2VuYWJsZUNtZCwKICAgICAgICBrSW5z
cGVjdG9yX2Rpc2FibGVDbWQsCiAgICAgICAga01lbW9yeV9nZXRET01Ob2RlQ291bnRDbWQsCiAg
ICAgICAga1BhZ2VfZW5hYmxlQ21kLAogICAgICAgIGtQYWdlX2Rpc2FibGVDbWQsCiAgICAgICAg
a1BhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENtZCwKICAgICAgICBrUGFnZV9yZW1vdmVT
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkQ21kLAogICAgICAgIGtQYWdlX3JlbG9hZENtZCwKICAgICAg
ICBrUGFnZV9uYXZpZ2F0ZUNtZCwKICAgICAgICBrUGFnZV9nZXRDb29raWVzQ21kLAogICAgICAg
IGtQYWdlX2RlbGV0ZUNvb2tpZUNtZCwKICAgICAgICBrUGFnZV9nZXRSZXNvdXJjZVRyZWVDbWQs
CiAgICAgICAga1BhZ2VfZ2V0UmVzb3VyY2VDb250ZW50Q21kLAogICAgICAgIGtQYWdlX3NlYXJj
aEluUmVzb3VyY2VDbWQsCiAgICAgICAga1BhZ2Vfc2VhcmNoSW5SZXNvdXJjZXNDbWQsCiAgICAg
ICAga1BhZ2Vfc2V0RG9jdW1lbnRDb250ZW50Q21kLAogICAgICAgIGtQYWdlX3NldFNjcmVlblNp
emVPdmVycmlkZUNtZCwKICAgICAgICBrUnVudGltZV9ldmFsdWF0ZUNtZCwKICAgICAgICBrUnVu
dGltZV9jYWxsRnVuY3Rpb25PbkNtZCwKICAgICAgICBrUnVudGltZV9nZXRQcm9wZXJ0aWVzQ21k
LAogICAgICAgIGtSdW50aW1lX3JlbGVhc2VPYmplY3RDbWQsCiAgICAgICAga1J1bnRpbWVfcmVs
ZWFzZU9iamVjdEdyb3VwQ21kLAogICAgICAgIGtSdW50aW1lX3J1bkNtZCwKICAgICAgICBrQ29u
c29sZV9lbmFibGVDbWQsCiAgICAgICAga0NvbnNvbGVfZGlzYWJsZUNtZCwKICAgICAgICBrQ29u
c29sZV9jbGVhck1lc3NhZ2VzQ21kLAogICAgICAgIGtDb25zb2xlX3NldE1vbml0b3JpbmdYSFJF
bmFibGVkQ21kLAogICAgICAgIGtDb25zb2xlX2FkZEluc3BlY3RlZE5vZGVDbWQsCiAgICAgICAg
a05ldHdvcmtfZW5hYmxlQ21kLAogICAgICAgIGtOZXR3b3JrX2Rpc2FibGVDbWQsCiAgICAgICAg
a05ldHdvcmtfc2V0VXNlckFnZW50T3ZlcnJpZGVDbWQsCiAgICAgICAga05ldHdvcmtfc2V0RXh0
cmFIVFRQSGVhZGVyc0NtZCwKICAgICAgICBrTmV0d29ya19nZXRSZXNwb25zZUJvZHlDbWQsCiAg
ICAgICAga05ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ2FjaGVDbWQsCiAgICAgICAga05ldHdvcmtf
Y2xlYXJCcm93c2VyQ2FjaGVDbWQsCiAgICAgICAga05ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29v
a2llc0NtZCwKICAgICAgICBrTmV0d29ya19jbGVhckJyb3dzZXJDb29raWVzQ21kLAogICAgICAg
IGtOZXR3b3JrX3NldENhY2hlRGlzYWJsZWRDbWQsCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoK
ICAgICAgICBrRGF0YWJhc2VfZW5hYmxlQ21kLAogICAgICAgIGtEYXRhYmFzZV9kaXNhYmxlQ21k
LAogICAgICAgIGtEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxlTmFtZXNDbWQsCiAgICAgICAga0Rh
dGFiYXNlX2V4ZWN1dGVTUUxDbWQsCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICAgICBrSW5kZXhlZERCX2VuYWJsZUNtZCwK
ICAgICAgICBrSW5kZXhlZERCX2Rpc2FibGVDbWQsCiAgICAgICAga0luZGV4ZWREQl9yZXF1ZXN0
RGF0YWJhc2VOYW1lc0ZvckZyYW1lQ21kLAogICAgICAgIGtJbmRleGVkREJfcmVxdWVzdERhdGFi
YXNlQ21kLAojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgogICAgICAgIGtET01T
dG9yYWdlX2VuYWJsZUNtZCwKICAgICAgICBrRE9NU3RvcmFnZV9kaXNhYmxlQ21kLAogICAgICAg
IGtET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzQ21kLAogICAgICAgIGtET01TdG9yYWdl
X3NldERPTVN0b3JhZ2VJdGVtQ21kLAogICAgICAgIGtET01TdG9yYWdlX3JlbW92ZURPTVN0b3Jh
Z2VJdGVtQ21kLAogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5pZmVz
dHNDbWQsCiAgICAgICAga0FwcGxpY2F0aW9uQ2FjaGVfZW5hYmxlQ21kLAogICAgICAgIGtBcHBs
aWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWVDbWQsCiAgICAgICAga0FwcGxpY2F0aW9u
Q2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lQ21kLAojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQoKICAgICAgICBrRmlsZVN5c3RlbV9lbmFibGVDbWQsCiAgICAgICAga0ZpbGVTeXN0ZW1f
ZGlzYWJsZUNtZCwKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCiAgICAgICAga0RPTV9n
ZXREb2N1bWVudENtZCwKICAgICAgICBrRE9NX3JlcXVlc3RDaGlsZE5vZGVzQ21kLAogICAgICAg
IGtET01fcXVlcnlTZWxlY3RvckNtZCwKICAgICAgICBrRE9NX3F1ZXJ5U2VsZWN0b3JBbGxDbWQs
CiAgICAgICAga0RPTV9zZXROb2RlTmFtZUNtZCwKICAgICAgICBrRE9NX3NldE5vZGVWYWx1ZUNt
ZCwKICAgICAgICBrRE9NX3JlbW92ZU5vZGVDbWQsCiAgICAgICAga0RPTV9zZXRBdHRyaWJ1dGVW
YWx1ZUNtZCwKICAgICAgICBrRE9NX3NldEF0dHJpYnV0ZXNBc1RleHRDbWQsCiAgICAgICAga0RP
TV9yZW1vdmVBdHRyaWJ1dGVDbWQsCiAgICAgICAga0RPTV9nZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGVDbWQsCiAgICAgICAga0RPTV9nZXRPdXRlckhUTUxDbWQsCiAgICAgICAga0RPTV9zZXRPdXRl
ckhUTUxDbWQsCiAgICAgICAga0RPTV9wZXJmb3JtU2VhcmNoQ21kLAogICAgICAgIGtET01fZ2V0
U2VhcmNoUmVzdWx0c0NtZCwKICAgICAgICBrRE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzQ21kLAog
ICAgICAgIGtET01fcmVxdWVzdE5vZGVDbWQsCiAgICAgICAga0RPTV9zZXRJbnNwZWN0TW9kZUVu
YWJsZWRDbWQsCiAgICAgICAga0RPTV9oaWdobGlnaHRSZWN0Q21kLAogICAgICAgIGtET01faGln
aGxpZ2h0Tm9kZUNtZCwKICAgICAgICBrRE9NX2hpZGVIaWdobGlnaHRDbWQsCiAgICAgICAga0RP
TV9oaWdobGlnaHRGcmFtZUNtZCwKICAgICAgICBrRE9NX3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZENtZCwKICAgICAgICBrRE9NX3Jlc29sdmVOb2RlQ21kLAogICAgICAgIGtET01fZ2V0QXR0cmli
dXRlc0NtZCwKICAgICAgICBrRE9NX21vdmVUb0NtZCwKICAgICAgICBrQ1NTX2VuYWJsZUNtZCwK
ICAgICAgICBrQ1NTX2Rpc2FibGVDbWQsCiAgICAgICAga0NTU19nZXRNYXRjaGVkU3R5bGVzRm9y
Tm9kZUNtZCwKICAgICAgICBrQ1NTX2dldElubGluZVN0eWxlc0Zvck5vZGVDbWQsCiAgICAgICAg
a0NTU19nZXRDb21wdXRlZFN0eWxlRm9yTm9kZUNtZCwKICAgICAgICBrQ1NTX2dldEFsbFN0eWxl
U2hlZXRzQ21kLAogICAgICAgIGtDU1NfZ2V0U3R5bGVTaGVldENtZCwKICAgICAgICBrQ1NTX2dl
dFN0eWxlU2hlZXRUZXh0Q21kLAogICAgICAgIGtDU1Nfc2V0U3R5bGVTaGVldFRleHRDbWQsCiAg
ICAgICAga0NTU19zZXRQcm9wZXJ0eVRleHRDbWQsCiAgICAgICAga0NTU190b2dnbGVQcm9wZXJ0
eUNtZCwKICAgICAgICBrQ1NTX3NldFJ1bGVTZWxlY3RvckNtZCwKICAgICAgICBrQ1NTX2FkZFJ1
bGVDbWQsCiAgICAgICAga0NTU19nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzQ21kLAogICAgICAg
IGtDU1Nfc3RhcnRTZWxlY3RvclByb2ZpbGVyQ21kLAogICAgICAgIGtDU1Nfc3RvcFNlbGVjdG9y
UHJvZmlsZXJDbWQsCiAgICAgICAga1RpbWVsaW5lX3N0YXJ0Q21kLAogICAgICAgIGtUaW1lbGlu
ZV9zdG9wQ21kLAogICAgICAgIGtUaW1lbGluZV9zZXRJbmNsdWRlTWVtb3J5RGV0YWlsc0NtZCwK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICBrRGVidWdnZXJfY2F1c2Vz
UmVjb21waWxhdGlvbkNtZCwKICAgICAgICBrRGVidWdnZXJfc3VwcG9ydHNOYXRpdmVCcmVha3Bv
aW50c0NtZCwKICAgICAgICBrRGVidWdnZXJfZW5hYmxlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9k
aXNhYmxlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZUNtZCwKICAg
ICAgICBrRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJsQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9z
ZXRCcmVha3BvaW50Q21kLAogICAgICAgIGtEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50Q21kLAog
ICAgICAgIGtEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb25DbWQsCiAgICAgICAga0RlYnVnZ2Vy
X3N0ZXBPdmVyQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zdGVwSW50b0NtZCwKICAgICAgICBrRGVi
dWdnZXJfc3RlcE91dENtZCwKICAgICAgICBrRGVidWdnZXJfcGF1c2VDbWQsCiAgICAgICAga0Rl
YnVnZ2VyX3Jlc3VtZUNtZCwKICAgICAgICBrRGVidWdnZXJfc2VhcmNoSW5Db250ZW50Q21kLAog
ICAgICAgIGtEZWJ1Z2dlcl9jYW5TZXRTY3JpcHRTb3VyY2VDbWQsCiAgICAgICAga0RlYnVnZ2Vy
X3NldFNjcmlwdFNvdXJjZUNtZCwKICAgICAgICBrRGVidWdnZXJfZ2V0U2NyaXB0U291cmNlQ21k
LAogICAgICAgIGtEZWJ1Z2dlcl9nZXRGdW5jdGlvbkxvY2F0aW9uQ21kLAogICAgICAgIGtEZWJ1
Z2dlcl9zZXRQYXVzZU9uRXhjZXB0aW9uc0NtZCwKICAgICAgICBrRGVidWdnZXJfZXZhbHVhdGVP
bkNhbGxGcmFtZUNtZCwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICBrRE9NRGVidWdnZXJfc2V0RE9N
QnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfcmVtb3ZlRE9NQnJlYWtwb2ludENt
ZCwKICAgICAgICBrRE9NRGVidWdnZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRDbWQsCiAg
ICAgICAga0RPTURlYnVnZ2VyX3JlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50Q21kLAogICAg
ICAgIGtET01EZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50Q21kLAogICAgICAgIGtET01EZWJ1Z2dl
cl9yZW1vdmVYSFJCcmVha3BvaW50Q21kLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgIGtQcm9maWxl
cl9jYXVzZXNSZWNvbXBpbGF0aW9uQ21kLAogICAgICAgIGtQcm9maWxlcl9pc1NhbXBsaW5nQ21k
LAogICAgICAgIGtQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXJDbWQsCiAgICAgICAga1Byb2ZpbGVy
X2VuYWJsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfZGlzYWJsZUNtZCwKICAgICAgICBrUHJvZmls
ZXJfc3RhcnRDbWQsCiAgICAgICAga1Byb2ZpbGVyX3N0b3BDbWQsCiAgICAgICAga1Byb2ZpbGVy
X2dldFByb2ZpbGVIZWFkZXJzQ21kLAogICAgICAgIGtQcm9maWxlcl9nZXRQcm9maWxlQ21kLAog
ICAgICAgIGtQcm9maWxlcl9yZW1vdmVQcm9maWxlQ21kLAogICAgICAgIGtQcm9maWxlcl9jbGVh
clByb2ZpbGVzQ21kLAogICAgICAgIGtQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90Q21kLAogICAg
ICAgIGtQcm9maWxlcl9jb2xsZWN0R2FyYmFnZUNtZCwKICAgICAgICBrUHJvZmlsZXJfZ2V0T2Jq
ZWN0QnlIZWFwT2JqZWN0SWRDbWQsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICAgICAga1dvcmtlcl9zZXRXb3JrZXJJbnNwZWN0
aW9uRW5hYmxlZENtZCwKICAgICAgICBrV29ya2VyX3NlbmRNZXNzYWdlVG9Xb3JrZXJDbWQsCiAg
ICAgICAga1dvcmtlcl9jb25uZWN0VG9Xb3JrZXJDbWQsCiAgICAgICAga1dvcmtlcl9kaXNjb25u
ZWN0RnJvbVdvcmtlckNtZCwKICAgICAgICBrV29ya2VyX3NldEF1dG9jb25uZWN0VG9Xb3JrZXJz
Q21kLAojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgogICAgfTsKCiAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29tbWFuZE5hbWVzW107Cn07Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oKQoKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124327</attachid>
            <date>2012-01-27 09:13:05 -0800</date>
            <delta_ts>2012-01-30 00:57:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77062-20120127211303.patch</filename>
            <type>text/plain</type>
            <size>28738</size>
            <attacher name="Peter Rybin">prybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUzMDJhMzQ4OWFjOWIx
Nzg2NDNjOGU3ODlhNDY3MjZkYzFiZGVhOS4uY2FlMDViYzQ4ZTczMDUyZmVhNmQ2NzJiZDI2YWIy
N2ZmNGM0NzgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAxLTI1ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBjbGVhbiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NzA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
ZGUgZ2VuZXJhdG9yIGlzIGNoYW5nZWQuIE5vdyBpdCBnZW5lcmF0ZXMgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIKKyAgICAgICAgYXMgYW4gYWJzdHJhY3QgY2xhc3Mgc28gdGhhdCBpbXBsZW1l
bnRhdGlvbiBkZXRhaWxzIGNvdWxkIGJlIGZ1bGx5CisgICAgICAgIGhpZGRlbiBpbiAuY3BwIGZp
bGUgaW4gYSBzZXBhcmF0ZSAnaW1wbCcgY2xhc3MuIFRoaXMgc2hvdWxkIG1ha2UgLmgKKyAgICAg
ICAgZmlsZSBtb3JlIGNsZWFyLgorICAgICAgICBBbHNvIG5ldyBmb3JtYWwgaW50ZXJmYWNlcyB0
byBkb21haW4gYWdlbnRzIGFyZSBnZW5lcmF0ZWQuIFRoaXMgaXMgYW4KKyAgICAgICAgaW1wcm92
ZW1lbnQgb3ZlciB0aGUgY3VycmVudCBjYXNlIHdoZW4gaW50ZXJmYWNlcyB0byBhZ2VudHMgYXJl
CisgICAgICAgIGRlZmluZW4gaW1wbGljaXRseSBhdCBjYWxsaW5nIHNpdGVzLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChSYXdUeXBl
cyk6CisgICAgICAgIChSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwpOgorICAgICAgICAoUmF3VHlw
ZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcik6CisgICAgICAgIChSYXdUeXBlcy5PdXRwdXRQ
YXNzTW9kZWwuQnlQb2ludGVyLmdldF9hcmd1bWVudF9wcmVmaXgpOgorICAgICAgICAoUmF3VHlw
ZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlci5nZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KToK
KyAgICAgICAgKFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZSk6CisgICAgICAg
IChSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UuZ2V0X2FyZ3VtZW50X3ByZWZp
eCk6CisgICAgICAgIChSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UuZ2V0X3Bh
cmFtZXRlcl90eXBlX3N1ZmZpeCk6CisgICAgICAgIChSYXdUeXBlcy5CYXNlVHlwZS5pc19ldmVu
dF9wYXJhbV9jaGVja19vcHRpb25hbCk6CisgICAgICAgIChSYXdUeXBlcy5TdHJpbmcpOgorICAg
ICAgICAoUmF3VHlwZXMuU3RyaW5nLmdldF9vdXRwdXRfcGFzc19tb2RlbCk6CisgICAgICAgIChS
YXdUeXBlcy5TdHJpbmcuaXNfaGVhdnlfdmFsdWUpOgorICAgICAgICAoUmF3VHlwZXMuSW50KToK
KyAgICAgICAgKFJhd1R5cGVzLkludC5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwpOgorICAgICAgICAo
UmF3VHlwZXMuSW50LmlzX2hlYXZ5X3ZhbHVlKToKKyAgICAgICAgKFJhd1R5cGVzLk51bWJlcik6
CisgICAgICAgIChSYXdUeXBlcy5OdW1iZXIuZ2V0X291dHB1dF9wYXNzX21vZGVsKToKKyAgICAg
ICAgKFJhd1R5cGVzLk51bWJlci5pc19oZWF2eV92YWx1ZSk6CisgICAgICAgIChSYXdUeXBlcy5C
b29sLmdldF9jX3BhcmFtX3R5cGUpOgorICAgICAgICAoUmF3VHlwZXMuQm9vbCk6CisgICAgICAg
IChSYXdUeXBlcy5Cb29sLmdldF9vdXRwdXRfcGFzc19tb2RlbCk6CisgICAgICAgIChSYXdUeXBl
cy5Cb29sLmlzX2hlYXZ5X3ZhbHVlKToKKyAgICAgICAgKFJhd1R5cGVzLk9iamVjdCk6CisgICAg
ICAgIChSYXdUeXBlcy5PYmplY3QuZ2V0X291dHB1dF9wYXNzX21vZGVsKToKKyAgICAgICAgKFJh
d1R5cGVzLk9iamVjdC5pc19oZWF2eV92YWx1ZSk6CisgICAgICAgIChSYXdUeXBlcy5BbnkuZ2V0
X2NfaW5pdGlhbGl6ZXIpOgorICAgICAgICAoUmF3VHlwZXMuQW55KToKKyAgICAgICAgKFJhd1R5
cGVzLkFueS5nZXRfb3V0cHV0X3Bhc3NfbW9kZWwpOgorICAgICAgICAoUmF3VHlwZXMuQW55Lmlz
X2hlYXZ5X3ZhbHVlKToKKyAgICAgICAgKFJhd1R5cGVzLkFycmF5KToKKyAgICAgICAgKFJhd1R5
cGVzLkFycmF5LmdldF9vdXRwdXRfcGFzc19tb2RlbCk6CisgICAgICAgIChSYXdUeXBlcy5BcnJh
eS5pc19oZWF2eV92YWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGwpOgorICAgICAgICAodm9pZCk6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmdvKToKKyAgICAgICAgKEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCk6CisgICAgICAgICogaW5zcGVj
dG9yL1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VySW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKToKKwogMjAxMi0wMS0yNSAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNTgyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggNmQ1ZWEyYzNhNzU4NmRiOTNh
Y2E0OTQ0M2NmNmJkZDFmNTFiNTlkYy4uZTIxZmNmNmQ1YTAzMjU1YzdlZmVkN2Q3YTUyZWQwNmRl
NzRmMjY5ZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKQEAgLTIxOSw2ICsyMTksMjYgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0
KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0
eXBlOiAlcyIgJSBqc29uX3R5cGUpCiAKKyAgICAjIEZvciBvdXRwdXQgcGFyYW1ldGVyIGFsbCB2
YWx1ZXMgYXJlIHBhc3NlZCBieSBwb2ludGVyIGV4Y2VwdCBSZWZQdHItYmFzZWQgdHlwZXMuCisg
ICAgY2xhc3MgT3V0cHV0UGFzc01vZGVsOgorICAgICAgICBjbGFzcyBCeVBvaW50ZXI6CisgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZp
eCgpOgorICAgICAgICAgICAgICAgIHJldHVybiAiJiIKKworICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgZGVmIGdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIioiCisKKyAgICAgICAgY2xhc3MgQnlSZWZlcmVuY2U6CisgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZp
eCgpOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICBkZWYgZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpOgorICAgICAg
ICAgICAgICAgIHJldHVybiAiJiIKKwogICAgIGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6CiAgICAg
ICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCiAKQEAgLTIzMCwxMCArMjUw
LDYgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFt
X2NoZWNrX29wdGlvbmFsKCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgot
ICAgICAgICAgICAgcmV0dXJuICImIgotCiAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICBk
ZWYgcmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6CiAgICAgICAgICAgICBp
ZiBub3QgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKQEAgLTI5Myw2ICszMDksMTQg
QEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFt
ZSA9ICJTdHJpbmciCiAgICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKIAor
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwo
KToKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVy
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCisKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJh
bVR5cGUoIlN0cmluZyIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3Qg
U3RyaW5nJiIpCiAKQEAgLTMyMSw2ICszNDUsMTQgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToK
ICAgICAgICAgICAgICAgICBhc19tZXRob2RfbmFtZSA9ICJOdW1iZXIiCiAgICAgICAgICAgICBy
ZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJldHVybiBSYXdU
eXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
CiAgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgiaW50IikKIAogICAg
IGNsYXNzIE51bWJlcihCYXNlVHlwZSk6CkBAIC0zNDQsMTIgKzM3NiwyMCBAQCBjbGFzcyBSYXdU
eXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToK
ICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCiAKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6CisgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKwogICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRv
dWJsZSIpCiAKICAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKICAgICAgICAgQGNsYXNzbWV0aG9k
CiAgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwp
OgotICAgICAgICAgICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAgICAg
ICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgogICAgICAgICAgICAgICAg
IGlmIG9wdGlvbmFsOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBl
CiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTM3OSw2ICs0MTksMTQgQEAgY2xhc3MgUmF3VHlw
ZXMob2JqZWN0KToKICAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6CiAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQogCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgorICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKICAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoImJvb2wiKQogICAg
ICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNvbnN0IiwgIiolcyIp
CiAKQEAgLTQxNiw2ICs0NjQsMTQgQEAgY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKICAgICAgICAg
ZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6CiAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlRPRE8iKQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9v
dXRwdXRfcGFzc19tb2RlbCgpOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBh
c3NNb2RlbC5CeVJlZmVyZW5jZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGlzX2hlYXZ5X3ZhbHVlKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAgICAgICAgIF9w
bGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCiAgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IikKIApAQCAtNDM1LDcgKzQ5MSw3IEBAIGNsYXNzIFJhd1R5cGVzKG9iamVjdCk6CiAKICAgICAg
ICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgpIgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAg
ICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgpAQCAtNDU2LDYgKzUxMiwxNCBAQCBjbGFzcyBS
YXdUeXBlcyhvYmplY3QpOgogICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0
KCk6CiAgICAgICAgICAgICByZXR1cm4gImFzc2VydEFueSIKIAorICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPElu
c3BlY3RvclZhbHVlPiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4iKQogCkBAIC00OTUsNiArNTU5LDE0IEBAIGNsYXNzIFJhd1R5
cGVzKG9iamVjdCk6CiAgICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgog
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKIAorICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKKyAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKwogICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPElu
c3BlY3RvckFycmF5PiIpCiAgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4iKQogCkBAIC0xNTIxLDcgKzE1OTMsNyBAQCAke2Zyb250ZW5k
RG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoSW5zcAogIiIiKQogCiAgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxh
dGUoCi0iIiJ2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRt
ZXRob2ROYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiR7ZG9tYWluTmFt
ZX1fJG1ldGhvZE5hbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKIApAQCAtMTYxNSwxNCArMTY4NywxMiBAQCB0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CiBwdWJs
aWM6Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotJGNvbnN0cnVjdG9ySW5pdAot
ICAgIHsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpOwogCi0kc2V0dGVycworJGFnZW50SW50ZXJmYWNlcworJHZpcnR1YWxTZXR0ZXJzCiAKLSAg
ICB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsg
fQorICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCkgPSAwOwogCiAgICAgZW51bSBDb21t
b25FcnJvckNvZGUgewogICAgICAgICBQYXJzZUVycm9yID0gMCwKQEAgLTE2MzUsOCArMTcwNSw4
IEBAICRzZXR0ZXJzCiAgICAgfTsKIAogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25z
dCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
KiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OwotICAgIHZvaWQgZGlz
cGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSA9IDA7CiAgICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCk7CiAKICAgICBlbnVtIE1ldGhvZE5hbWVzIHsKQEAgLTE2
NDQsMTkgKzE3MTQsNiBAQCAkbWV0aG9kTmFtZXNFbnVtQ29udGVudAogICAgIH07CiAKICAgICBz
dGF0aWMgY29uc3QgY2hhciogY29tbWFuZE5hbWVzW107Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IGludCBnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOwotICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdl
dE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3Ry
aW5nIGludm9jYXRpb25FcnJvcik7Ci0KLSRtZXRob2REZWNsYXJhdGlvbnMKLQotICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci0kZmllbGRE
ZWNsYXJhdGlvbnMKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTE2ODgsMTEgKzE3
NDUsNDYgQEAgJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKIH07CiAKIAorY2xhc3MgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsIDogcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorJGNvbnN0
cnVjdG9ySW5pdAorICAgIHsgfQorCisgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisgICAgdXNpbmcgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3I7CisKKyRzZXR0ZXJzCitw
cml2YXRlOgorJG1ldGhvZERlY2xhcmF0aW9ucworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyRmaWVsZERlY2xhcmF0aW9ucworCisg
ICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
Y2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMs
IEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7CisKK307CisKICRtZXRob2RzCi12b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSk7Cit9CisKKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QgPSB0aGlzOwotICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVj
dCk7CisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OipD
YWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwogICAg
IGxvbmcgY2FsbElkID0gMDsKQEAgLTE3NTAsNyArMTg0Miw3IEBAICRtZXNzYWdlSGFuZGxlcnMK
ICAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcg
Y2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMs
IEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9y
KQogewogICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3Rv
Y29sRXJyb3JzKTsKQEAgLTE3NzMsNyArMTg2NSw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBD
CiAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNv
bnN0Cit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6cmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkg
Y29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJy
b3JzLCk7CiAgICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKQEAgLTE4MDMsNyArMTg5
NSw3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDCiAgICAgICAgIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCi1pbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCitpbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewog
ICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CiAKQEAgLTE4MzcsNyArMTkyOSw3IEBAIGludCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1TdHJpbmcgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRT
dHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CiAKQEAgLTE4NzEsNyArMTk2Myw3IEBAIFN0cmluZyBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1ib29sIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRCb29sZWFuKEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKIHsKICAgICBBU1NFUlQocHJvdG9jb2xF
cnJvcnMpOwogCkBAIC0xOTA1LDcgKzE5OTcsNyBAQCBib29sIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbgog
ICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycykKIHsKICAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwogCkBAIC0xOTM5LDcgKzIw
MzEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplYwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Z2V0QXJyYXko
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQogewogICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7CiAKQEAgLTE5NzIsNiArMjA2NCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmpl
Y3QqCiAgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CiAgICAgcmV0dXJuIHZhbHVlOwog
fQorCiBib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21tYW5kTmFtZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KQogewogICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwpAQCAt
MjA0MSw4ICsyMTM0LDggQEAgJHZhbGlkYXRvckNvZGUKIAogICAgIHR5cGVidWlsZGVyX2ggPSBz
dHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsKICIiIgotI2lmbmRlZiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcl9oCi0jZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyNp
Zm5kZWYgSW5zcGVjdG9yVHlwZUJ1aWxkZXJfaAorI2RlZmluZSBJbnNwZWN0b3JUeXBlQnVpbGRl
cl9oCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjA1Miw3ICsyMTQ1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogZXh0ZXJuIGJvb2wgdHlwZUJ1aWxkZXJUZXN0VmFyaWFibGU7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcl9oKQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclR5cGVCdWlsZGVyX2gp
CiAKICIiIikKIApAQCAtMjIyMCw2ICsyMzEzLDggQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgIGZy
b250ZW5kX21ldGhvZF9saXN0ID0gW10KICAgICBiYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0ID0gW10KIAorICAgIGJhY2tlbmRfdmlydHVhbF9zZXR0ZXJzX2xpc3QgPSBbXQorICAg
IGJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QgPSBbXQogICAgIGJhY2tlbmRfc2V0dGVyc19s
aXN0ID0gW10KICAgICBiYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCiAgICAgYmFj
a2VuZF9maWVsZF9saXN0ID0gW10KQEAgLTIyNDIsNiArMjMzNyw3IEBAIGNsYXNzIEdlbmVyYXRv
cjoKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0
LAogICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xp
c3QsCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlv
bl9saXN0LAorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xp
c3QsCiAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsCiAg
ICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LAogICAg
ICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcywKQEAgLTIyODEs
OSArMjM3NywxMyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgZG9tYWluRmll
bGROYW1lPWRvbWFpbl9uYW1lX2xvd2VyLAogICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWlu
TWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oZmxhdHRlbl9saXN0KGZyb250ZW5kX21ldGhvZF9kZWNs
YXJhdGlvbl9saW5lcyksICIiKSkpCiAKKyAgICAgICAgICAgIGFnZW50X2ludGVyZmFjZV9uYW1l
ID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAi
Q29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRl
cmZhY2VfbGlzdC5hcHBlbmQoIiAgICBjbGFzcyAlcyB7XG4iICUgYWdlbnRfaW50ZXJmYWNlX25h
bWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5h
cHBlbmQoIiAgICBwdWJsaWM6XG4iKQogICAgICAgICAgICAgaWYgImNvbW1hbmRzIiBpbiBqc29u
X2RvbWFpbjoKICAgICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGluIGpzb25fZG9tYWlu
WyJjb21tYW5kcyJdOgogICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19jb21t
YW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpCisgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB9
O1xuXG4iKQogCiAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6CiAgICAgICAgICAgICAgICAg
Zm9yIGwgaW4gcmV2ZXJzZWQoZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCk6CkBAIC0y
Mjk1LDYgKzIzOTUsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgc29ydGVkX2N5Y2xl
X2d1YXJkYWJsZV9saXN0X2xpc3QgPSBbCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9j
b25zdHJ1Y3Rvcl9pbml0X2xpc3QsCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF92aXJ0
dWFsX3NldHRlcnNfbGlzdCwKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX3NldHRlcnNf
bGlzdCwKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsCiAgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsCkBAIC0yMzEwLDExICsyNDExLDE0
IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICBmb3IgbCBpbiBzb3J0ZWRfY3lj
bGVfZ3VhcmRhYmxlX2xpc3RfbGlzdDoKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJk
LmdlbmVyYXRlX29wZW4obCkKIAorICAgICAgICAgICAgYWdlbnRfaW50ZXJmYWNlX25hbWUgPSBD
YXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKGRvbWFpbl9uYW1lKSArICJDb21t
YW5kSGFuZGxlciIKKwogICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2ZpeGVz
LmFnZW50X3R5cGVfbmFtZQogICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9m
aXhlcy5hZ2VudF9maWVsZF9uYW1lCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25z
dHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAgICAgICwgbV8lcygwKSIgJSBhZ2VudF9maWVs
ZF9uYW1lKQotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVyc19saXN0LmFwcGVu
ZCgiICAgIHZvaWQgcmVnaXN0ZXJBZ2VudCglcyogJXMpIHsgQVNTRVJUKCFtXyVzKTsgbV8lcyA9
ICVzOyB9IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxk
X25hbWUsIGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQotICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdC5hcHBlbmQoIiAgICAlcyogbV8lczsiICUgKGFn
ZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgcmVn
aXN0ZXJBZ2VudCglcyAvKiAlcyAqLyogJXMpID0gMDsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdl
bnRfaW50ZXJmYWNlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfc2V0dGVyc19saXN0LmFwcGVuZCgiICAgIHZvaWQgcmVnaXN0ZXJBZ2VudCgl
cyAvKiAlcyAqLyogJXMpIHsgQVNTRVJUKCFtXyVzKTsgbV8lcyA9ICVzOyB9IiAlIChhZ2VudF90
eXBlX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9m
aWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMgLyogJXMgKi8q
IG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9m
aWVsZF9uYW1lKSkKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdC5h
cHBlbmQoImNsYXNzICVzOyIgJSBhZ2VudF90eXBlX25hbWUpCiAgICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9pbmNsdWRlX2xpc3QuYXBwZW5kKCIjaW5jbHVkZSBcIiVzLmhcIiIgJSBhZ2Vu
dF90eXBlX25hbWUpCiAKQEAgLTI0MTgsOSArMjUyMiwxMSBAQCBjbGFzcyBHZW5lcmF0b3I6CiAg
ICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9m
aWVsZF9uYW1lKToKICAgICAgICAganNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5h
bWUiXQogICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAg
ICAgICBrJXNfJXNDbWQsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQot
ICAgICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNv
bl9jb21tYW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdC5h
cHBlbmQoIiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OiVzXyVz
LCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlc18lcyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAlIChk
b21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQogCisgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgICAgICB2aXJ0dWFsIHZvaWQgJXMo
RXJyb3JTdHJpbmcqIiAlIGpzb25fY29tbWFuZF9uYW1lKQorCiAgICAgICAgIG1ldGhvZF9pbl9j
b2RlID0gIiIKICAgICAgICAgbWV0aG9kX291dF9jb2RlID0gIiIKICAgICAgICAgYWdlbnRfY2Fs
bF9wYXJhbV9saXN0ID0gW10KQEAgLTI0MzksMjAgKzI1NDUsMjggQEAgY2xhc3MgR2VuZXJhdG9y
OgogICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJhbV9yYXdfdHlw
ZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCiAKICAgICAgICAgICAgICAgICB2YXJfdHlw
ZSA9IHBhcmFtX3Jhd190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLklOUFVULCBOb25l
KQorICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlID0gdmFyX3R5cGUKICAgICAgICAg
ICAgICAgICBnZXR0ZXJfbmFtZSA9IHBhcmFtX3Jhd190eXBlLmdldF9nZXR0ZXJfbmFtZSgpCiAK
LSAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29u
X3BhcmFtZXRlclsib3B0aW9uYWwiXToKKyAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGpzb25f
cGFyYW1ldGVyLmdldCgib3B0aW9uYWwiKQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgog
ICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFs
c2U7XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlcyBpbl8lcyA9IGdldCVz
KHBhcmFtc0NvbnRhaW5lclB0ciwgXCIlc1wiLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpO1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1l
LCB2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29u
X3BhcmFtX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFt
ID0gIiwgJXNfdmFsdWVGb3VuZCA/ICZpbl8lcyA6IDAiICUgKGpzb25fcGFyYW1fbmFtZSwganNv
bl9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0
ZXJuID0gImNvbnN0ICVzKiIKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
ICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwi
JXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUs
IGpzb25fcGFyYW1fbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMi
ICUganNvbl9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtX3Jhd190eXBl
LmlzX2hlYXZ5X3ZhbHVlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1f
dHlwZV9wYXR0ZXJuID0gImNvbnN0ICVzJiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiJXMiCiAK
ICAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBjb2RlCiAgICAgICAgICAgICAgICAg
YWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgaW5fJXMiICUg
KGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gJSBmb3JtYWxfcGFyYW1fdHlwZS5nZXRfdGV4dCgp
LCBqc29uX3BhcmFtX25hbWUpKQogCiAgICAgICAgICAgICAgICAganNfYmluZF90eXBlID0gcGFy
YW1fcmF3X3R5cGUuZ2V0X2pzX2JpbmRfdHlwZSgpCiAgICAgICAgICAgICAgICAganNfcGFyYW1f
dGV4dCA9ICJ7XCJuYW1lXCI6IFwiJXNcIiwgXCJ0eXBlXCI6IFwiJXNcIiwgXCJvcHRpb25hbFwi
OiAlc30iICUgKApAQCAtMjQ4MCwxNyArMjU5NCwxOCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAg
ICAgICAgICAgICAgdmFyX3R5cGUgPSByYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlw
ZS5PVVRQVVQsIE5vbmUpCiAKICAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMg
PSAlcztcbiIgJSAodmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlh
bGl6ZXIpCi0gICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAocmF3X3R5cGUu
Z2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkKKyAgICAgICAg
ICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlIChyYXdfdHlwZS5nZXRfb3V0cHV0X3Bhc3Nf
bW9kZWwoKS5nZXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCiAgICAgICAg
ICAgICAgICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRfJXMpO1xu
IiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFtZSkKICAg
ICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRklY
TUU6IHN1cHBvcnQgb3B0aW9uYWwgcHJvcGVybHkuIFByb2JhYmx5IGFuIGFkZGl0aW9uYWwgb3V0
cHV0IHBhcmFtZXRlciBzaG91bGQgYmUgaW4gZWFjaCBjYXNlLgogICAgICAgICAgICAgICAgICAg
ICBpZiB2YXJfdHlwZS5nZXRfdGV4dCgpID09ICJib29sIjoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFt
ZSkgKyBjb29rCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAjIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFscy4KICAgICAgICAgICAgICAgICAgICAgICAg
IGNvb2sgPSAiICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBvcHRpb25hbCBoZXJlLlxuIiArIGNv
b2sKIAogICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSBjb2RlCiAgICAgICAgICAg
ICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMlcyBv
dXRfJXMiICUgKHZhcl90eXBlLmdldF90ZXh0KCksIHJhd190eXBlLmdldF9vdXRwdXRfcGFzc19t
b2RlbCgpLmdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKSwganNvbl9yZXR1cm5fbmFtZSkpCiAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VfY29va19saXN0LmFwcGVuZChjb29rKQogCiAgICAgICAg
ICAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0LmFwcGVuZCgiXCIlc1wiIiAlIGpz
b25fcmV0dXJuX25hbWUpCkBAIC0yNTEwLDYgKzI2MjUsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBw
ZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkK
IAogICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5h
cHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKFwiJXMuJXNcIiwgWyVzXSwg
JXMpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNf
dGV4dCwganNfcmVwbHlfbGlzdCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2lu
dGVyZmFjZV9saXN0LmFwcGVuZCgiKSA9IDA7XG4iKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToKQEAgLTI2MDQsMTcgKzI3MjAsMTkgQEAgYmFj
a2VuZF9qc19maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tl
bmRTdHViLmpzIiwgInciKQogCiAKIGJhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNr
ZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRv
ci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCi0gICAgc2V0dGVycz1qb2lu
KEdlbmVyYXRvci5iYWNrZW5kX3NldHRlcnNfbGlzdCwgIlxuIiksCisgICAgdmlydHVhbFNldHRl
cnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdCwgIlxuIiksCisg
ICAgYWdlbnRJbnRlcmZhY2VzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNl
X2xpc3QsICIiKSwKICAgICBtZXRob2ROYW1lc0VudW1Db250ZW50PWpvaW4oR2VuZXJhdG9yLm1l
dGhvZF9uYW1lX2VudW1fbGlzdCwgIlxuIiksCi0gICAgbWV0aG9kRGVjbGFyYXRpb25zPWpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAotICAgIGZp
ZWxkRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdCwgIlxuIiks
CiAgICAgZm9yd2FyZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRf
bGlzdCwgIlxuIikpKQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5k
X2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9y
LmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKKyAgICBzZXR0ZXJzPWpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVyc19saXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0
aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAogICAgIG1ldGhv
ZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNs
YXJhdGlvbl9saXN0LCAiXG4iKSwKICAgICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2luY2x1ZGVfbGlzdCwgIlxuIiksCiAgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBtZXRob2REZWNsYXJhdGlv
bnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCwgIlxuIiks
CiAgICAgbWVzc2FnZUhhbmRsZXJzPWpvaW4oR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3Qs
ICJcbiIpKSkKIAogZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9oLnN1
YnN0aXR1dGUoTm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCBhYjZmMDc4NWRlN2Y2ZGUxNTU3ODMyMDQ3MTBhN2Q2MWUxZjk1
MzUwLi5hOTQyZDA4ODg3YzJjMzk2NDdlYmFlYjdjMWFhMzI5ZTMxNjcxOTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yMTgs
NyArMjE4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCk7CiAKICAgICBB
U1NFUlQobV9pbnNwZWN0b3JDbGllbnQpOwotICAgIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobV9pbnNwZWN0b3JD
bGllbnQpKTsKKyAgICBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShtX2luc3BlY3RvckNsaWVudCk7CiAKICAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogZGlzcGF0Y2hlciA9IG1faW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7CiAgICAgZm9yIChBZ2VudHM6Oml0ZXJhdG9yIGl0ID0gbV9hZ2VudHMuYmVn
aW4oKTsgaXQgIT0gbV9hZ2VudHMuZW5kKCk7ICsraXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZTM4MDFj
NmU0MmZkZDZkZjRmZGNjMTU4Zjc3ZWVjNzJjYThjZjhlMS4uNzlkYjM1ZjI5MWJiMDEwMDNhNDI5
NDkzY2RlNGQwOGM1YWI2MTM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZv
aWQgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICBtX3N0
YXRlLT51bm11dGUoKTsKICAgICBtX2Zyb250ZW5kQ2hhbm5lbCA9IGFkb3B0UHRyKG5ldyBQYWdl
SW5zcGVjdG9yUHJveHkobV93b3JrZXJDb250ZXh0KSk7CiAgICAgbV9mcm9udGVuZCA9IGFkb3B0
UHRyKG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2Zyb250ZW5kQ2hhbm5lbC5nZXQoKSkpOwotICAg
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIobV9mcm9udGVuZENoYW5uZWwuZ2V0KCkpKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShtX2Zyb250ZW5kQ2hhbm5lbC5n
ZXQoKSk7CiAgICAgbV9jb25zb2xlQWdlbnQtPnJlZ2lzdGVySW5EaXNwYXRjaGVyKG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCkpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
IG1fZGVidWdnZXJBZ2VudC0+cmVnaXN0ZXJJbkRpc3BhdGNoZXIobV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>