<?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>74954</bug_id>
          
          <creation_ts>2011-12-20 14:05:45 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: generate enum types.</short_desc>
          <delta_ts>2012-01-11 06:18:27 -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>
          <dependson>72861</dependson>
    
    <dependson>75307</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>524810</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-20 14:05:45 -0800</bug_when>
    <thetext>Generate enum types in C++ TypeBuilder.
As we discussed with caseq@, JSON enums are morphed into C++ enums with its numeric values pointing to an actual string value in pre-build array.
This also requires setter methods to become overloaded so that both old string-based and new enum-based code styles could co-exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526365</commentid>
    <comment_count>1</comment_count>
      <attachid>120340</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-22 10:55:31 -0800</bug_when>
    <thetext>Created attachment 120340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526367</commentid>
    <comment_count>2</comment_count>
      <attachid>120341</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-22 10:57:29 -0800</bug_when>
    <thetext>Created attachment 120341
Sample InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526370</commentid>
    <comment_count>3</comment_count>
      <attachid>120342</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-22 10:58:32 -0800</bug_when>
    <thetext>Created attachment 120342
Sample InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526407</commentid>
    <comment_count>4</comment_count>
      <attachid>120356</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-22 11:49:28 -0800</bug_when>
    <thetext>Created attachment 120356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526424</commentid>
    <comment_count>5</comment_count>
      <attachid>120356</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-22 12:12:31 -0800</bug_when>
    <thetext>Comment on attachment 120356
Patch

Attachment 120356 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10997623</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526434</commentid>
    <comment_count>6</comment_count>
      <attachid>120356</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-22 12:18:15 -0800</bug_when>
    <thetext>Comment on attachment 120356
Patch

Attachment 120356 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10997627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526439</commentid>
    <comment_count>7</comment_count>
      <attachid>120356</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 12:22:44 -0800</bug_when>
    <thetext>Comment on attachment 120356
Patch

Attachment 120356 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11001595</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526448</commentid>
    <comment_count>8</comment_count>
      <attachid>120356</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-22 12:35:00 -0800</bug_when>
    <thetext>Comment on attachment 120356
Patch

Attachment 120356 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10997636</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526461</commentid>
    <comment_count>9</comment_count>
      <attachid>120367</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-22 12:57:09 -0800</bug_when>
    <thetext>Created attachment 120367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526824</commentid>
    <comment_count>10</comment_count>
      <attachid>120456</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-23 04:16:50 -0800</bug_when>
    <thetext>Created attachment 120456
For win trybot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526834</commentid>
    <comment_count>11</comment_count>
      <attachid>120460</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-23 05:18:50 -0800</bug_when>
    <thetext>Created attachment 120460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526835</commentid>
    <comment_count>12</comment_count>
      <attachid>120461</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-23 05:20:11 -0800</bug_when>
    <thetext>Created attachment 120461
Sample InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526843</commentid>
    <comment_count>13</comment_count>
      <attachid>120463</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-23 05:58:28 -0800</bug_when>
    <thetext>Created attachment 120463
For win trybot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526855</commentid>
    <comment_count>14</comment_count>
      <attachid>120465</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-23 07:47:40 -0800</bug_when>
    <thetext>Created attachment 120465
For win trybot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526860</commentid>
    <comment_count>15</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-23 08:14:31 -0800</bug_when>
    <thetext>I&apos;d like to see enum constants declared as CamelCase according to WebKit style guide. 

Rule Names:12.  Enum members should user InterCaps with an initial capital letter.

If it is not possible then I prefer the chromium style kCamelCase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527384</commentid>
    <comment_count>16</comment_count>
      <attachid>120595</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 09:41:48 -0800</bug_when>
    <thetext>Created attachment 120595
For trybots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527397</commentid>
    <comment_count>17</comment_count>
      <attachid>120599</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:03:20 -0800</bug_when>
    <thetext>Created attachment 120599
InspectorFrontend.h base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527399</commentid>
    <comment_count>18</comment_count>
      <attachid>120600</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:04:28 -0800</bug_when>
    <thetext>Created attachment 120600
InspectorFrontend.cpp base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527405</commentid>
    <comment_count>19</comment_count>
      <attachid>120601</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:25:27 -0800</bug_when>
    <thetext>Created attachment 120601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527406</commentid>
    <comment_count>20</comment_count>
      <attachid>120602</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:26:43 -0800</bug_when>
    <thetext>Created attachment 120602
New InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527409</commentid>
    <comment_count>21</comment_count>
      <attachid>120603</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:28:19 -0800</bug_when>
    <thetext>Created attachment 120603
New InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527411</commentid>
    <comment_count>22</comment_count>
      <attachid>120604</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 10:31:36 -0800</bug_when>
    <thetext>Created attachment 120604
Generator output diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527423</commentid>
    <comment_count>23</comment_count>
      <attachid>120601</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-27 11:28:36 -0800</bug_when>
    <thetext>Comment on attachment 120601
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:54
&gt; +    &quot;&quot;: &quot;Empty&quot;,

Please change this to some non-empty constant (&quot;regular&quot; should be find for CSSRule.origin as we discussed offline) or  file a bug about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527624</commentid>
    <comment_count>24</comment_count>
      <attachid>120601</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-28 05:29:47 -0800</bug_when>
    <thetext>Comment on attachment 120601
Patch

Clearing flags on attachment: 120601

Committed r103763: &lt;http://trac.webkit.org/changeset/103763&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527625</commentid>
    <comment_count>25</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-28 05:30:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527660</commentid>
    <comment_count>26</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-28 06:58:18 -0800</bug_when>
    <thetext>Reopening since the patch was rolled out in https://bugs.webkit.org/show_bug.cgi?id=75307 due to Mac compile failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527676</commentid>
    <comment_count>27</comment_count>
      <attachid>120671</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-28 08:18:52 -0800</bug_when>
    <thetext>Created attachment 120671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527678</commentid>
    <comment_count>28</comment_count>
      <attachid>120673</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-28 08:25:27 -0800</bug_when>
    <thetext>Created attachment 120673
New InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527679</commentid>
    <comment_count>29</comment_count>
      <attachid>120674</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-28 08:26:03 -0800</bug_when>
    <thetext>Created attachment 120674
New InspectorFrontend.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527680</commentid>
    <comment_count>30</comment_count>
      <attachid>120675</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-28 08:27:32 -0800</bug_when>
    <thetext>Created attachment 120675
Generator output diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527682</commentid>
    <comment_count>31</comment_count>
      <attachid>120676</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-12-28 08:35:04 -0800</bug_when>
    <thetext>Created attachment 120676
Same patch to test it on Mac bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533842</commentid>
    <comment_count>32</comment_count>
      <attachid>120671</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-11 06:18:00 -0800</bug_when>
    <thetext>Comment on attachment 120671
Patch

Clearing flags on attachment: 120671

Committed r104707: &lt;http://trac.webkit.org/changeset/104707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533843</commentid>
    <comment_count>33</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-11 06:18:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120340</attachid>
            <date>2011-12-22 10:55:31 -0800</date>
            <delta_ts>2011-12-22 11:49:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111222225528.patch</filename>
            <type>text/plain</type>
            <size>17465</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi44NTA4N2VlZjZhYjVhMzU3
NTgwNTc0MmYwNTI4MmUwODE4MWVhODg0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsNiArNTEsOCBAQCBET01BSU5f
REVGSU5FX05BTUVfTUFQID0gewogIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSBy
ZXBsYWNlbWVudHMuCiBUWVBFX05BTUVfRklYX01BUCA9IHsKICAgICAiUkdCQSI6ICJSZ2JhIiwg
ICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUg
aW4gV2luZG93cyBDRS4KKyAgICAiTlVMTCI6ICJOdWxsIiwKKyAgICAiIjogIkVNUFRZX05BTUUi
LAogfQogCiAKQEAgLTUxOSw2ICs1MjEsMjggQEAgY2xhc3MgV3JpdGVyOgogICAgICAgICByZXR1
cm4gV3JpdGVyKG5ld19vdXRwdXQsIHNlbGYuaW5kZW50ICsgYWRkaXRpb25hbF9pbmRlbnQpCiAK
IAorY2xhc3MgRW51bUNvbnN0YW50czoKKyAgICBtYXBfID0ge30KKyAgICBjb25zdGFudHNfID0g
W10KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGRfY29uc3RhbnQoY2xzLCB2YWx1ZSk6
CisgICAgICAgIGlmIHZhbHVlIGluIGNscy5tYXBfOgorICAgICAgICAgICAgcmV0dXJuIGNscy5t
YXBfW3ZhbHVlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9zID0gbGVuKGNscy5tYXBf
KQorICAgICAgICAgICAgY2xzLm1hcF9bdmFsdWVdID0gcG9zCisgICAgICAgICAgICBjbHMuY29u
c3RhbnRzXy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gcG9zCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgZ2V0X2VudW1fY29uc3RhbnRfY29kZShjbHMpOgorICAgICAgICBv
dXRwdXQgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiBjbHMuY29uc3RhbnRzXzoKKyAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIiAgICBcIiIgKyBpdGVtICsgIlwiIikKKyAgICAgICAgcmV0dXJu
IGpvaW4ob3V0cHV0LCAiLFxuIikgKyAiXG4iCisKKwogY2xhc3MgVHlwZUJpbmRpbmdzOgogICAg
IEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNv
bl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCB0eXBlX2RhdGEpOgpAQCAtNTI2LDYgKzU1
MCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICBjbGFzcyBIZWxwZXI6CiAgICAg
ICAgICAgICBpc19hZF9ob2MgPSBGYWxzZQorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeCA9
ICJUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCiAKICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAg
LTU0Niw2ICs1NzEsNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgZGVmIGNyZWF0ZV9hZF9o
b2NfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGFk
X2hvY190eXBlX2NvbnRleHQpOgogICAgICAgICBjbGFzcyBIZWxwZXI6CiAgICAgICAgICAgICBp
c19hZF9ob2MgPSBUcnVlCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4ID0gIiIKIAogICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIp
OgpAQCAtNTcxLDIzICs1OTcsMjggQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVy
YXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb21tZW50X291dDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlciA9IHdyaXRlci5nZXRfaW5kZW50ZWQoIi8vICIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGFibGVbImVudW0iXQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlw
ZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIm5hbWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgic3RydWN0ICIpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1lKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBlbnVtIEVudW0ge1xuIikKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRzLmFkZF9j
b25zdGFudChlbnVtX2l0ZW0pCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGl0ZW1fY19uYW1lID0gZW51bV9pdGVtLnJlcGxhY2UoJy0nLCAnXycpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY29uc3QgY2hhciogY29uc3Qg
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoQ2Fw
aXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihpdGVtX2NfbmFtZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSBcIiIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1faXRlbSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlwiO1xu
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn0gLy8g
bmFtZXNwYWNlICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2Nf
bmFtZSA9IENhcGl0YWxpemVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNj
b3JlcyhpdGVtX2NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGl0ZW1fY19uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gVFlQRV9OQU1FX0ZJWF9NQVBbaXRlbV9j
X25hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAgICAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZChpdGVtX2NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIiA9ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIlcyIgJSBlbnVtX3BvcykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIixcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfTtcbiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuXG4iKQogCkBAIC01OTksNyAr
NjMwLDExIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMs
IG9wdGlvbmFsKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5n
ZXRfdGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXggKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisKKyAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMpIgogCiAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdf
dHlwZSgpOgpAQCAtNjMzLDYgKzY2OCwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAorICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJl
c3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwog
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKICAgICAgICAgICAgICAgICAgICAg
ICAgICNGSVhNRTogcmV0dXJuIGEgdHlwZWRlZiBuYW1lIGluc3RlYWQuCkBAIC03MTUsMjggKzc1
NCwzMiBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBj
b250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcu
cmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fcmF3X3R5cGUu
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdl
dF90ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1f
dHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoIiIiCisjICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3Rh
dGVkX3R5cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5U
WVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKKyMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVf
dGV4dChGYWxzZSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw
YXJhbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBl
X2JpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lX211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0
JXMoJXMgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXQlcygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwg
JXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1z
W3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXpl
ci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0
X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bv
c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6
ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5
cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9z
ZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBh
cmFtX3R5cGVfYmluZGluZywgInZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3Rl
bmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFt
X3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlz
dGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVf
bXVsdGlsaW5lKCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7
CkBAIC03NzMsMTMgKzgxNiwxNSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFy
YW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMi
ICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgi
XG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1f
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1U
eXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190
eXBlX3RleHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhp
cy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2Vf
dG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGlu
IE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxp
bmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5
cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90
b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9z
ZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IH1cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJh
dG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs4
NzAsMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywg
b3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZSArICI+IgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNz
UmVmUHRyPCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lICsgIj4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190
eXBlKCk6CkBAIC04NDQsNiArODkzLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFy
YW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICs5NDgsMTAgQEAgY2xh
c3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jh
d190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRf
dGV4dCgpCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiByZWR1
Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICByZXR1cm4gcmF3X3R5cGUKIApAQCAt
MTA5OSw2ICsxMTU2LDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIG5hbWVzcGFj
ZSBUeXBlQnVpbGRlciB7CiAke2ZvcndhcmRzfQorCitjb25zdCBTdHJpbmcmIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRlcnN9CiB9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgogCkBAIC0xNTQxLDYgKzE2MDEsMTcgQEAgJGNvbnN0cnVjdG9ySW5pdHsKIAog
JG1ldGhvZHMKIAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworY29uc3QgU3RyaW5nIGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50VmFsdWVzfTsKKworY29uc3QgU3Ry
aW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE1
NjgsNiArMTYzOSw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUsIGFu
bm90YXRlZF90eXBlKToKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcmF3X3R5cGUKIAorCisj
IENob29zZXMgbWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4gQSBw
YXJ0aWN1bGFyIHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFzIG9uZSBtZXRob2Qgd2l0aCBh
IHNpbXBsZSBwYXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhvZCB3aXRoIGEgcmF3IHR5cGUg
bmFtZSBhbmQgY29tbWVudGVkIGFubm90YXRpb24gYWJvdXQgZXhwZWN0ZWQKKyMgc3BlY2lhbGl6
ZWQgdHlwZSBuYW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdoZW4gcmF3IGFuZCBzcGVjaWFs
aXplZAorIyBwYXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJlbnQgYmVoYXZpb3IuCitjbGFz
cyBNZXRob2RHZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfbW9k
ZXMoY2xzLCB0eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0eXBlX2JpbmRpbmcuZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICMgSW4gcmF3IGFuZCBz
dHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlmZmVyZW50LgorICAgICAgICAg
ICAgcmV0dXJuIFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xzLlJhd1BhcmFtZXRlck1vZGVd
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEluIHJhdyBhbmQgc3RyaWN0IG1vZGVzIG1l
dGhvZCBjb2RlIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgIyBPbmx5IHB1dCBzdHJpY3QgcGFy
YW1ldGVyIHR5cGUgaW4gY29tbWVudHMuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5Db21iaW5l
ZE1vZGVdCisKKyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNl
KQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBw
YXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9w
YXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFyYW1ldGVyTW9kZToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmlu
ZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNl
KS5nZXRfdGV4dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNzIENvbWJpbmVkTW9kZToKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5
cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQo
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1U
eXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAorICAgICAgICAgICAg
ICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJh
bV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1f
dHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAg
ICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1
ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3Jl
ZgorCiBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBb
XQogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCkBAIC0xOTUyLDcgKzIwNzYs
OCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUo
Tm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5z
dWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250
ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1ldGhvZHM9am9pbihHZW5lcmF0
b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJh
dG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBlbnVtQ29uc3RhbnRWYWx1ZXM9
RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkpKQogCiBiYWNrZW5kX2NwcF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgbWV0
aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2Rl
Y2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120341</attachid>
            <date>2011-12-22 10:57:29 -0800</date>
            <delta_ts>2011-12-23 05:20:11 -0800</delta_ts>
            <desc>Sample InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>143856</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKCmNvbnN0IFN0cmluZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOwoKbmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5h
bWUuICovCmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX05BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIENPVU5UX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOT0RFX05BTUVfU0VUIHwgQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBzZXROb2RlTmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09VTlRfU0VUPiYgc2V0Q291bnQoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPVU5UX1NFVCks
IHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09VTlRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3VudD4g
cmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4p
CiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKSk7CiAgICB9Cn07CgpjbGFzcyBET01H
cm91cCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMCwKICAgICAgICBU
SVRMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgTk9ERV9DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoU0laRV9TRVQgfCBUSVRMRV9TRVQgfCBOT0RFX0NPVU5UX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIERPTUdyb3VwOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9T
RVQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRJVExFX1NFVD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VUKSwgcHJvcGVy
dHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRMRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9DT1VOVF9TRVQ+JiBzZXRO
b2RlQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9DT1VOVF9TRVQpLCBwcm9wZXJ0
eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
Im5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0NP
VU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERPTUdyb3VwPiBy
ZXN1bHQgPSBET01Hcm91cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IERPTUdyb3VwKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSSSIsIHZhbHVlKTsKICAgIH0K
fTsKCn0gLy8gTWVtb3J5CgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFJlc291cmNlIHR5cGUgYXMgaXQg
d2FzIHBlcmNlaXZlZCBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gKi8Kc3RydWN0IFJlc291cmNl
VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIERPQ1VNRU5UID0gMCwKICAgICAgICBTVFlM
RVNIRUVUID0gMSwKICAgICAgICBJTUFHRSA9IDIsCiAgICAgICAgRk9OVCA9IDMsCiAgICAgICAg
U0NSSVBUID0gNCwKICAgICAgICBYSFIgPSA1LAogICAgICAgIFdFQl9TT0NLRVQgPSA2LAogICAg
ICAgIE9USEVSID0gNywKICAgIH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIEluZm9y
bWF0aW9uIGFib3V0IHRoZSBGcmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIExPQURFUl9JRF9TRVQg
PSAxIDw8IDEsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMiwKICAgICAgICBNSU1FX1RZUEVfU0VU
ID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKElEX1NFVCB8IExPQURFUl9JRF9T
RVQgfCBVUkxfU0VUIHwgTUlNRV9UWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgSURfU0VUPiYgc2V0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJRF9TRVQpLCBwcm9wZXJ0
eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElEX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMT0FERVJfSURfU0VUPiYgc2V0TG9hZGVySWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBMT0FERVJfSURfU0VUKSwgcHJvcGVydHlfbG9hZGVySWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0FERVJfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwg
cHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUlNRV9UWVBFX1NFVD4mIHNldE1p
bWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTUlNRV9UWVBFX1NFVCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUlNRV9UWVBFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJh
bWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
RnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPEZyYW1lPiByZXN1bHQgPSBGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0SWQoLi4uKQogICAgICogICAgIC5zZXRMb2FkZXJJZCguLi4pCiAgICAgKiAgICAgLnNl
dFVybCguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1lKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2
YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5
IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8KY2xhc3MgRnJhbWVSZXNvdXJj
ZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVzb3Vy
Y2VUcmVlLgogICAgLy8gTmFtZWQgYXMgYW4gaXRlbSBvZiBhcnJheS4KICAgIGNsYXNzIFJlc291
cmNlc0l0ZW0gOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgIHB1YmxpYzoKICAgICAgICBl
bnVtIHsKICAgICAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgICAgIFVSTF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgICAgIFRZUEVfU0VUID0gMSA8PCAxLAogICAgICAgICAgICBNSU1F
X1RZUEVfU0VUID0gMSA8PCAyLAogICAgICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VU
IHwgVFlQRV9TRVQgfCBNSU1FX1RZUEVfU0VUKQogICAgICAgIH07CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICAgICBwcml2YXRlOgogICAg
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+IHB0cikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZXNJdGVtOwogICAg
ICAgIHB1YmxpYzoKICAgIAogICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNl
dFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAg
ICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgICAgIH0K
ICAgIAogICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGVC
dWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5
X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQ
RV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TUlNRV9UWVBFX1NFVCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgICAgICB9CiAg
ICAKICAgICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc291cmNlc0l0ZW0+JiAoKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlc0l0ZW0+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNvdXJjZXNJdGVtPiAoKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlc291cmNlc0l0ZW0+
KCp0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8qCiAgICAgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAqIFJlZlB0cjxSZXNvdXJjZXNJdGVtPiBy
ZXN1bHQgPSBSZXNvdXJjZXNJdGVtOjpjcmVhdGUoKQogICAgICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAqICAgICAuc2V0TWltZVR5
cGUoLi4uKTsKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IFJlc291cmNlc0l0ZW0oKSkpOwogICAgICAgIH0KICAgIH07Cgog
ICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgRlJBTUVfU0VUID0g
MSA8PCAwLAogICAgICAgIFJFU09VUkNFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoRlJBTUVfU0VUIHwgUkVTT1VSQ0VTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lUmVzb3Vy
Y2VUcmVlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVfU0VUPiYg
c2V0RnJhbWUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRlJBTUVfU0VUKSwgcHJvcGVydHlfZnJhbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJmcmFtZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGUkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBSRVNPVVJDRVNfU0VUKSwgcHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVTT1VSQ0VTX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8RnJhbWVSZXNvdXJjZVRyZWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PEZyYW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0RnJhbWUoLi4uKQogICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRnJhbWVS
ZXNvdXJjZVRyZWUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRGcmFtZXMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNo
aWxkRnJhbWVzIiwgdmFsdWUpOwogICAgfQp9OwoKLyogU2VhcmNoIG1hdGNoIGZvciByZXNvdXJj
ZS4gKi8KY2xhc3MgU2VhcmNoTWF0Y2ggOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTElORV9OVU1C
RVJfU0VUID0gMSA8PCAwLAogICAgICAgIExJTkVfQ09OVEVOVF9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoTElORV9OVU1CRVJfU0VUIHwgTElORV9DT05URU5UX1NFVCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PFNlYXJjaE1hdGNoPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIFNlYXJjaE1hdGNoOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElO
RV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJvcGVy
dHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElO
RV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVf
Q09OVEVOVF9TRVQ+JiBzZXRMaW5lQ29udGVudChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExJTkVfQ09OVEVOVF9TRVQp
LCBwcm9wZXJ0eV9saW5lQ29udGVudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImxpbmVDb250ZW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPExJTkVfQ09OVEVOVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8U2VhcmNoTWF0Y2g+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNo
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVzdWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRMaW5lQ29u
dGVudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVm
KG5ldyBTZWFyY2hNYXRjaCgpKSk7CiAgICB9Cn07CgovKiBTZWFyY2ggcmVzdWx0IGZvciByZXNv
dXJjZS4gKi8KY2xhc3MgU2VhcmNoUmVzdWx0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgRlJBTUVfSURfU0VUID0gMSA8PCAxLAogICAgICAgIE1BVENI
RVNfQ09VTlRfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQg
fCBGUkFNRV9JRF9TRVQgfCBNQVRDSEVTX0NPVU5UX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hSZXN1bHQ7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZSQU1F
X0lEX1NFVD4mIHNldEZyYW1lSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9m
cmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnJh
bWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGUkFNRV9JRF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFUQ0hFU19DT1VOVF9TRVQ+
JiBzZXRNYXRjaGVzQ291bnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1BVENIRVNfQ09VTlRfU0VUKSwgcHJvcGVydHlfbWF0Y2hl
c0NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibWF0
Y2hlc0NvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BVENIRVNf
Q09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJl
c3VsdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoUmVzdWx0Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlYXJjaFJlc3VsdD4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VhcmNoUmVzdWx0PigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFNlYXJjaFJlc3VsdD4gcmVzdWx0ID0gU2VhcmNoUmVzdWx0OjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRGcmFtZUlkKC4uLikKICAgICAqICAg
ICAuc2V0TWF0Y2hlc0NvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IFNlYXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBDb29raWUg
b2JqZWN0ICovCmNsYXNzIENvb2tpZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9
IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgRE9NQUlOX1NFVCA9
IDEgPDwgMiwKICAgICAgICBQQVRIX1NFVCA9IDEgPDwgMywKICAgICAgICBFWFBJUkVTX1NFVCA9
IDEgPDwgNCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgNSwKICAgICAgICBIVFRQX09OTFlfU0VU
ID0gMSA8PCA2LAogICAgICAgIFNFQ1VSRV9TRVQgPSAxIDw8IDcsCiAgICAgICAgU0VTU0lPTl9T
RVQgPSAxIDw8IDgsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9T
RVQgfCBET01BSU5fU0VUIHwgUEFUSF9TRVQgfCBFWFBJUkVTX1NFVCB8IFNJWkVfU0VUIHwgSFRU
UF9PTkxZX1NFVCB8IFNFQ1VSRV9TRVQgfCBTRVNTSU9OX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tpZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDb29raWU7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBO
QU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZBTFVFX1NF
VD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VUKSwgcHJvcGVydHlfdmFsdWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERP
TUFJTl9TRVQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RE9NQUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQ
QVRIX1NFVD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQQVRIX1NFVCksIHByb3BlcnR5X3BhdGhfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJwYXRoIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBBVEhfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEVYUElSRVNfU0VUPiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRVhQSVJFU19T
RVQpLCBwcm9wZXJ0eV9leHBpcmVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiZXhwaXJlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFWFBJUkVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpF
X1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSFRUUF9PTkxZX1NFVD4mIHNldEh0dHBPbmx5KGJvb2wgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSFRUUF9PTkxZX1NFVCksIHBy
b3BlcnR5X2h0dHBPbmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJv
b2xlYW4oImh0dHBPbmx5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhU
VFBfT05MWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VDVVJF
X1NFVD4mIHNldFNlY3VyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNFQ1VSRV9TRVQpLCBwcm9wZXJ0eV9zZWN1cmVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2VjdXJlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFQ1VSRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU0VTU0lPTl9TRVQ+JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0VTU0lPTl9T
RVQpLCBwcm9wZXJ0eV9zZXNzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEJvb2xlYW4oInNlc3Npb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U0VTU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q29v
a2llPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDb29raWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29va2llPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDb29raWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q29va2llPiByZXN1
bHQgPSBDb29raWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAg
IC5zZXRWYWx1ZSguLi4pCiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAgLnNl
dFBhdGgoLi4uKQogICAgICogICAgIC5zZXRFeHBpcmVzKC4uLikKICAgICAqICAgICAuc2V0U2l6
ZSguLi4pCiAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4uLikKICAgICAqICAgICAuc2V0U2VjdXJl
KC4uLikKICAgICAqICAgICAuc2V0U2Vzc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDb29raWUoKSkpOwogICAgfQp9OwoKLyogVW5p
cXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBTY3JpcHRJZGVudGlmaWVy
OwoKfSAvLyBQYWdlCgpuYW1lc3BhY2UgUnVudGltZSB7Ci8qIFVuaXF1ZSBvYmplY3QgaWRlbnRp
Zmllci4gKi8KdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7CgovKiBNaXJyb3Igb2JqZWN0
IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQgb2JqZWN0LiAqLwpjbGFzcyBSZW1vdGVP
YmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBSZW1vdGVPYmplY3QuCiAg
ICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgT0JKRUNUID0g
OCwKICAgICAgICAgICAgRlVOQ1RJT04gPSA5LAogICAgICAgICAgICBVTkRFRklORUQgPSAxMCwK
ICAgICAgICAgICAgU1RSSU5HID0gMTEsCiAgICAgICAgICAgIE5VTUJFUiA9IDEyLAogICAgICAg
ICAgICBCT09MRUFOID0gMTMsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3VidHlwZScgd2hpbGUgZ2VuZXJhdGluZyBS
ZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgU3VidHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAg
ICAgICAgICAgQVJSQVkgPSAxNCwKICAgICAgICAgICAgTnVsbCA9IDE1LAogICAgICAgICAgICBO
T0RFID0gMTYsCiAgICAgICAgICAgIFJFR0VYUCA9IDE3LAogICAgICAgICAgICBEQVRFID0gMTgs
CiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTdWJ0eXBlCgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgQUxM
X0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9T
RVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0
eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlw
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFJlbW90ZU9iamVjdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFJlbW90ZU9iamVjdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZW1vdGVPYmpl
Y3Q+IHJlc3VsdCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBS
ZW1vdGVPYmplY3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShTdWJ0eXBlOjpFbnVt
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJ
bnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlv
biIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIE9iamVjdCBwcm9wZXJ0eSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBQcm9wZXJ0eURl
c2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgV1JJVEFCTEVfU0VUID0gMSA8PCAxLAogICAgICAgIENPTkZJR1VSQUJMRV9TRVQgPSAxIDw8
IDIsCiAgICAgICAgRU5VTUVSQUJMRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoTkFNRV9TRVQgfCBXUklUQUJMRV9TRVQgfCBDT05GSUdVUkFCTEVfU0VUIHwgRU5VTUVS
QUJMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9T
RVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1F
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBXUklUQUJMRV9TRVQ+
JiBzZXRXcml0YWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFdSSVRBQkxFX1NFVCksIHByb3BlcnR5X3dyaXRhYmxlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oIndyaXRhYmxlIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdSSVRBQkxFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT05GSUdVUkFCTEVfU0VUPiYgc2V0Q29uZmlndXJh
YmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ09ORklHVVJBQkxFX1NFVCksIHByb3BlcnR5X2NvbmZpZ3VyYWJsZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25maWd1cmFibGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09ORklHVVJBQkxFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFTlVNRVJBQkxFX1NFVD4mIHNldEVudW1l
cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBFTlVNRVJBQkxFX1NFVCksIHByb3BlcnR5X2VudW1lcmFibGVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZW51bWVyYWJsZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFTlVNRVJBQkxFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHJlc3VsdCA9IFByb3BlcnR5RGVzY3JpcHRvcjo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFdyaXRhYmxl
KC4uLikKICAgICAqICAgICAuc2V0Q29uZmlndXJhYmxlKC4uLikKICAgICAqICAgICAuc2V0RW51
bWVyYWJsZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0
UmVmKG5ldyBQcm9wZXJ0eURlc2NyaXB0b3IoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUo
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZh
bHVlOwoKCiAgICB2b2lkIHNldEdldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRTZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0V2FzVGhyb3duKGJvb2wg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigid2FzVGhyb3duIiwgdmFsdWUp
OwogICAgfQp9OwoKLyogUmVwcmVzZW50cyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50LiBFaXRoZXIg
cmVtb3RlIG9iamVjdCBpZCA8Y29kZT5vYmplY3RJZDwvY29kZT4gb3IgcHJpbWl0aXZlIDxjb2Rl
PnZhbHVlPC9jb2RlPiBvciBuZWl0aGVyIG9mIChmb3IgdW5kZWZpbmVkKSB0aGVtIHNob3VsZCBi
ZSBzcGVjaWZpZWQuICovCmNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsQXJndW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxB
cmd1bWVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDYWxsQXJndW1lbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENhbGxBcmd1bWVudD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsQXJndW1lbnQ+IHJlc3VsdCA9
IENhbGxBcmd1bWVudDo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IENhbGxBcmd1bWVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRW
YWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldE9iamVjdElkKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFsdWUp
OwogICAgfQp9OwoKfSAvLyBSdW50aW1lCgpuYW1lc3BhY2UgQ29uc29sZSB7Ci8qIENvbnNvbGUg
bWVzc2FnZS4gKi8KY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGls
ZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFNvdXJjZSB7CiAgICAgICAg
ZW51bSBFbnVtIHsKICAgICAgICAgICAgSFRNTCA9IDE5LAogICAgICAgICAgICBXTUwgPSAyMCwK
ICAgICAgICAgICAgWE1MID0gMjEsCiAgICAgICAgICAgIEpBVkFTQ1JJUFQgPSAyMiwKICAgICAg
ICAgICAgTkVUV09SSyA9IDIzLAogICAgICAgICAgICBDT05TT0xFX0FQSSA9IDI0LAogICAgICAg
ICAgICBPVEhFUiA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU291cmNlCgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGV2ZWwnIHdoaWxlIGdlbmVyYXRpbmcgQ29u
c29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgTGV2ZWwgewogICAgICAgIGVudW0gRW51bSB7CiAgICAg
ICAgICAgIFRJUCA9IDI2LAogICAgICAgICAgICBMT0cgPSAyNywKICAgICAgICAgICAgV0FSTklO
RyA9IDI4LAogICAgICAgICAgICBFUlJPUiA9IDI5LAogICAgICAgICAgICBERUJVRyA9IDMwLAog
ICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgTGV2ZWwKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3Ry
dWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIExPRyA9IDI3LAogICAg
ICAgICAgICBESVIgPSAzMSwKICAgICAgICAgICAgRElSWE1MID0gMzIsCiAgICAgICAgICAgIFRS
QUNFID0gMzMsCiAgICAgICAgICAgIFNUQVJUX0dST1VQID0gMzQsCiAgICAgICAgICAgIFNUQVJU
X0dST1VQX0NPTExBUFNFRCA9IDM1LAogICAgICAgICAgICBFTkRfR1JPVVAgPSAzNiwKICAgICAg
ICAgICAgQVNTRVJUID0gMzcsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAg
ZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU09VUkNFX1NFVCA9IDEg
PDwgMCwKICAgICAgICBMRVZFTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVEVYVF9TRVQgPSAxIDw8
IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU09VUkNFX1NFVCB8IExFVkVMX1NFVCB8IFRF
WFRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTT1VSQ0VfU0VUPiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwg
cHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNPVVJDRV9TRVQ+JiBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwg
cHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic291cmNlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJD
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYg
c2V0TGV2ZWwoTGV2ZWw6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TEVWRUxfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExFVkVMX1NFVD4mIHNldExldmVs
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxMRVZFTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0
eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q29uc29sZU1lc3NhZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENvbnNvbGVNZXNzYWdlPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENv
bnNvbGVNZXNzYWdlPiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U291cmNlKC4uLikKICAgICAqICAgICAuc2V0TGV2ZWwoLi4uKQogICAgICogICAgIC5z
ZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IENvbnNvbGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6
RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShp
bnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE51bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQ
YXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
U3RhY2tUcmFjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRBcnJheSgic3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dE5ldHdvcmtSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTdGFj
ayBlbnRyeSBmb3IgY29uc29sZSBlcnJvcnMgYW5kIGFzc2VydGlvbnMuICovCmNsYXNzIENhbGxG
cmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBVUkxfU0VUID0gMSA8PCAxLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwg
MiwKICAgICAgICBDT0xVTU5fTlVNQkVSX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChGVU5DVElPTl9OQU1FX1NFVCB8IFVSTF9TRVQgfCBMSU5FX05VTUJFUl9TRVQgfCBD
T0xVTU5fTlVNQkVSX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBGVU5DVElPTl9OQU1FX1NFVD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEZVTkNUSU9OX05BTUVfU0VUKSwgcHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZVTkNUSU9OX05BTUVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBV
UkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVS
TF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJf
U0VUPiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJl
cl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1i
ZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTFVNTl9OVU1CRVJfU0VU
PiYgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDT0xVTU5fTlVNQkVSX1NFVCksIHByb3BlcnR5X2NvbHVtbk51
bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVt
bk51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT0xVTU5fTlVN
QkVSX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJh
bWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnVuY3Rpb25O
YW1lKC4uLikKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJl
ciguLi4pCiAgICAgKiAgICAgLnNldENvbHVtbk51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAgfQp9
OwoKfSAvLyBDb25zb2xlCgpuYW1lc3BhY2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRl
bnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRl
bnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlk
ZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJZDsKCi8qIFRpbWluZyBpbmZvcm1h
dGlvbiBmb3IgdGhlIHJlcXVlc3QuICovCmNsYXNzIFJlc291cmNlVGltaW5nIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQg
PSAwLAogICAgICAgIFJFUVVFU1RfVElNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgUFJPWFlfU1RB
UlRfU0VUID0gMSA8PCAxLAogICAgICAgIFBST1hZX0VORF9TRVQgPSAxIDw8IDIsCiAgICAgICAg
RE5TX1NUQVJUX1NFVCA9IDEgPDwgMywKICAgICAgICBETlNfRU5EX1NFVCA9IDEgPDwgNCwKICAg
ICAgICBDT05ORUNUX1NUQVJUX1NFVCA9IDEgPDwgNSwKICAgICAgICBDT05ORUNUX0VORF9TRVQg
PSAxIDw8IDYsCiAgICAgICAgU1NMX1NUQVJUX1NFVCA9IDEgPDwgNywKICAgICAgICBTU0xfRU5E
X1NFVCA9IDEgPDwgOCwKICAgICAgICBTRU5EX1NUQVJUX1NFVCA9IDEgPDwgOSwKICAgICAgICBT
RU5EX0VORF9TRVQgPSAxIDw8IDEwLAogICAgICAgIFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUID0g
MSA8PCAxMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChSRVFVRVNUX1RJTUVfU0VUIHwgUFJP
WFlfU1RBUlRfU0VUIHwgUFJPWFlfRU5EX1NFVCB8IEROU19TVEFSVF9TRVQgfCBETlNfRU5EX1NF
VCB8IENPTk5FQ1RfU1RBUlRfU0VUIHwgQ09OTkVDVF9FTkRfU0VUIHwgU1NMX1NUQVJUX1NFVCB8
IFNTTF9FTkRfU0VUIHwgU0VORF9TVEFSVF9TRVQgfCBTRU5EX0VORF9TRVQgfCBSRUNFSVZFX0hF
QURFUlNfRU5EX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlVGltaW5nOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVTVF9USU1FX1NFVD4mIHNldFJlcXVlc3RUaW1lKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBS
RVFVRVNUX1RJTUVfU0VUKSwgcHJvcGVydHlfcmVxdWVzdFRpbWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVFVRVNUX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFBST1hZX1NUQVJUX1NFVD4mIHNldFByb3h5U3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFBST1hZX1NUQVJUX1NFVCksIHByb3BlcnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFBST1hZX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBQUk9YWV9FTkRfU0VUPiYgc2V0UHJveHlFbmQoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZ
X0VORF9TRVQpLCBwcm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInByb3h5RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBST1hZX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRE5TX1NUQVJUX1NFVD4mIHNldERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBETlNfU1RBUlRfU0VUKSwgcHJv
cGVydHlfZG5zU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJkbnNTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNf
U1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEROU19FTkRf
U0VUPiYgc2V0RG5zRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBETlNfRU5EX1NFVCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfRU5EX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT05ORUNUX1NUQVJUX1NFVD4mIHNldENvbm5lY3RTdGFy
dChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ09OTkVDVF9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9TVEFSVF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVF9FTkRfU0VUPiYgc2V0Q29u
bmVjdEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ09OTkVDVF9FTkRfU0VUKSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9FTkRfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNTTF9TVEFSVF9TRVQ+JiBzZXRTc2xTdGFy
dChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU1NMX1NUQVJUX1NFVCksIHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTU0xfRU5EX1NFVD4mIHNldFNzbEVuZChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX0VORF9TRVQp
LCBwcm9wZXJ0eV9zc2xFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJzc2xFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NM
X0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VORF9TVEFS
VF9TRVQ+JiBzZXRTZW5kU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTkRfU1RBUlRfU0VUKSwgcHJvcGVydHlfc2VuZFN0
YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZFN0
YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfU1RBUlRfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFTkRfRU5EX1NFVD4mIHNl
dFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNFTkRfRU5EX1NFVCksIHByb3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVD4mIHNldFJlY2VpdmVI
ZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCksIHByb3BlcnR5X3JlY2VpdmVI
ZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
cmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UkVDRUlWRV9IRUFERVJTX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291
cmNlVGltaW5nPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJj
ZVRpbWluZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVz
b3VyY2VUaW1pbmc6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAg
ICAqICAgICAuc2V0UHJveHlTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikK
ICAgICAqICAgICAuc2V0RG5zU3RhcnQoLi4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQog
ICAgICogICAgIC5zZXRDb25uZWN0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5k
KC4uLikKICAgICAqICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQo
Li4uKQogICAgICogICAgIC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5k
KC4uLikKICAgICAqICAgICAuc2V0UmVjZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkp
OwogICAgfQp9OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBNRVRIT0RfU0VUID0g
MSA8PCAxLAogICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFVSTF9TRVQgfCBNRVRIT0RfU0VUIHwgSEVBREVSU19TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNf
U0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1FVEhPRF9T
RVQ+JiBzZXRNZXRob2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNRVRIT0RfU0VUKSwgcHJvcGVydHlfbWV0aG9kX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWV0aG9kIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1FVEhPRF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlcXVl
c3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVxdWVzdD4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQgPSBSZXF1ZXN0OjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNZXRob2QoLi4uKQogICAgICog
ICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IFJlcXVlc3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3RE
YXRhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBS
ZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAg
IFNUQVRVU19TRVQgPSAxIDw8IDEsCiAgICAgICAgU1RBVFVTX1RFWFRfU0VUID0gMSA8PCAyLAog
ICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAzLAogICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8
IDQsCiAgICAgICAgQ09OTkVDVElPTl9SRVVTRURfU0VUID0gMSA8PCA1LAogICAgICAgIENPTk5F
Q1RJT05fSURfU0VUID0gMSA8PCA2LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQg
fCBTVEFUVVNfU0VUIHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVBREVSU19TRVQgfCBNSU1FX1RZUEVf
U0VUIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUIHwgQ09OTkVDVElPTl9JRF9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25z
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNwb25z
ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U1RBVFVTX1NFVD4mIHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1NFVCksIHByb3BlcnR5X3N0YXR1c19h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19URVhUX1NFVD4mIHNldFN0YXR1c1Rl
eHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTVEFUVVNfVEVYVF9TRVQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfVEVYVF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlw
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUPiYgc2V0Q29ubmVj
dGlvblJldXNlZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENPTk5FQ1RJT05fUkVVU0VEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25S
ZXVzZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29u
bmVjdGlvblJldXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05O
RUNUSU9OX1JFVVNFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q09OTkVDVElPTl9JRF9TRVQ+JiBzZXRDb25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05fSURfU0VU
KSwgcHJvcGVydHlfY29ubmVjdGlvbklkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigiY29ubmVjdGlvbklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENPTk5FQ1RJT05fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNwb25zZT4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzcG9uc2U+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8UmVzcG9uc2U+IHJlc3VsdCA9IFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRT
dGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNl
dE1pbWVUeXBlKC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAg
KiAgICAgLnNldENvbm5lY3Rpb25JZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRI
ZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygiaGVhZGVyc1RleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVh
ZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0RnJvbURpc2tDYWNoZShib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJv
b2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUaW1pbmco
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2Jq
ZWN0KCJ0aW1pbmciLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRh
LiAqLwpjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVF
U1RfS0VZM19TRVQgPSAxIDw8IDAsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoUkVRVUVTVF9LRVkzX1NFVCB8IEhFQURFUlNfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2Vi
U29ja2V0UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBXZWJTb2NrZXRSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUkVRVUVTVF9LRVkzX1NFVD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVTVF9L
RVkzX1NFVCksIHByb3BlcnR5X3JlcXVlc3RLZXkzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygicmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8UkVRVUVTVF9LRVkzX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBIRUFERVJTX1NFVD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEhFQURFUlNfU0VUKSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0
UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJl
cXVlc3RLZXkzKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXF1ZXN0KCkp
KTsKICAgIH0KfTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBXZWJTb2Nr
ZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAwLAog
ICAgICAgIFNUQVRVU19URVhUX1NFVCA9IDEgPDwgMSwKICAgICAgICBIRUFERVJTX1NFVCA9IDEg
PDwgMiwKICAgICAgICBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUID0gMSA8PCAzLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFNUQVRVU19TRVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBIRUFERVJTX1NF
VCB8IENIQUxMRU5HRV9SRVNQT05TRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0
dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTVEFUVVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVT
X1RFWFRfU0VUKSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U1RBVFVTX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSEVBREVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUPiYgc2V0Q2hhbGxlbmdlUmVzcG9uc2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUKSwgcHJvcGVydHlfY2hhbGxlbmdlUmVz
cG9uc2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFs
bGVuZ2VSZXNwb25zZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDSEFM
TEVOR0VfUkVTUE9OU0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFdlYlNvY2tldFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJT
b2NrZXRSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2Vi
U29ja2V0UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHJl
c3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdGF0dXMo
Li4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVy
cyguLi4pCiAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNl
KCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2Uu
ICovCmNsYXNzIENhY2hlZFJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgUkVTUE9OU0VfU0VU
ID0gMSA8PCAyLAogICAgICAgIEJPRFlfU0laRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgUkVTUE9OU0VfU0VUIHwgQk9EWV9TSVpF
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENhY2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6
OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFJFU1BPTlNFX1NFVD4mIHNldFJlc3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJFU1BPTlNFX1NF
VCksIHByb3BlcnR5X3Jlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgicmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UkVTUE9OU0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJP
RFlfU0laRV9TRVQ+JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQk9EWV9TSVpFX1NFVCksIHByb3BlcnR5X2Jv
ZHlTaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9k
eVNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qk9EWV9TSVpFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPENhY2hlZFJlc291cmNlPiByZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAg
ICAgLnNldFJlc3BvbnNlKC4uLikKICAgICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FjaGVkUmVzb3Vy
Y2UoKSkpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlh
dG9yLiAqLwpjbGFzcyBJbml0aWF0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBJbml0aWF0b3IuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgUEFSU0VSID0gMzgsCiAgICAgICAgICAgIFNDUklQVCA9IDM5LAogICAgICAgICAgICBP
VEhFUiA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5pdGlhdG9yPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaXRpYXRvcjsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVf
U0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVy
dHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8SW5pdGlhdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxJbml0aWF0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJ
bml0aWF0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1i
ZXIoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJl
ciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0
YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIERP
TUFJTl9TRVQgPSAxIDw8IDEsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgVkVS
U0lPTl9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgRE9N
QUlOX1NFVCB8IE5BTUVfU0VUIHwgVkVSU0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VU
KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4mIHNldERvbWFp
bihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERPTUFJTl9TRVQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RE9NQUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHBy
b3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZFUlNJT05fU0VUPiYgc2V0VmVy
c2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFZFUlNJT05fU0VUKSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VkVSU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RGF0YWJhc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERh
dGFiYXNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxEYXRhYmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAq
ICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRGF0YWJhc2UoKSkpOwog
ICAgfQp9OwoKfSAvLyBEYXRhYmFzZQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCm5h
bWVzcGFjZSBET01TdG9yYWdlIHsKLyogRE9NIFN0b3JhZ2UgZW50cnkuICovCmNsYXNzIEVudHJ5
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEhPU1RfU0VUID0gMSA8PCAwLAogICAgICAgIElTX0xP
Q0FMX1NUT1JBR0VfU0VUID0gMSA8PCAxLAogICAgICAgIElEX1NFVCA9IDEgPDwgMiwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChIT1NUX1NFVCB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUIHwgSURf
U0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8RW50cnk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIT1NUX1NFVD4m
IHNldEhvc3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBIT1NUX1NFVCksIHByb3BlcnR5X2hvc3RfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJob3N0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhPU1RfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUPiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9v
bCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJ
U19MT0NBTF9TVE9SQUdFX1NFVCksIHByb3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0xPQ0FMX1NUT1JBR0VfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJ
RF9TRVQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoImlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElEX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8RW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8RW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0SG9zdCguLi4pCiAgICAgKiAgICAgLnNldElzTG9jYWxTdG9yYWdl
KC4uLikKICAgICAqICAgICAuc2V0SWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9y
YWdlCgpuYW1lc3BhY2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9u
IGNhY2hlIHJlc291cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBT
SVpFX1NFVCA9IDEgPDwgMSwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IChVUkxfU0VUIHwgU0laRV9TRVQgfCBUWVBFX1NFVCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5
X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNJWkVfU0VUPiYgc2V0U2l6ZShpbnQgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0laRV9TRVQp
LCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSVpFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZVJlc291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRp
b25DYWNoZVJlc291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICog
ICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UoKSkpOwogICAgfQp9OwoKLyogRGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3Jt
YXRpb24uICovCmNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAg
TUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAxLAog
ICAgICAgIENSRUFUSU9OX1RJTUVfU0VUID0gMSA8PCAyLAogICAgICAgIFVQREFURV9USU1FX1NF
VCA9IDEgPDwgMywKICAgICAgICBSRVNPVVJDRVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKE1BTklGRVNUX1VfUl9MX1NFVCB8IFNJWkVfU0VUIHwgQ1JFQVRJT05fVElN
RV9TRVQgfCBVUERBVEVfVElNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1Rf
VV9SX0xfU0VUPiYgc2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQp
LCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1BTklGRVNUX1VfUl9MX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ1JFQVRJT05fVElNRV9TRVQ+JiBzZXRDcmVhdGlvblRp
bWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENSRUFUSU9OX1RJTUVfU0VUKSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENSRUFUSU9OX1RJTUVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVQREFURV9USU1FX1NFVD4mIHNldFVw
ZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFVQREFURV9USU1FX1NFVCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVQREFURV9USU1FX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3Vy
Y2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNv
dXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291
cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNl
dFNpemUoLi4uKQogICAgICogICAgIC5zZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICogICAgIC5z
ZXRVcGRhdGVUaW1lKC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2Fj
aGUoKSkpOwogICAgfQp9OwoKLyogRnJhbWUgaWRlbnRpZmllciAtIG1hbmlmZXN0IFVSTCBwYWly
LiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFN
RV9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAxLAog
ICAgICAgIFNUQVRVU19TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoRlJB
TUVfSURfU0VUIHwgTUFOSUZFU1RfVV9SX0xfU0VUIHwgU1RBVFVTX1NFVCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aE1h
bmlmZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZy
YW1lV2l0aE1hbmlmZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJB
TUVfSURfU0VUPiYgc2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5
X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJm
cmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQU5JRkVTVF9VX1JfTF9T
RVQ+JiBzZXRNYW5pZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1BTklGRVNUX1VfUl9MX1NFVCksIHByb3Bl
cnR5X21hbmlmZXN0VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibWFuaWZlc3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TUFOSUZFU1RfVV9SX0xfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPEZyYW1lV2l0aE1hbmlmZXN0PiByZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJM
KC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsKICAgIH0K
fTsKCn0gLy8gQXBwbGljYXRpb25DYWNoZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBpbnRlcmFj
dGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJl
c2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3Ig
dHlwZS4gKi8KY2xhc3MgTm9kZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX0lEX1NFVCA9
IDEgPDwgMCwKICAgICAgICBOT0RFX1RZUEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVfTkFN
RV9TRVQgPSAxIDw8IDIsCiAgICAgICAgTE9DQUxfTkFNRV9TRVQgPSAxIDw8IDMsCiAgICAgICAg
Tk9ERV9WQUxVRV9TRVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTk9ERV9J
RF9TRVQgfCBOT0RFX1RZUEVfU0VUIHwgTk9ERV9OQU1FX1NFVCB8IExPQ0FMX05BTUVfU0VUIHwg
Tk9ERV9WQUxVRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxOb2RlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
T0RFX0lEX1NFVD4mIHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9JRF9TRVQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9JRF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9UWVBFX1NFVD4mIHNldE5vZGVUeXBlKGlu
dCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBO
T0RFX1RZUEVfU0VUKSwgcHJvcGVydHlfbm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxOT0RFX1RZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfTkFN
RV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTE9DQUxfTkFNRV9TRVQ+JiBzZXRMb2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMT0NBTF9OQU1FX1NF
VCksIHByb3BlcnR5X2xvY2FsTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImxvY2FsTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMT0NBTF9OQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOT0RFX1ZBTFVFX1NFVD4mIHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfVkFMVUVfU0VU
KSwgcHJvcGVydHlfbm9kZVZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibm9kZVZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5PREVfVkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PE5vZGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5vZGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Tm9kZT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8Tm9kZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBO
b2RlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRO
b2RlVHlwZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikKICAgICAqICAgICAuc2V0
TG9jYWxOYW1lKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVZhbHVlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRD
aGlsZHJlbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBdHRy
aWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldEFycmF5KCJhdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RG9j
dW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoImRvY3VtZW50VVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UHVibGljSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lk
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImludGVybmFsU3Vic2V0IiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0WG1sVmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygieG1sVmVyc2lvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
Im5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9
CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKfTsKCi8qIERPTSBpbnRlcmFj
dGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJl
c2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3Ig
dHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBF
X1NFVCA9IDEgPDwgMCwKICAgICAgICBVU0VfQ0FQVFVSRV9TRVQgPSAxIDw8IDEsCiAgICAgICAg
SVNfQVRUUklCVVRFX1NFVCA9IDEgPDwgMiwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMywK
ICAgICAgICBIQU5ETEVSX0JPRFlfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKFRZUEVfU0VUIHwgVVNFX0NBUFRVUkVfU0VUIHwgSVNfQVRUUklCVVRFX1NFVCB8IE5PREVf
SURfU0VUIHwgSEFORExFUl9CT0RZX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVNFX0NB
UFRVUkVfU0VUPiYgc2V0VXNlQ2FwdHVyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVTRV9DQVBUVVJFX1NFVCksIHByb3BlcnR5X3Vz
ZUNhcHR1cmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigi
dXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVU0VfQ0FQ
VFVSRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfQVRUUklC
VVRFX1NFVD4mIHNldElzQXR0cmlidXRlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSVNfQVRUUklCVVRFX1NFVCksIHByb3BlcnR5X2lz
QXR0cmlidXRlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4o
ImlzQXR0cmlidXRlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0FU
VFJJQlVURV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9J
RF9TRVQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5PREVfSURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEhBTkRMRVJfQk9EWV9TRVQ+JiBzZXRIYW5kbGVyQm9keShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEhBTkRMRVJfQk9EWV9TRVQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxFdmVudExpc3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IHJlc3VsdCA9IEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQogICAgICogICAgIC5zZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0
SXNBdHRyaWJ1dGUoLi4uKQogICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5z
ZXRIYW5kbGVyQm9keSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBFdmVudExpc3RlbmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0
aW9uKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmpl
Y3QoImxvY2F0aW9uIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBh
biBSR0JBIGNvbG9yLiAqLwovLyBUeXBlIG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JBJy4KY2xh
c3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBSX1NFVCA9IDEgPDwgMCwKICAgICAgICBH
X1NFVCA9IDEgPDwgMSwKICAgICAgICBCX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChSX1NFVCB8IEdfU0VUIHwgQl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBSX1NFVD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Ul9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgR19TRVQ+JiBzZXRHKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBHX1NFVCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEdfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEJfU0VUPiYgc2V0QihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQl9TRVQpLCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxCX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxS
Z2JhPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxSZ2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFJnYmE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdi
YTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQog
ICAgICogICAgIC5zZXRCKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IFJnYmEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVu
dHMuICovCmNsYXNzIEhpZ2hsaWdodENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBIaWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxIaWdobGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhp
Z2hsaWdodENvbmZpZz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxIaWdobGlnaHRDb25maWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRD
b25maWc+IHJlc3VsdCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRTaG93SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldEJvb2xlYW4oInNob3dJbmZvIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29u
dGVudENvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3Qo
ImNvbnRlbnRDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29s
b3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldE1hcmdpbkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRPYmplY3QoIm1hcmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAv
LyBET00KCm5hbWVzcGFjZSBDU1MgewovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0
eWxlIGluIGEgdW5pcXVlIHdheS4gKi8KY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQg
PSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwg
T1JESU5BTF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
VFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9SRElOQUxfU0VUPiYgc2V0T3JkaW5hbChpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JE
SU5BTF9TRVQpLCBwcm9wZXJ0eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigib3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxPUkRJTkFMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDU1NTdHlsZUlkPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8Q1NTU3R5bGVJZD4gcmVzdWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHls
ZUlkKCkpKTsKICAgIH0KfTsKCi8qIFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBp
biBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8
IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5B
TF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxDU1NSdWxlSWQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgQ1NTUnVsZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hF
RVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VU
KSwgcHJvcGVydHlfb3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
T1JESU5BTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVs
ZUlkPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NT
UnVsZUlkPiByZXN1bHQgPSBDU1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxl
U2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0K
fTsKCi8qIENTUyBydWxlIGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8K
Y2xhc3MgUHNldWRvSWRSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBQU0VVRE9fSURfU0VU
ID0gMSA8PCAwLAogICAgICAgIFJVTEVTX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChQU0VVRE9fSURfU0VUIHwgUlVMRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBQc2V1ZG9JZFJ1bGVzOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUFNFVURPX0lEX1NFVD4mIHNldFBz
ZXVkb0lkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBQU0VVRE9fSURfU0VUKSwgcHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQU0VVRE9fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFJVTEVTX1NFVD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFJVTEVTX1NFVCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxSVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8UHNldWRvSWRSdWxlcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1
bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9JZFJ1bGVz
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVs
ZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAqICAgICAuc2V0
UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJl
ZihuZXcgUHNldWRvSWRSdWxlcygpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9u
IGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnkg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgTUFUQ0hFRF9DU1NfUlVMRVNfU0VUID0gMSA8PCAwLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE1BVENIRURfQ1NTX1JVTEVTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaGVyaXRl
ZFN0eWxlRW50cnk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgSW5oZXJpdGVkU3R5bGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE1BVENIRURfQ1NTX1JVTEVTX1NFVD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNQVRDSEVEX0NTU19SVUxFU19TRVQpLCBwcm9wZXJ0eV9tYXRjaGVkQ1NT
UnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm1hdGNo
ZWRDU1NSdWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVE
X0NTU19SVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5o
ZXJpdGVkU3R5bGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhl
cml0ZWRTdHlsZUVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJ
bmhlcml0ZWRTdHlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50
cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dE1hdGNoZWRDU1NSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVM
RFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+KGFkb3B0UmVmKG5ldyBJbmhlcml0ZWRTdHlsZUVudHJ5KCkpKTsKICAgIH0KCiAgICB2b2lk
IHNldElubGluZVN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBp
bmZvcm1hdGlvbiBmb3IgYSBET00gc3R5bGUgYXR0cmlidXRlLiAqLwpjbGFzcyBDU1NTdHlsZUF0
dHJpYnV0ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBTVFlMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQg
fCBTVFlMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZTsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVf
U0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFN
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0VUPiYg
c2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TRVQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NT
U3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0
eWxlQXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1N0eWxlQXR0cmlidXRl
KCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IG1ldGFpbmZvcm1hdGlvbi4gKi8KY2xh
c3MgQ1NTU3R5bGVTaGVldEhlYWRlciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVF
VF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU09VUkNFX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBUSVRMRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgRElTQUJMRURfU0VUID0gMSA8PCAzLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFNPVVJDRV9VX1Jf
TF9TRVQgfCBUSVRMRV9TRVQgfCBESVNBQkxFRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hl
ZXRIZWFkZXI7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVF
VF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQp
LCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNPVVJDRV9VX1JfTF9TRVQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VS
Q0VfVV9SX0xfU0VUKSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9VX1JfTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVElUTEVfU0VUPiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQp
LCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExF
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBESVNBQkxFRF9TRVQ+
JiBzZXREaXNhYmxlZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIERJU0FCTEVEX1NFVCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERJU0FCTEVEX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhl
YWRlcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAg
ICAuc2V0U291cmNlVVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAg
IC5zZXREaXNhYmxlZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0SGVhZGVyKCkpKTsKICAgIH0KfTsKCi8qIENTUyBz
dHlsZXNoZWV0IGNvbnRlbnRzLiAqLwpjbGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgUlVMRVNf
U0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NF
VCB8IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVl
dElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVl
dElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lE
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBz
ZXRSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSVUxFU19TRVQpLCBwcm9wZXJ0eV9ydWxl
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UlVMRVNfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxl
cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUp
OwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1bGUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnb3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBzdHJ1Y3Qg
T3JpZ2luIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVU0VSID0gNDAsCiAgICAg
ICAgICAgIFVTRVJfQUdFTlQgPSA0MSwKICAgICAgICAgICAgSU5TUEVDVE9SID0gNDIsCiAgICAg
ICAgICAgIEVNUFRZX05BTUUgPSA0MywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9yaWdp
bgoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNFTEVDVE9S
X1RFWFRfU0VUID0gMSA8PCAwLAogICAgICAgIFNPVVJDRV9MSU5FX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBPUklHSU5fU0VUID0gMSA8PCAyLAogICAgICAgIFNUWUxFX1NFVCA9IDEgPDwgMywKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChTRUxFQ1RPUl9URVhUX1NFVCB8IFNPVVJDRV9MSU5FX1NF
VCB8IE9SSUdJTl9TRVQgfCBTVFlMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1bGU7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTRUxFQ1RPUl9URVhUX1NFVD4mIHNldFNlbGVjdG9yVGV4dChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNFTEVDVE9SX1RFWFRfU0VUKSwgcHJvcGVydHlfc2VsZWN0b3JUZXh0X2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTEVDVE9SX1RFWFRfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9MSU5FX1NFVD4mIHNldFNv
dXJjZUxpbmUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNPVVJDRV9MSU5FX1NFVCksIHByb3BlcnR5X3NvdXJjZUxpbmVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9MSU5FX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKE9yaWdp
bjo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUklHSU5fU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9SSUdJTl9TRVQ+JiBzZXRPcmlnaW4oY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE9SSUdJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TRVQpLCBwcm9wZXJ0
eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0
eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NSdWxlPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPENTU1J1bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENTU1J1bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0
U291cmNlTGluZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNl
dFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IENTU1J1bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UnVsZUlkKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlSWQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicnVsZUlkIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRTZWxlY3RvclJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3Vy
Y2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoIm1lZGlhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogVGV4dCByYW5n
ZSB3aXRoaW4gYSByZXNvdXJjZS4gKi8KY2xhc3MgU291cmNlUmFuZ2UgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgU1RBUlRfU0VUID0gMSA8PCAwLAogICAgICAgIEVORF9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RBUlRfU0VUIHwgRU5EX1NFVCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNvdXJjZVJhbmdl
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19G
SUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZVJh
bmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBUlRfU0VUPiYgc2V0
U3RhcnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNUQVJUX1NFVCksIHByb3BlcnR5X3N0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEVORF9TRVQ+JiBzZXRFbmQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEVORF9TRVQpLCBwcm9wZXJ0eV9lbmRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJlbmQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxTb3VyY2VSYW5nZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U291cmNlUmFuZ2U+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U291cmNl
UmFuZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNvdXJjZVJhbmdl
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFNvdXJjZVJhbmdlPiByZXN1bHQgPSBTb3VyY2VSYW5nZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRFbmQoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU291
cmNlUmFuZ2UoKSkpOwogICAgfQp9OwoKY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5IDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFZBTFVFX1NF
VCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBO
QU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZBTFVFX1NF
VD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VUKSwgcHJvcGVydHlfdmFsdWVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1
bHQgPSBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHkoKSkp
OwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NTdHls
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBDU1NfUFJPUEVSVElFU19TRVQgPSAxIDw8IDAsCiAg
ICAgICAgU0hPUlRIQU5EX0VOVFJJRVNfU0VUID0gMSA8PCAxLAogICAgICAgIFdJRFRIX1NFVCA9
IDEgPDwgMiwKICAgICAgICBIRUlHSFRfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKENTU19QUk9QRVJUSUVTX1NFVCB8IFNIT1JUSEFORF9FTlRSSUVTX1NFVCB8IFdJRFRI
X1NFVCB8IEhFSUdIVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENTU19QUk9QRVJUSUVTX1NFVD4mIHNldENzc1Byb3BlcnRpZXMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQ1NTX1BST1BFUlRJRVNfU0VUKSwgcHJvcGVydHlfY3NzUHJvcGVydGll
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVy
dGllcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDU1NfUFJPUEVSVElF
U19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0hPUlRIQU5EX0VO
VFJJRVNfU0VUPiYgc2V0U2hvcnRoYW5kRW50cmllcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
SE9SVEhBTkRfRU5UUklFU19TRVQpLCBwcm9wZXJ0eV9zaG9ydGhhbmRFbnRyaWVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJzaG9ydGhhbmRFbnRyaWVzIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNIT1JUSEFORF9FTlRSSUVTX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBXSURUSF9TRVQ+JiBzZXRX
aWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFdJRFRIX1NFVCksIHByb3BlcnR5X3dpZHRoX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8V0lEVEhfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEhFSUdIVF9TRVQ+JiBzZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUlHSFRfU0VU
KSwgcHJvcGVydHlfaGVpZ2h0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiaGVpZ2h0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhF
SUdIVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZT4g
cmVzdWx0ID0gQ1NTU3R5bGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENzc1Byb3BlcnRpZXMo
Li4uKQogICAgICogICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKC4uLikKICAgICAqICAgICAuc2V0
V2lkdGgoLi4uKQogICAgICogICAgIC5zZXRIZWlnaHQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGUoKSkpOwogICAgfQoKICAg
IHZvaWQgc2V0U3R5bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJ
ZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q3NzVGV4
dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiY3Nz
VGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJj
ZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxl
IGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVt
IEVudW0gewogICAgICAgICAgICBBQ1RJVkUgPSA0NCwKICAgICAgICAgICAgSU5BQ1RJVkUgPSA0
NSwKICAgICAgICAgICAgRElTQUJMRUQgPSA0NiwKICAgICAgICAgICAgU1RZTEUgPSA0NywKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFZBTFVFX1NF
VCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENTU1Byb3BlcnR5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENTU1Byb3BlcnR5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZB
TFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1By
b3BlcnR5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTUHJvcGVydHkoKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0UHJpb3JpdHkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInByaW9yaXR5IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0SW1wbGljaXQoYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJp
bXBsaWNpdCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRQYXJzZWRPayhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dEJvb2xlYW4oInBhcnNlZE9rIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhdHVzKFN0
YXR1czo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1cyIs
IGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1
cyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNob3J0aGFuZE5hbWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9Cn07Cgov
KiBDU1MgbWVkaWEgcXVlcnkgZGVzY3JpcHRvci4gKi8KY2xhc3MgQ1NTTWVkaWEgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0aW5nIENTU01lZGlhLgogICAgc3RydWN0IFNvdXJjZSB7
CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgTUVESUFfUlVMRSA9IDQ4LAogICAgICAg
ICAgICBJTVBPUlRfUlVMRSA9IDQ5LAogICAgICAgICAgICBTVFlMRVNIRUVUID0gNTAsCiAgICAg
ICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBURVhUX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChURVhUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIENTU01lZGlhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0
eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NNZWRpYT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q1NTTWVkaWE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q1NTTWVkaWE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENTU01lZGlhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU01lZGlhPiByZXN1bHQgPSBDU1NNZWRp
YTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NNZWRpYSgpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAg
ICB2b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJM
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3Vy
Y2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9
Cn07CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9m
aWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNUT1JfU0VUID0gMSA8PCAwLAog
ICAgICAgIFRJTUVfU0VUID0gMSA8PCAxLAogICAgICAgIEhJVF9DT1VOVF9TRVQgPSAxIDw8IDIs
CiAgICAgICAgTUFUQ0hfQ09VTlRfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKFNFTEVDVE9SX1NFVCB8IFRJTUVfU0VUIHwgSElUX0NPVU5UX1NFVCB8IE1BVENIX0NPVU5U
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5OwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU0VMRUNUT1JfU0VUPiYgc2V0U2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTRUxFQ1RPUl9TRVQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNFTEVDVE9SX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUSU1FX1NFVD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRJTUVfU0VUKSwgcHJvcGVydHlfdGlt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRpbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VElNRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSElUX0NPVU5UX1NFVD4mIHNldEhpdENvdW50KGlu
dCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBI
SVRfQ09VTlRfU0VUKSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxISVRfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE1BVENIX0NPVU5UX1NFVD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1BVENIX0NPVU5UX1NF
VCksIHByb3BlcnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1BVENIX0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9m
aWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVj
dG9yUHJvZmlsZUVudHJ5PiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0U2VsZWN0b3IoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAg
ICAqICAgICAuc2V0SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlbGVj
dG9yUHJvZmlsZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNlbGVjdG9yUHJvZmlsZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBUT1RBTF9USU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRB
X1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUT1RBTF9USU1FX1NFVCB8
IERBVEFfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRPVEFMX1RJTUVfU0VUPiYgc2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUT1RBTF9U
SU1FX1NFVCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUT1RBTF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgREFUQV9T
RVQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERBVEFf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmls
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0gU2VsZWN0b3JQcm9maWxlOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQogICAgICogICAgIC5zZXREYXRh
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3
IFNlbGVjdG9yUHJvZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENTUwoKbmFtZXNwYWNlIFRpbWVs
aW5lIHsKLyogVGltZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBy
ZWNvcmRlZCBhY3Rpdml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVudCA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVu
dD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGlu
ZUV2ZW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBz
ZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERB
VEFfU0VUKSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8VGltZWxpbmVF
dmVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFRpbWVsaW5lRXZl
bnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFs
dWUpOwogICAgfQp9OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5
cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBj
b2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTQ1JJUFRfSURf
U0VUID0gMSA8PCAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMSwKICAgICAgICBB
TExfRklFTERTX1NFVCA9IChTQ1JJUFRfSURfU0VUIHwgTElORV9OVU1CRVJfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRp
b24+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5P
X0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTG9jYXRp
b247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTQ1JJUFRfSURfU0VUPiYg
c2V0U2NyaXB0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTQ1JJUFRfSURfU0VUKSwgcHJvcGVydHlfc2NyaXB0SWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ1JJUFRfSURfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4mIHNldExp
bmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8TG9jYXRpb24+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExv
Y2F0aW9uPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5l
TnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IExvY2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVtbk51bWJlcihpbnQg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5IG9mIGNhbGwgZnJh
bWVzIGZvcm0gdGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0g
MCwKICAgICAgICBDQUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBGVU5DVElPTl9O
QU1FX1NFVCA9IDEgPDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8IDIsCiAgICAgICAg
U0NPUEVfQ0hBSU5fU0VUID0gMSA8PCAzLAogICAgICAgIFRISVNfU0VUID0gMSA8PCA0LAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVOQ1RJT05fTkFNRV9T
RVQgfCBMT0NBVElPTl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFt
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJh
bWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDQUxMX0ZSQU1FX0lEX1NF
VD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9TRVQpLCBwcm9wZXJ0
eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENB
TExfRlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZV
TkNUSU9OX05BTUVfU0VUPiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFN
RV9TRVQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RlVOQ1RJT05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTE9DQVRJT05fU0VUPiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IExPQ0FUSU9OX1NFVCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TE9DQVRJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNDT1BFX0NIQUlOX1NFVD4mIHNldFNjb3BlQ2hhaW4oUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUSElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxGcmFtZT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRDYWxsRnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAg
KiAgICAgLnNldExvY2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0U2NvcGVDaGFpbiguLi4pCiAg
ICAgKiAgICAgLnNldFRoaXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIFNjb3BlIGRlc2Ny
aXB0aW9uLiAqLwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5n
IFNjb3BlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
IEdMT0JBTCA9IDUxLAogICAgICAgICAgICBMT0NBTCA9IDUyLAogICAgICAgICAgICBXSVRIID0g
NTMsCiAgICAgICAgICAgIENMT1NVUkUgPSA1NCwKICAgICAgICAgICAgQ0FUQ0ggPSA1NSwKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBPQkpFQ1RfU0VU
ID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgT0JKRUNUX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFNjb3BlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBz
ZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVl
KHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPQkpF
Q1RfU0VUPiYgc2V0T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1RfU0VUKSwgcHJvcGVy
dHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgi
b2JqZWN0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9CSkVDVF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPFNjb3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxT
Y29wZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2NvcGUoKSkp
OwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBET01EZWJ1
Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01CcmVha3BvaW50VHlw
ZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFNVQlRSRUVfTU9ESUZJRUQgPSA1NiwKICAgICAg
ICBBVFRSSUJVVEVfTU9ESUZJRUQgPSA1NywKICAgICAgICBOT0RFX1JFTU9WRUQgPSA1OCwKICAg
IH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCm5hbWVzcGFjZSBQcm9maWxlciB7Cn0gLy8gUHJvZmlsZXIKCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCgoj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVi
bGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoK
ICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBjb25zdCBTdHJp
bmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAgICAgICAgdm9pZCBk
aWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZCk7
CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3BlY3RvciogaW5zcGVj
dG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVtb3J5IHsKICAgIHB1
YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAmbV9tZW1vcnk7IH0K
CiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb21D
b250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRFdmVu
dEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZChjb25zdCBTdHJpbmcm
IGZyYW1lSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgfTsKCiAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gJm1fcGFnZTsgfQoKICAgIGNsYXNzIFJ1
bnRpbWUgewogICAgcHVibGljOgogICAgICAgIFJ1bnRpbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUnVudGltZSogcnVudGltZSgpIHsgcmV0
dXJuICZtX3J1bnRpbWU7IH0KCiAgICBjbGFzcyBDb25zb2xlIHsKICAgIHB1YmxpYzoKICAgICAg
ICBDb25zb2xlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyB9CiAgICAgICAgdm9pZCBtZXNzYWdlQWRkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSk7CiAgICAgICAgdm9pZCBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKGludCBjb3Vu
dCk7CiAgICAgICAgdm9pZCBtZXNzYWdlc0NsZWFyZWQoKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ29uc29sZSogY29uc29sZSgpIHsg
cmV0dXJuICZtX2NvbnNvbGU7IH0KCiAgICBjbGFzcyBOZXR3b3JrIHsKICAgIHB1YmxpYzoKICAg
ICAgICBOZXR3b3JrKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCByZXF1ZXN0V2lsbEJlU2VudChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBj
b25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRvdWJs
ZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9y
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29y
azo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9u
c2UpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCk7CiAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRv
dWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSov
IGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAg
IHZvaWQgZGF0YVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0
YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKTsKICAgICAgICB2b2lk
IGxvYWRpbmdGaW5pc2hlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFt
cCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBk
b3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCwgY29uc3QgYm9vbCogY29u
c3QgY2FuY2VsZWQpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBkb3VibGUgdGltZXN0YW1w
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNvdXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3Qo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVxdWVzdCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2Nr
ZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAg
ICAgICAgdm9pZCB3ZWJTb2NrZXRDbG9zZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJs
ZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1cm4gJm1fbmV0d29yazsgfQoK
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBEYXRhYmFzZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgRGF0YWJhc2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERhdGFiYXNlKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhYmFzZSk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJh
bnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlv
bkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNx
bEVycm9yKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0YWJhc2U7IH0KCiNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBw
dWJsaWM6CiAgICAgICAgRE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9NU3RvcmFnZShQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9y
YWdlKGludCBzdG9yYWdlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0
ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOwogICAgfTsKCiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1f
ZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgog
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNV
cGRhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwg
aW50IHN0YXR1cyk7CiAgICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dP
bmxpbmUpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1f
YXBwbGljYXRpb25jYWNoZTsgfQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZp
bGVTeXN0ZW0gewogICAgcHVibGljOgogICAgICAgIEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5
c3RlbSgpIHsgcmV0dXJuICZtX2ZpbGVzeXN0ZW07IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9T
WVNURU0pCiAgICBjbGFzcyBET00gewogICAgcHVibGljOgogICAgICAgIERPTShJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQg
ZG9jdW1lbnRVcGRhdGVkKCk7CiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJ
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmli
dXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICAgICB2b2lkIGlubGluZVN0eWxlSW52YWxpZGF0ZWQoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZUlkcyk7CiAgICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRh
TW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKTsKICAgICAg
ICB2b2lkIGNoaWxkTm9kZUNvdW50VXBkYXRlZChpbnQgbm9kZUlkLCBpbnQgY2hpbGROb2RlQ291
bnQpOwogICAgICAgIHZvaWQgY2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50
IHByZXZpb3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVS
ZW1vdmVkKGludCBwYXJlbnROb2RlSWQsIGludCBub2RlSWQpOwogICAgICAgIHZvaWQgc2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET00qIGRvbSgpIHsgcmV0dXJu
ICZtX2RvbTsgfQoKICAgIGNsYXNzIENTUyB7CiAgICBwdWJsaWM6CiAgICAgICAgQ1NTKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBDU1MqIGNzcygpIHsgcmV0dXJuICZtX2Nz
czsgfQoKICAgIGNsYXNzIFRpbWVsaW5lIHsKICAgIHB1YmxpYzoKICAgICAgICBUaW1lbGluZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAg
ICAgIHZvaWQgZXZlbnRSZWNvcmRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlRpbWVsaW5l
OjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQpOwog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBU
aW1lbGluZSogdGltZWxpbmUoKSB7IHJldHVybiAmbV90aW1lbGluZTsgfQoKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRGVidWdnZXIgewogICAgcHVibGljOgogICAg
ICAgIERlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCBnbG9iYWxPYmplY3RDbGVhcmVkKCk7CiAgICAgICAgdm9p
ZCBzY3JpcHRQYXJzZWQoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1cmws
IGludCBzdGFydExpbmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGludCBlbmRDb2x1
bW4sIGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VNYXBVUkwpOwogICAgICAgIHZvaWQgc2NyaXB0RmFpbGVkVG9QYXJzZShjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTb3VyY2UsIGludCBzdGFydExpbmUsIGludCBlcnJv
ckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICAgICB2b2lkIGJyZWFrcG9p
bnRSZXNvbHZlZChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGxvY2F0aW9uKTsKICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFzb24nIHdo
aWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgc3RydWN0IFJlYXNvbiB7CiAgICAgICAg
ZW51bSBFbnVtIHsKICAgICAgICAgICAgWEhSID0gNSwKICAgICAgICAgICAgRE9NID0gNTksCiAg
ICAgICAgICAgIEVWRU5UX0xJU1RFTkVSID0gNjAsCiAgICAgICAgICAgIEVYQ0VQVElPTiA9IDYx
LAogICAgICAgICAgICBPVEhFUiA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgUmVh
c29uCgogICAgICAgIHZvaWQgcGF1c2VkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxG
cmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICAgICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGVidWdnZXIq
IGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xh
c3MgRE9NRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERPTURlYnVnZ2VyKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTURlYnVnZ2Vy
KiBkb21kZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RvbWRlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgIGNsYXNzIFByb2ZpbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICBQcm9maWxlcihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgYWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKTsK
ICAgICAgICB2b2lkIGFkZEhlYXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYg
Y2h1bmspOwogICAgICAgIHZvaWQgZmluaXNoSGVhcFNuYXBzaG90KGludCB1aWQpOwogICAgICAg
IHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJvZmlsaW5nKTsKICAgICAgICB2b2lk
IHJlc2V0UHJvZmlsZXMoKTsKICAgICAgICB2b2lkIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNz
KGludCBkb25lLCBpbnQgdG90YWwpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBQcm9maWxlciogcHJvZmlsZXIoKSB7IHJldHVybiAmbV9w
cm9maWxlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5B
QkxFKFdPUktFUlMpCiAgICBjbGFzcyBXb3JrZXIgewogICAgcHVibGljOgogICAgICAgIFdvcmtl
cihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQog
ICAgICAgIHZvaWQgd29ya2VyQ3JlYXRlZChpbnQgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgdXJs
LCBib29sIGluc3BlY3RvckNvbm5lY3RlZCk7CiAgICAgICAgdm9pZCB3b3JrZXJUZXJtaW5hdGVk
KGludCB3b3JrZXJJZCk7CiAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyKGlu
dCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAg
IHZvaWQgZGlzY29ubmVjdGVkRnJvbVdvcmtlcigpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBXb3JrZXIqIHdvcmtlcigpIHsgcmV0dXJu
ICZtX3dvcmtlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKcHJpdmF0ZToKICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICBJ
bnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBNZW1vcnkgbV9tZW1vcnk7CiAgICBQYWdlIG1fcGFn
ZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAgQ29uc29sZSBtX2NvbnNvbGU7CiAgICBOZXR3
b3JrIG1fbmV0d29yazsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBEYXRhYmFzZSBtX2Rh
dGFiYXNlOwojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIERPTVN0b3JhZ2UgbV9k
b21zdG9yYWdlOwogICAgQXBwbGljYXRpb25DYWNoZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNpZiBF
TkFCTEUoRklMRV9TWVNURU0pCiAgICBGaWxlU3lzdGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlmIC8v
IEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIERPTSBtX2RvbTsKICAgIENTUyBtX2NzczsKICAgIFRp
bWVsaW5lIG1fdGltZWxpbmU7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERl
YnVnZ2VyIG1fZGVidWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1
Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICBQcm9maWxlciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIFdvcmtlciBt
X3dvcmtlcjsKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp9OwoKfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120342</attachid>
            <date>2011-12-22 10:58:32 -0800</date>
            <delta_ts>2011-12-27 10:28:19 -0800</delta_ts>
            <desc>Sample InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>39770</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVt
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
ICAgICwgbV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJJbnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpJbnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBpbnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNw
ZWN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIklu
c3BlY3Rvci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwg
dXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7
CiAgICBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3Jr
ZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
c3BlY3Rvcjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNw
ZWN0b3IuZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGlt
ZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50
RmlyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZp
cmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFt
cCIsIHRpbWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0
YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBs
b2FkRXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFt
ZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZnJhbWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5h
dmlnYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFt
ZSIsIGZyYW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OlBhZ2U6OmZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZURldGFjaGVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBmcmFtZURldGFjaGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiUGFnZS5mcmFtZURldGFjaGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIGZyYW1lRGV0YWNoZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChmcmFtZURldGFjaGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpDb25zb2xlOjptZXNzYWdlQWRkZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZUFkZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdl
QWRkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3NhZ2VBZGRlZCIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJtZXNzYWdlIiwgbWVz
c2FnZSk7CiAgICBtZXNzYWdlQWRkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlQWRk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNv
bnNvbGU6Om1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImNvdW50IiwgY291
bnQpOwogICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNvbnNvbGU6Om1lc3NhZ2VzQ2xlYXJlZCgpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2FnZXNDbGVhcmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlc0NsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFdpbGxCZVNlbnQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWRpcmVjdFJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2ls
bEJlU2VudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdp
bGxCZVNlbnRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxs
QmVTZW50Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVl
c3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVy
SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRV
UkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3Rh
Y2tUcmFjZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3Rh
Y2tUcmFjZSk7CiAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVkaXJlY3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVx
dWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29y
azo6cmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZSIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCBy
ZXF1ZXN0SWQpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2Fk
ZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiLCB0eXBlKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNw
b25zZSIsIHJlc3BvbnNlKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpkYXRhUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFSZWNlaXZlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5kYXRhUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoImRhdGFMZW5ndGgiLCBkYXRhTGVuZ3RoKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0TnVtYmVyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGVuY29kZWREYXRhTGVuZ3RoKTsK
ICAgIGRhdGFSZWNlaXZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0
KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRhdGFSZWNlaXZlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1w
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIGxv
YWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5pc2hlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwg
Y29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmFpbGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBsb2FkaW5nRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiTmV0d29yay5sb2FkaW5nRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlcnJvclRleHQiLCBlcnJvclRleHQpOwogICAgaWYgKGNhbmNlbGVkKQogICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiY2FuY2VsZWQiLCAqY2FuY2VsZWQpOwogICAg
bG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGYWlsZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRv
ciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2Fj
aGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJh
bWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBkb2N1bWVudFVSTCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJpbml0aWF0b3IiLCBpbml0aWF0b3IpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInJlc291cmNlIiwgcmVzb3VyY2UpOwogICAgcmVxdWVzdFNl
cnZlZEZyb21NZW1vcnlDYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXF1ZXN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRX
aWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0Iik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJl
cXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0
YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXF1ZXN0IiwgcmVxdWVzdCk7CiAg
ICB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCh3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIHVybCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q3Jl
YXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7
CiAgICB3ZWJTb2NrZXRDcmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNP
YmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2ViU29ja2V0Q3Jl
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6d2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRDbG9zZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldENsb3NlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q2xvc2VkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIHdlYlNvY2tldENsb3NlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldENs
b3NlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6YWRkRGF0YWJhc2UoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGFiYXNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGREYXRh
YmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRGF0YWJhc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5hZGREYXRhYmFzZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRhYmFzZSIsIGRhdGFiYXNl
KTsKICAgIGFkZERhdGFiYXNlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRGF0YWJhc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNl
OjpzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25TdWNjZWVk
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0aW9u
U3VjY2VlZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25TdWNjZWVkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiLCBjb2x1bW5OYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJ2YWx1ZXMiLCB2YWx1ZXMpOwogICAgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0YWJhc2U6OnNxbFRyYW5zYWN0
aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3FsRXJyb3IpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbFRyYW5zYWN0aW9uRmFp
bGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzcWxUcmFuc2FjdGlv
bkZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLnNxbFRyYW5zYWN0
aW9uRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRy
YW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciIsIHNxbEVycm9yKTsKICAgIHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3RvcmFnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWRkRE9NU3RvcmFnZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRE9NU3RvcmFnZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2UuYWRkRE9NU3RvcmFnZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzdG9yYWdlIiwgc3RvcmFnZSk7
CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRE9NU3RvcmFnZU1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3Rv
cmFnZTo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB1cGRhdGVET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NU3RvcmFnZS51cGRhdGVET01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJZCk7CiAgICB1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6
YXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLmFwcGxpY2F0aW9uQ2FjaGVT
dGF0dXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
ImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJtYW5pZmVz
dFVSTCIsIG1hbmlmZXN0VVJMKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXMi
LCBzdGF0dXMpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6bmV0
d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiQXBwbGljYXRpb25DYWNoZS5uZXR3b3JrU3RhdGVVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc05vd09ubGluZSIsIGlzTm93T25saW5lKTsK
ICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChuZXR3b3JrU3Rh
dGVVcGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRPTTo6ZG9jdW1lbnRVcGRhdGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
b2N1bWVudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uZG9jdW1lbnRV
cGRhdGVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkb2N1bWVudFVw
ZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6c2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRDaGlsZE5vZGVzTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRDaGlsZE5vZGVzTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMiKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAgIHNldENoaWxkTm9kZXNN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZU1vZGlmaWVkKGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRyaWJ1dGVSZW1vdmVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJ
ZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgYXR0cmli
dXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZVJlbW92ZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6aW5saW5l
U3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmlubGluZVN0eWxlSW52YWxpZGF0ZWQiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlSWRzIiwgbm9kZUlk
cyk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5s
aW5lU3R5bGVJbnZhbGlkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6RE9NOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
aGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRP
TS5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJjaGFyYWN0ZXJEYXRhIiwgY2hhcmFjdGVyRGF0YSk7CiAgICBjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6Y2hpbGROb2Rl
Q291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlQ291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlQ291bnRVcGRhdGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCBjaGlsZE5vZGVDb3VudCk7CiAg
ICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVD
b3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRPTTo6Y2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZp
b3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Y2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoaWxk
Tm9kZUluc2VydGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
InBhcmVudE5vZGVJZCIsIHBhcmVudE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigicHJldmlvdXNOb2RlSWQiLCBwcmV2aW91c05vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnRO
b2RlSWQsIGludCBub2RlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlUmVtb3Zl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJlbnROb2Rl
SWQiLCBwYXJlbnROb2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIs
IG5vZGVJZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY2hp
bGROb2RlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Q1NTOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIkNTUy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlRpbWVsaW5lOjpl
dmVudFJlY29yZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5l
RXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXZlbnRSZWNvcmRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwg
IlRpbWVsaW5lLmV2ZW50UmVjb3JkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVjb3JkIiwgcmVjb3JkKTsKICAgIGV2ZW50UmVjb3JkZWRNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChldmVudFJlY29yZGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlcjo6Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJE
ZWJ1Z2dlci5nbG9iYWxPYmplY3RDbGVhcmVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChnbG9iYWxPYmplY3RDbGVhcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6c2NyaXB0UGFyc2VkKGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3Rh
cnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBp
c0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRl
YnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0
YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFy
dENvbHVtbik7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAg
ICBpZiAoaXNDb250ZW50U2NyaXB0KQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigi
aXNDb250ZW50U2NyaXB0IiwgKmlzQ29udGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygic291cmNlTWFwVVJMIiwgc291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFy
c2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlcnJvck1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFp
bGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
OjpicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBsb2NhdGlvbikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludFJlc29sdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBicmVh
a3BvaW50UmVzb2x2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5icmVh
a3BvaW50UmVzb2x2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZygiYnJlYWtwb2ludElkIiwgYnJlYWtwb2ludElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIGxvY2F0aW9uKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnBhdXNlZChQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGF1c2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5wYXVz
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjYWxsRnJhbWVz
IiwgY2FsbEZyYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVhc29uIiwgcmVh
c29uKTsKICAgIGlmIChkYXRhKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRh
IiwgZGF0YSk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChwYXVzZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpy
ZXN1bWVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdW1lZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzdW1lZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLnJlc3VtZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHJlc3VtZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjphZGRQ
cm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5hZGRQcm9maWxlSGVhZGVyIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImhlYWRlciIsIGhlYWRlcik7CiAgICBhZGRQcm9maWxl
SGVhZGVyTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OmFkZEhl
YXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVua01lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLmFkZEhlYXBTbmFwc2hvdENodW5rIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInVpZCIsIHVpZCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygiY2h1bmsiLCBjaHVuayk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVu
a01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6ZmluaXNo
SGVhcFNuYXBzaG90KGludCB1aWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZpbmlz
aEhlYXBTbmFwc2hvdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZmlu
aXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIuZmlu
aXNoSGVhcFNuYXBzaG90Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1i
ZXIoInVpZCIsIHVpZCk7CiAgICBmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQ
cm9maWxpbmcpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNldFJlY29yZGluZ1Byb2Zp
bGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNldFJlY29yZGluZ1By
b2ZpbGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQcm9maWxlci5zZXRSZWNvcmRpbmdQ
cm9maWxlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc1By
b2ZpbGluZyIsIGlzUHJvZmlsaW5nKTsKICAgIHNldFJlY29yZGluZ1Byb2ZpbGVNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVzZXRQcm9maWxlcygpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc2V0UHJvZmlsZXNNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc2V0UHJvZmlsZXNNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5yZXNldFByb2ZpbGVzIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNldFByb2ZpbGVzTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVwb3J0SGVhcFNuYXBzaG90UHJv
Z3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIucmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZG9uZSIsIGRvbmUpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInRvdGFsIiwgdG90YWwpOwogICAgcmVwb3J0SGVhcFNuYXBzaG90
UHJvZ3Jlc3NNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
c01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
V29ya2VyOjp3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaW5zcGVjdG9yQ29ubmVjdGVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3b3Jr
ZXJDcmVhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiV29ya2VyLndvcmtlckNyZWF0ZWQi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigid29ya2VySWQiLCB3
b3JrZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaW5zcGVjdG9yQ29ubmVjdGVkIiwgaW5zcGVjdG9yQ29u
bmVjdGVkKTsKICAgIHdvcmtlckNyZWF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpXb3JrZXI6OndvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiV29ya2VyLndvcmtlclRlcm1pbmF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigid29ya2VySWQiLCB3b3JrZXJJZCk7CiAgICB3b3JrZXJUZXJtaW5hdGVk
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod29ya2VyVGVybWluYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRpc3BhdGNoTWVzc2FnZUZyb21X
b3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3JrZXIuZGlzcGF0
Y2hNZXNzYWdlRnJvbVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ3b3JrZXJJZCIsIHdvcmtlcklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlck1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNjb25uZWN0
ZWRGcm9tV29ya2VyKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGlzY29ubmVjdGVk
RnJvbVdvcmtlck1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGlzY29u
bmVjdGVkRnJvbVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci5kaXNj
b25uZWN0ZWRGcm9tV29ya2VyIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChkaXNjb25uZWN0ZWRGcm9tV29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKCmNvbnN0IFN0
cmluZyBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewogICAgIkRvY3VtZW50IiwKICAgICJTdHls
ZXNoZWV0IiwKICAgICJJbWFnZSIsCiAgICAiRm9udCIsCiAgICAiU2NyaXB0IiwKICAgICJYSFIi
LAogICAgIldlYlNvY2tldCIsCiAgICAiT3RoZXIiLAogICAgIm9iamVjdCIsCiAgICAiZnVuY3Rp
b24iLAogICAgInVuZGVmaW5lZCIsCiAgICAic3RyaW5nIiwKICAgICJudW1iZXIiLAogICAgImJv
b2xlYW4iLAogICAgImFycmF5IiwKICAgICJudWxsIiwKICAgICJub2RlIiwKICAgICJyZWdleHAi
LAogICAgImRhdGUiLAogICAgImh0bWwiLAogICAgIndtbCIsCiAgICAieG1sIiwKICAgICJqYXZh
c2NyaXB0IiwKICAgICJuZXR3b3JrIiwKICAgICJjb25zb2xlLWFwaSIsCiAgICAib3RoZXIiLAog
ICAgInRpcCIsCiAgICAibG9nIiwKICAgICJ3YXJuaW5nIiwKICAgICJlcnJvciIsCiAgICAiZGVi
dWciLAogICAgImRpciIsCiAgICAiZGlyeG1sIiwKICAgICJ0cmFjZSIsCiAgICAic3RhcnRHcm91
cCIsCiAgICAic3RhcnRHcm91cENvbGxhcHNlZCIsCiAgICAiZW5kR3JvdXAiLAogICAgImFzc2Vy
dCIsCiAgICAicGFyc2VyIiwKICAgICJzY3JpcHQiLAogICAgInVzZXIiLAogICAgInVzZXItYWdl
bnQiLAogICAgImluc3BlY3RvciIsCiAgICAiIiwKICAgICJhY3RpdmUiLAogICAgImluYWN0aXZl
IiwKICAgICJkaXNhYmxlZCIsCiAgICAic3R5bGUiLAogICAgIm1lZGlhUnVsZSIsCiAgICAiaW1w
b3J0UnVsZSIsCiAgICAic3R5bGVzaGVldCIsCiAgICAiZ2xvYmFsIiwKICAgICJsb2NhbCIsCiAg
ICAid2l0aCIsCiAgICAiY2xvc3VyZSIsCiAgICAiY2F0Y2giLAogICAgInN1YnRyZWUtbW9kaWZp
ZWQiLAogICAgImF0dHJpYnV0ZS1tb2RpZmllZCIsCiAgICAibm9kZS1yZW1vdmVkIiwKICAgICJE
T00iLAogICAgIkV2ZW50TGlzdGVuZXIiLAogICAgImV4Y2VwdGlvbiIKfTsKCmNvbnN0IFN0cmlu
ZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1swXTsKfQoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCn0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120356</attachid>
            <date>2011-12-22 11:49:28 -0800</date>
            <delta_ts>2011-12-22 12:56:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111222234926.patch</filename>
            <type>text/plain</type>
            <size>19222</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi4xNDE1NzI2N2RlNTFkZmVl
OWYzNzVjYTFkMGNhMWYyNzgyYzIwNTkzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsOSArNTEsMjkgQEAgRE9NQUlO
X0RFRklORV9OQU1FX01BUCA9IHsKICMgTWFudWFsbHktZmlsbGVkIG1hcCBvZiB0eXBlIG5hbWUg
cmVwbGFjZW1lbnRzLgogVFlQRV9OQU1FX0ZJWF9NQVAgPSB7CiAgICAgIlJHQkEiOiAiUmdiYSIs
ICAjIFJHQkEgaXMgcmVwb3J0ZWQgdG8gYmUgY29uZmxpY3Rpbmcgd2l0aCBhIGRlZmluZSBuYW1l
IGluIFdpbmRvd3MgQ0UuCisgICAgIk5VTEwiOiAiTnVsbCIsCisgICAgIiI6ICJFTVBUWV9OQU1F
IiwKIH0KIAogCitjbGFzcyBHZW5lcmF0ZWROYW1lQ2hlY2tlcjoKKyAgICBuYW1lX3NldF8gPSBz
ZXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9uYW1lKGNscywgbmFtZSk6Cisg
ICAgICAgIGNscy5uYW1lX3NldF8uYWRkKG5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgZ2VuZXJhdGVfY2hlY2tfY29kZShjbHMpOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAg
ICBmb3IgbmFtZSBpbiBjbHMubmFtZV9zZXRfOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgi
I2lmZGVmICIgKyBuYW1lICsgIlxuIikKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNlcnJv
ciBuYW1lICIgKyBuYW1lICsgIiBpcyB1c2VkXG4iKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgiI2VuZGlmXG4iKQorICAgICAgICByZXR1cm4gam9pbihvdXRwdXQsICIiKQorCitHZW5lcmF0
ZWROYW1lQ2hlY2tlci5hZGRfbmFtZSgiRW51bSIpCisKIGNtZGxpbmVfcGFyc2VyID0gb3B0cGFy
c2UuT3B0aW9uUGFyc2VyKCkKICMgRklYTUU6IGdldCByaWQgb2YgdGhpcyBvcHRpb24gb25jZSB0
aGUgc3lzdGVtIGlzIHN0YWJsZS4KIGNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tZGVmaW5l
cyIpCkBAIC01MTksNiArNTM5LDI4IEBAIGNsYXNzIFdyaXRlcjoKICAgICAgICAgcmV0dXJuIFdy
aXRlcihuZXdfb3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQogCiAKK2Ns
YXNzIEVudW1Db25zdGFudHM6CisgICAgbWFwXyA9IHt9CisgICAgY29uc3RhbnRzXyA9IFtdCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgorICAg
ICAgICBpZiB2YWx1ZSBpbiBjbHMubWFwXzoKKyAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2
YWx1ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKKyAg
ICAgICAgICAgIGNscy5tYXBfW3ZhbHVlXSA9IHBvcworICAgICAgICAgICAgY2xzLmNvbnN0YW50
c18uYXBwZW5kKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHBvcworCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIGdldF9lbnVtX2NvbnN0YW50X2NvZGUoY2xzKToKKyAgICAgICAgb3V0cHV0
ID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gY2xzLmNvbnN0YW50c186CisgICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKCIgICAgXCIiICsgaXRlbSArICJcIiIpCisgICAgICAgIHJldHVybiBqb2lu
KG91dHB1dCwgIixcbiIpICsgIlxuIgorCisKIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBAc3Rh
dGljbWV0aG9kCiAgICAgZGVmIGNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlw
YWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgdHlwZV9kYXRhKToKQEAgLTUyNiw2ICs1NjgsNyBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAg
ICAgaXNfYWRfaG9jID0gRmFsc2UKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlw
ZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NDYs
NiArNTg5LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5
cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KToKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRf
aG9jID0gVHJ1ZQorICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAg
LTU3MSwyMyArNjE1LDMwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90
eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY29tbWVudF9vdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXIuZ2V0X2luZGVudGVkKCIvLyAiKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5j
bGFzc19uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFt
ZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCJuYW1lc3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoInN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdlbmVyYXRlZE5hbWVDaGVja2VyLmFkZF9uYW1lKGVudW1fbmFtZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBlbnVtIEVudW0ge1xu
IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVt
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29u
c3RhbnRzLmFkZF9jb25zdGFudChlbnVtX2l0ZW0pCisKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gZW51bV9pdGVtLnJlcGxhY2UoJy0nLCAnXycpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY29uc3Qg
Y2hhciogY29uc3QgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5hcHBlbmQoQ2FwaXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihpdGVtX2NfbmFt
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIg
PSBcIiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIlwiO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIn0gLy8gbmFtZXNwYWNlICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdGVtX2NfbmFtZSA9IENhcGl0YWxpemVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRf
d2l0aF91bmRlcnNjb3JlcyhpdGVtX2NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGl0ZW1fY19uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gVFlQRV9OQU1FX0ZJ
WF9NQVBbaXRlbV9jX25hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgICAgICAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChpdGVtX2NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdlbmVyYXRlZE5hbWVDaGVja2VyLmFkZF9uYW1lKGl0ZW1fY19uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAl
IGVudW1fcG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiLFxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB9O1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIn07IC8vIHN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiXG5cbiIpCiAKQEAgLTU5OSw3ICs2NTAsMTEgQEAgY2xhc3MgVHlwZUJp
bmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJh
bV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVf
bmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJnZXRFbnVtQ29u
c3RhbnRWYWx1ZSglcykiCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC02MzMsNiArNjg4
LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVj
ZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LlN0cmluZwogCisgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNs
cywgb3B0aW9uYWwpOgogICAgICAgICAgICAgICAgICAgICAgICAgI0ZJWE1FOiByZXR1cm4gYSB0
eXBlZGVmIG5hbWUgaW5zdGVhZC4KQEAgLTcxNSwyOCArNzc0LDMyIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFk
X2hvY190eXBlX2NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbV9yYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRf
YW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFt
VHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2Nf
dHlwZV90ZXh0KEZhbHNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lX211bHRpbGluZSgiIiIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHBhcmFtX3Jh
d190eXBlLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZh
bHNlKS5nZXRfdGV4dCgpLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKSkKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhv
ZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIi
IgogICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJXM+JiBzZXQlcyglcyB2YWx1ZSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICVzKSwgcHJvcGVydHlfJXNf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKCIlcyIsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCAlcyk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPCVzPigpOwogICAgICAgICB9CiAiIiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9f
dXBwZXIocHJvcF9uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFubm90YXRlZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVfZW51bV9pdGVtc1twb3NdLCBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9u
YW1lLCBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3Rv
X3VwcGVyKHByb3BfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHBhcmFtX3R5cGVfYmlu
ZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVf
ZW51bV9pdGVtc1twb3NdLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBl
X29wdC5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFs
dWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9l
bnVtX2l0ZW1zW3Bvc10pKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVy
YXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9n
ZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2Rl
X2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2Rl
X2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
X2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcikKLQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoIiIiCiAgICAgICAg
IG9wZXJhdG9yIFJlZlB0cjwlcz4mICgpCiAgICAgICAgIHsKQEAgLTc3MywxMyArODM2LDE1IEBA
IGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNvbnRleHRf
ZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXR0ZXJfbmFtZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJcbiAgICB2b2lkICVzIiAlIHNldHRl
cl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5
cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBV
VCwgRmFsc2UpLmdldF90ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUp
XG4iICUgYW5ub3RhdGVkX3R5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsIHZhbHVl
KTtcbiIgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0
ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcGFyYW1fdHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5n
ZXRfbW9kZXMocGFyYW1fdHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBz
ZXR0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgcGFyYW1fdHlwZV9vcHQuZ2V0X2NfcGFyYW1fdHlw
ZV90ZXh0KHBhcmFtX3R5cGVfYmluZGluZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNldCVz
KFwiJXNcIiwgJXMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAlIChwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRl
cl9uYW1lKCksIHByb3BbIm5hbWUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
KHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRp
bmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgpAQCAtODI1LDcgKzg5MCwxMSBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0
X2RvbWFpbl9uYW1lICsgIjo6IiArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxs
X25hbWVfcHJlZml4ICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiPiIKKworICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKIAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKQEAgLTg0NCw2ICs5MTMs
MTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVO
VCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKIAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25f
cGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1
Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBl
cy5PYmplY3QKIApAQCAtODk1LDYgKzk2OCwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90
eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKIAogICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAg
ICAgICAgICAgICAgIHJldHVybiByYXdfdHlwZQogCkBAIC0xMDg0LDYgKzExNjEsNyBAQCAkY29k
ZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAjaW5jbHVkZSA8UGxhdGZvcm1T
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiskY2hlY2tEZWZpbmVzCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKQEAg
LTEwOTksNiArMTE3Nyw5IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIgewogJHtmb3J3YXJkc30KKworY29uc3QgU3RyaW5nJiBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7CisKICR7dHlwZUJ1aWxkZXJzfQogfSAvLyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIKIApAQCAtMTExNSw2ICsxMTk2LDcgQEAgcHJpdmF0ZToKICR7ZmllbGREZWNs
YXJhdGlvbnN9fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorJGNoZWNrRGVmaW5lcwogI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCiAiIiIpCiAKQEAgLTE1NDEsNiAr
MTYyMywxNyBAQCAkY29uc3RydWN0b3JJbml0ewogCiAkbWV0aG9kcwogCituYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIgeworCitjb25zdCBTdHJpbmcgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyRl
bnVtQ29uc3RhbnRWYWx1ZXN9OworCitjb25zdCBTdHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzWzBdOworfQorCit9
IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtMTU2OCw2ICsxNjYxLDU5IEBAIGRlZiBnZXRf
YW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVkX3R5cGUpOgogICAgIGVsc2U6
CiAgICAgICAgIHJldHVybiByYXdfdHlwZQogCisKKyMgQ2hvb3NlcyBtZXRob2QgZ2VuZXJhdGUg
bW9kZXMgZm9yIGEgcGFydGljdWxhciB0eXBlLiBBIHBhcnRpY3VsYXIgc2V0dGVyCisjIGNhbiBi
ZSBnZW5lcmF0ZWQgYXMgb25lIG1ldGhvZCB3aXRoIGEgc2ltcGxlIHBhcmFtZXRlciB0eXBlLAor
IyBhcyBvbmUgbWV0aG9kIHdpdGggYSByYXcgdHlwZSBuYW1lIGFuZCBjb21tZW50ZWQgYW5ub3Rh
dGlvbiBhYm91dCBleHBlY3RlZAorIyBzcGVjaWFsaXplZCB0eXBlIG5hbWUgb3IgYXMgb3Zlcmxv
YWRlZCBtZXRob2Qgd2hlbiByYXcgYW5kIHNwZWNpYWxpemVkCisjIHBhcmFtZXRlciB0eXBlcyBy
ZXF1aXJlIGRpZmZlcmVudCBiZWhhdmlvci4KK2NsYXNzIE1ldGhvZEdlbmVyYXRlTW9kZXM6Cisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9tb2RlcyhjbHMsIHR5cGVfYmluZGluZyk6Cisg
ICAgICAgIGlmIHR5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVy
bigpOgorICAgICAgICAgICAgIyBJbiByYXcgYW5kIHN0cmljdCBtb2RlcyBtZXRob2QgY29kZSBp
cyBhY3R1YWxseSBkaWZmZXJlbnQuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5TdHJpY3RQYXJh
bWV0ZXJNb2RlLCBjbHMuUmF3UGFyYW1ldGVyTW9kZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgdGhlIHNhbWUuCisg
ICAgICAgICAgICAjIE9ubHkgcHV0IHN0cmljdCBwYXJhbWV0ZXIgdHlwZSBpbiBjb21tZW50cy4K
KyAgICAgICAgICAgIHJldHVybiBbY2xzLkNvbWJpbmVkTW9kZV0KKworICAgIGNsYXNzIFN0cmlj
dFBhcmFtZXRlck1vZGU6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9j
X3BhcmFtX3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGVf
YmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmlu
ZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBwYXJhbV90eXBlX2JpbmRp
bmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQorICAgICAgICAgICAgaWYg
cGF0dGVybjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVybiAlIHZhbHVlX3JlZgorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVfcmVmCisKKyAgICBj
bGFzcyBSYXdQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVy
biB0eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJh
bVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCkKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFy
YW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3Jl
ZgorCisgICAgY2xhc3MgQ29tYmluZWRNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAg
IHJldHVybiBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jh
d190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwg
RmFsc2UpLmdldF90ZXh0KCksCisgICAgICAgICAgICAgICAgdHlwZV9iaW5kaW5nLmdldF9pbl9j
X3R5cGVfdGV4dChGYWxzZSkpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVm
KToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQorICAgICAgICAgICAgaWYgcGF0dGVybjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGF0dGVybiAlIHZhbHVlX3JlZgorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVfcmVmCisKIGNsYXNzIEdlbmVyYXRvcjoKICAg
ICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtdCiAgICAgZnJvbnRlbmRfZG9tYWluX2Ns
YXNzX2xpbmVzID0gW10KQEAgLTE5NDAsNyArMjA4Niw4IEBAIGZyb250ZW5kX2hfZmlsZS53cml0
ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgICAgICBmaWVsZERl
Y2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcywgIiIp
LAogICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFp
bl9jbGFzc19saW5lcywgIiIpLAogICAgICAgICAgdHlwZUJ1aWxkZXJzPWpvaW4oZmxhdHRlbl9s
aXN0KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzKSwgIiIpLAotICAgICAgICAgZm9y
d2FyZHM9am9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCAiIikpKQorICAgICAg
ICAgZm9yd2FyZHM9am9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCAiIiksCisg
ICAgICAgICBjaGVja0RlZmluZXM9R2VuZXJhdGVkTmFtZUNoZWNrZXIuZ2VuZXJhdGVfY2hlY2tf
Y29kZSgpKSkKIAogYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfaC5zdWJz
dGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRf
Y29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKQEAgLTE5NTIsNyArMjA5OSw4IEBAIGJhY2tl
bmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogCiBm
cm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfY3BwLnN1YnN0aXR1dGUo
Tm9uZSwKICAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3Ry
dWN0b3JfaW5pdF9saXN0LCAiIiksCi0gICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5mcm9udGVu
ZF9tZXRob2RfbGlzdCwgIlxuIikpKQorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRl
bmRfbWV0aG9kX2xpc3QsICJcbiIpLAorICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3Rh
bnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSkpCiAKIGJhY2tlbmRfY3BwX2ZpbGUud3JpdGUo
VGVtcGxhdGVzLmJhY2tlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKICAgICBtZXRob2ROYW1lRGVj
bGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25f
bGlzdCwgIlxuIiksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120367</attachid>
            <date>2011-12-22 12:57:09 -0800</date>
            <delta_ts>2011-12-23 04:16:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111223005707.patch</filename>
            <type>text/plain</type>
            <size>21131</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi4yOTkwZTViZTQzNDRjNjA1
YjViYTY2MDgyNTdjNDQ3NzkxYTU2YzlkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNDgsMTEgKzQ4LDcyIEBAIERPTUFJ
Tl9ERUZJTkVfTkFNRV9NQVAgPSB7CiB9CiAKIAotIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5
cGUgbmFtZSByZXBsYWNlbWVudHMuCi1UWVBFX05BTUVfRklYX01BUCA9IHsKLSAgICAiUkdCQSI6
ICJSZ2JhIiwgICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVm
aW5lIG5hbWUgaW4gV2luZG93cyBDRS4KLX0KK2NsYXNzIE5hbWVDYXBpdGFsaXphdGlvblR5cGU6
CisgICAgQ0FNRUxfQ0FTRSA9ICJjYW1lbF9jYXNlIgorICAgIEFMTF9DQVBTID0gImFsbF9jYXBz
IgorCisKK2NsYXNzIE5hbWVGaXhNYXA6CisgICAgIyBmdW5jdGlvbiwgbm90IGEgbWV0aG9kCisg
ICAgZGVmIGNyZWF0ZV9tYXBfKCk6CisgICAgICAgIG1hcCA9IHt9CisKKyAgICAgICAgZGVmIGlu
aXRfZml4KG5hbWUsIGZpeCwgY2FwaXRhbGl6YXRpb24pOgorICAgICAgICAgICAgaWYgbmFtZSBp
biBtYXA6CisgICAgICAgICAgICAgICAgc3VibWFwID0gbWFwW25hbWVdCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHN1Ym1hcCA9IHt9CisgICAgICAgICAgICAgICAgbWFwW25h
bWVdID0gc3VibWFwCisgICAgICAgICAgICBzdWJtYXBbY2FwaXRhbGl6YXRpb25dID0gZml4CisK
KyAgICAgICAgIyBNYW51YWxseS1maWxsZWQgbGlzdCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRz
LgorICAgICAgICBpbml0X2ZpeCgiUkdCQSIsICJSZ2JhIiwgTmFtZUNhcGl0YWxpemF0aW9uVHlw
ZS5DQU1FTF9DQVNFKSAgIyBSR0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGgg
YSBkZWZpbmUgbmFtZSBpbiBXaW5kb3dzIENFLgorICAgICAgICBpbml0X2ZpeCgiTlVMTCIsICJO
dWxsIiwgTmFtZUNhcGl0YWxpemF0aW9uVHlwZS5BTExfQ0FQUykKKyAgICAgICAgaW5pdF9maXgo
IkFTU0VSVCIsICJBU1NFUlRfVEIiLCBOYW1lQ2FwaXRhbGl6YXRpb25UeXBlLkFMTF9DQVBTKQor
ICAgICAgICBpbml0X2ZpeCgiTE9HIiwgIkxPR19UQiIsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUu
QUxMX0NBUFMpCisgICAgICAgIGluaXRfZml4KCIiLCAiRU1QVFlfTkFNRSIsIE5hbWVDYXBpdGFs
aXphdGlvblR5cGUuQUxMX0NBUFMpCisgICAgICAgIHJldHVybiBtYXAKKworICAgIG1hcF8gPSBj
cmVhdGVfbWFwXygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2ZpeChjbHMsIG5h
bWUsIGNhcGl0YWxpemF0aW9uKToKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gY2xzLm1hcF86Cisg
ICAgICAgICAgICBHZW5lcmF0ZWROYW1lQ2hlY2tlci5hZGRfbmFtZShuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc3VibWFwID0gY2xzLm1hcF9bbmFtZV0KKyAgICAgICAg
aWYgY2FwaXRhbGl6YXRpb24gbm90IGluIHN1Ym1hcDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiRG9uJ3QgaGF2ZSBjYXBpdGFsaXphdGlvbiAnJXMnIGZvciBuYW1lICclcyciICUgKGNh
cGl0YWxpemF0aW9uLCBuYW1lKSkKKyAgICAgICAgcmVzdWx0ID0gc3VibWFwW2NhcGl0YWxpemF0
aW9uXQorICAgICAgICBHZW5lcmF0ZWROYW1lQ2hlY2tlci5hZGRfbmFtZShyZXN1bHQpCisgICAg
ICAgIHJldHVybiByZXN1bHQKKworCisjIFRoaXMgY2xhc3MgY29sbGVjdHMgYWxsIGdlbmVyYXRl
ZCBuYW1lcyB0aGF0IGNvdWxkIHRoZW9yZXRpY2FsbHkgY29uZmxpY3Qgd2l0aCBwcmVwcm9jZXNz
b3IgZGVmaW5lcy4KKyMgSXQgY2FuIG9wdGlvbmFsbHkgZ2VuZXJhdGUgcHJlcHJvY2Vzc29yIGNo
ZWNrcyBhZ2FpbnN0IHN1Y2ggY29uZmxpY3RzLgorY2xhc3MgR2VuZXJhdGVkTmFtZUNoZWNrZXI6
CisgICAgIyBEZWZpbmVzIHdoZXRoZXIgd2Ugd2FudCBjaGVjayBjb2RlIGdlbmVyYXRlZC4gQ2hh
bmdlIGl0IG1hbnVhbGx5LgorICAgIEdFTkVSQVRFX0NIRUNLSU5HX0NPREUgPSBGYWxzZQorCisg
ICAgbmFtZV9zZXRfID0gc2V0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhZGRfbmFt
ZShjbHMsIG5hbWUpOgorICAgICAgICBjbHMubmFtZV9zZXRfLmFkZChuYW1lKQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX2NoZWNrX2NvZGUoY2xzKToKKyAgICAgICAgaWYg
Y2xzLkdFTkVSQVRFX0NIRUNLSU5HX0NPREU6CisgICAgICAgICAgICBvdXRwdXQgPSBbXQorICAg
ICAgICAgICAgZm9yIG5hbWUgaW4gY2xzLm5hbWVfc2V0XzoKKyAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIjaWZkZWYgIiArIG5hbWUgKyAiXG4iKQorICAgICAgICAgICAgICAgIG91dHB1
dC5hcHBlbmQoIiNlcnJvciBuYW1lICIgKyBuYW1lICsgIiBpcyB1c2VkXG4iKQorICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoIiNlbmRpZlxuIikKKyAgICAgICAgICAgIHJldHVybiBqb2lu
KG91dHB1dCwgIiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIKIAorR2Vu
ZXJhdGVkTmFtZUNoZWNrZXIuYWRkX25hbWUoIkVudW0iKQogCiBjbWRsaW5lX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcigpCiAjIEZJWE1FOiBnZXQgcmlkIG9mIHRoaXMgb3B0aW9uIG9u
Y2UgdGhlIHN5c3RlbSBpcyBzdGFibGUuCkBAIC00NjAsOSArNTIxLDggQEAgSU5TUEVDVE9SX09C
SkVDVF9TRVRURVJfTkFNRVMgPSBmcm96ZW5zZXQoWyJzZXRWYWx1ZSIsICJzZXRCb29sZWFuIiwg
InNldE51bWJlciIKIAogCiBkZWYgZml4X3R5cGVfbmFtZShqc29uX25hbWUpOgotICAgIGlmIGpz
b25fbmFtZSBpbiBUWVBFX05BTUVfRklYX01BUDoKLSAgICAgICAgZml4ZWQgPSBUWVBFX05BTUVf
RklYX01BUFtqc29uX25hbWVdCi0KKyAgICBmaXhlZCA9IE5hbWVGaXhNYXAuZ2V0X2ZpeChqc29u
X25hbWUsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUuQ0FNRUxfQ0FTRSkKKyAgICBpZiBmaXhlZDoK
ICAgICAgICAgY2xhc3MgUmVzdWx0KG9iamVjdCk6CiAgICAgICAgICAgICBjbGFzc19uYW1lID0g
Zml4ZWQKIApAQCAtNTE5LDYgKzU3OSwyOCBAQCBjbGFzcyBXcml0ZXI6CiAgICAgICAgIHJldHVy
biBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQgKyBhZGRpdGlvbmFsX2luZGVudCkKIAog
CitjbGFzcyBFbnVtQ29uc3RhbnRzOgorICAgIG1hcF8gPSB7fQorICAgIGNvbnN0YW50c18gPSBb
XQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9jb25zdGFudChjbHMsIHZhbHVlKToK
KyAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86CisgICAgICAgICAgICByZXR1cm4gY2xzLm1h
cF9bdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3MgPSBsZW4oY2xzLm1hcF8p
CisgICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBwb3MKKyAgICAgICAgICAgIGNscy5jb25z
dGFudHNfLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBwb3MKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBnZXRfZW51bV9jb25zdGFudF9jb2RlKGNscyk6CisgICAgICAgIG91
dHB1dCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGNscy5jb25zdGFudHNfOgorICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0gKyAiXCIiKQorICAgICAgICByZXR1cm4g
am9pbihvdXRwdXQsICIsXG4iKSArICJcbiIKKworCiBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAg
QHN0YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29u
X3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0YSk6CkBAIC01MjYsNiArNjA4
LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgIGNsYXNzIEhlbHBlcjoKICAgICAg
ICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCisgICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4ID0g
IlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIKIAogICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAt
NTQ2LDYgKzYyOSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBkZWYgY3JlYXRlX2FkX2hv
Y190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNsYXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlz
X2FkX2hvYyA9IFRydWUKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiIgogCiAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6
CkBAIC01NzEsMjMgKzY1NSwyOSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfb3V0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyLmdldF9pbmRlbnRlZCgiLy8gIikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25fdHlwYWJsZVsiZW51bSJdCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX25hbWUgPSBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBl
X25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGVudW0gRW51bSB7XG4iKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVudW06CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2Nv
bnN0YW50KGVudW1faXRlbSkKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbV9jX25hbWUgPSBlbnVtX2l0ZW0ucmVwbGFjZSgnLScsICdfJykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjb25zdCBjaGFyKiBjb25zdCAi
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChDYXBp
dGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKGl0ZW1fY19uYW1lKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA9IFwiIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9pdGVtKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXCI7XG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifSAvLyBu
YW1lc3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19u
YW1lID0gQ2FwaXRhbGl6ZXIuY2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2Nv
cmVzKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4
ZWRfaXRlbV9jX25hbWUgPSBOYW1lRml4TWFwLmdldF9maXgoaXRlbV9jX25hbWUsIE5hbWVDYXBp
dGFsaXphdGlvblR5cGUuQUxMX0NBUFMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBmaXhlZF9pdGVtX2NfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGZpeGVkX2l0ZW1fY19uYW1lCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICAiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChpdGVtX2NfbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA9ICIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIlcyIg
JSBlbnVtX3BvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIixcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgfTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIlxuXG4iKQogCkBAIC01OTksNyArNjg5LDExIEBAIGNsYXNzIFR5cGVC
aW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFy
YW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXggKyBmaXhlZF90eXBl
X25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpIgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgpAQCAtNjMzLDYgKzcy
NywxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1
Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBl
cy5TdHJpbmcKIAorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChj
bHMsIG9wdGlvbmFsKToKICAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogcmV0dXJuIGEg
dHlwZWRlZiBuYW1lIGluc3RlYWQuCkBAIC03MTUsMjggKzgxMywzMiBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
YmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBh
ZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0
X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJh
bVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9j
X3R5cGVfdGV4dChGYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoIiIiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV9y
YXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBG
YWxzZSkuZ2V0X3RleHQoKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBpbiBNZXRo
b2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgi
IiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyksIHByb3BlcnR5XyVz
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3Rv
X3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3Bf
bmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2Jp
bmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
X2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlw
ZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZh
bHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVf
ZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRv
cigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5l
cmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVf
Z2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfY29k
ZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29k
ZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgogICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMsMTMgKzg3NSwxNSBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0
X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0
ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90
eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90
b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQ
VVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVl
KVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1
ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0
dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMu
Z2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUg
c2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5
cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQl
cyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0
ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5k
aW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs5MjksMTEgQEAgY2xhc3MgVHlwZUJp
bmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjoiICsgY29udGV4
dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+Igor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIgKyBoZWxwZXIuZnVs
bF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisKKyAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC04NDQsNiArOTUy
LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZF
TlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
X3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVk
dWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlw
ZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICsxMDA3LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFt
X3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQoKQogCiAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJhd190eXBlCiAKQEAgLTEwODQsNiArMTIwMCw3IEBAICRj
b2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICNpbmNsdWRlIDxQbGF0Zm9y
bVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKKyRjaGVja0RlZmluZXMK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwpA
QCAtMTA5OSw2ICsxMjE2LDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIG5hbWVz
cGFjZSBUeXBlQnVpbGRlciB7CiAke2ZvcndhcmRzfQorCitjb25zdCBTdHJpbmcmIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRlcnN9CiB9IC8vIG5hbWVzcGFj
ZSBUeXBlQnVpbGRlcgogCkBAIC0xNTQxLDYgKzE2NjEsMTcgQEAgJGNvbnN0cnVjdG9ySW5pdHsK
IAogJG1ldGhvZHMKIAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworY29uc3QgU3RyaW5nIGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50VmFsdWVzfTsKKworY29uc3Qg
U3RyaW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAg
LTE1NjgsNiArMTY5OSw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUs
IGFubm90YXRlZF90eXBlKToKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcmF3X3R5cGUKIAor
CisjIENob29zZXMgbWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4g
QSBwYXJ0aWN1bGFyIHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFzIG9uZSBtZXRob2Qgd2l0
aCBhIHNpbXBsZSBwYXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhvZCB3aXRoIGEgcmF3IHR5
cGUgbmFtZSBhbmQgY29tbWVudGVkIGFubm90YXRpb24gYWJvdXQgZXhwZWN0ZWQKKyMgc3BlY2lh
bGl6ZWQgdHlwZSBuYW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdoZW4gcmF3IGFuZCBzcGVj
aWFsaXplZAorIyBwYXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJlbnQgYmVoYXZpb3IuCitj
bGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRf
bW9kZXMoY2xzLCB0eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0eXBlX2JpbmRpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICMgSW4gcmF3IGFu
ZCBzdHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlmZmVyZW50LgorICAgICAg
ICAgICAgcmV0dXJuIFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xzLlJhd1BhcmFtZXRlck1v
ZGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEluIHJhdyBhbmQgc3RyaWN0IG1vZGVz
IG1ldGhvZCBjb2RlIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgIyBPbmx5IHB1dCBzdHJpY3Qg
cGFyYW1ldGVyIHR5cGUgaW4gY29tbWVudHMuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5Db21i
aW5lZE1vZGVdCisKKyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5n
KToKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZh
bHNlKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAg
ICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFyYW1ldGVyTW9kZToKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVf
YmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdf
dHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZh
bHNlKS5nZXRfdGV4dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNzIENvbWJpbmVkTW9kZToK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0
KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3Rl
eHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFy
YW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAorICAgICAgICAg
ICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihw
YXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFy
YW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAg
ICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2
YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
X3JlZgorCiBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMg
PSBbXQogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCkBAIC0xOTQwLDcgKzIx
MjQsOCBAQCBmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3Rp
dHV0ZShOb25lLAogICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJv
bnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKICAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1q
b2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSwKICAgICAgICAg
IHR5cGVCdWlsZGVycz1qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2Zy
YWdtZW50cyksICIiKSwKLSAgICAgICAgIGZvcndhcmRzPWpvaW4oR2VuZXJhdG9yLnR5cGVfYnVp
bGRlcl9mb3J3YXJkcywgIiIpKSkKKyAgICAgICAgIGZvcndhcmRzPWpvaW4oR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9mb3J3YXJkcywgIiIpLAorICAgICAgICAgY2hlY2tEZWZpbmVzPUdlbmVyYXRl
ZE5hbWVDaGVja2VyLmdlbmVyYXRlX2NoZWNrX2NvZGUoKSkpCiAKIGJhY2tlbmRfaF9maWxlLndy
aXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgIGNvbnN0cnVjdG9y
SW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiks
CkBAIC0xOTUyLDcgKzIxMzcsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFj
a2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1l
dGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBt
ZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBl
bnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkp
KQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0
dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNr
ZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120456</attachid>
            <date>2011-12-23 04:16:50 -0800</date>
            <delta_ts>2011-12-23 05:18:16 -0800</delta_ts>
            <desc>For win trybot</desc>
            <filename>bug-74954-20111223161648.patch</filename>
            <type>text/plain</type>
            <size>21203</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi5iMTUzNTZhNmQxNjU5Mzhh
ODAzM2UzZTkzNWM4ZWQ0MDNjZGQyY2ZlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNDgsMTEgKzQ4LDczIEBAIERPTUFJ
Tl9ERUZJTkVfTkFNRV9NQVAgPSB7CiB9CiAKIAotIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5
cGUgbmFtZSByZXBsYWNlbWVudHMuCi1UWVBFX05BTUVfRklYX01BUCA9IHsKLSAgICAiUkdCQSI6
ICJSZ2JhIiwgICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVm
aW5lIG5hbWUgaW4gV2luZG93cyBDRS4KLX0KK2NsYXNzIE5hbWVDYXBpdGFsaXphdGlvblR5cGU6
CisgICAgQ0FNRUxfQ0FTRSA9ICJjYW1lbF9jYXNlIgorICAgIEFMTF9DQVBTID0gImFsbF9jYXBz
IgorCisKK2NsYXNzIE5hbWVGaXhNYXA6CisgICAgIyBmdW5jdGlvbiwgbm90IGEgbWV0aG9kCisg
ICAgZGVmIGNyZWF0ZV9tYXBfKCk6CisgICAgICAgIG1hcCA9IHt9CisKKyAgICAgICAgZGVmIGlu
aXRfZml4KG5hbWUsIGZpeCwgY2FwaXRhbGl6YXRpb24pOgorICAgICAgICAgICAgaWYgbmFtZSBp
biBtYXA6CisgICAgICAgICAgICAgICAgc3VibWFwID0gbWFwW25hbWVdCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHN1Ym1hcCA9IHt9CisgICAgICAgICAgICAgICAgbWFwW25h
bWVdID0gc3VibWFwCisgICAgICAgICAgICBzdWJtYXBbY2FwaXRhbGl6YXRpb25dID0gZml4CisK
KyAgICAgICAgIyBNYW51YWxseS1maWxsZWQgbGlzdCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRz
LgorICAgICAgICBpbml0X2ZpeCgiUkdCQSIsICJSZ2JhIiwgTmFtZUNhcGl0YWxpemF0aW9uVHlw
ZS5DQU1FTF9DQVNFKSAgIyBSR0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGgg
YSBkZWZpbmUgbmFtZSBpbiBXaW5kb3dzIENFLgorICAgICAgICBpbml0X2ZpeCgiTlVMTCIsICJO
dWxsIiwgTmFtZUNhcGl0YWxpemF0aW9uVHlwZS5BTExfQ0FQUykKKyAgICAgICAgaW5pdF9maXgo
IkFTU0VSVCIsICJBU1NFUlRfVEIiLCBOYW1lQ2FwaXRhbGl6YXRpb25UeXBlLkFMTF9DQVBTKQor
ICAgICAgICBpbml0X2ZpeCgiTE9HIiwgIkxPR19UQiIsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUu
QUxMX0NBUFMpCisgICAgICAgIGluaXRfZml4KCJFUlJPUiIsICJFUlJPUl9UQiIsIE5hbWVDYXBp
dGFsaXphdGlvblR5cGUuQUxMX0NBUFMpCisgICAgICAgIGluaXRfZml4KCIiLCAiRU1QVFlfTkFN
RSIsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUuQUxMX0NBUFMpCisgICAgICAgIHJldHVybiBtYXAK
KworICAgIG1hcF8gPSBjcmVhdGVfbWFwXygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
Z2V0X2ZpeChjbHMsIG5hbWUsIGNhcGl0YWxpemF0aW9uKToKKyAgICAgICAgaWYgbmFtZSBub3Qg
aW4gY2xzLm1hcF86CisgICAgICAgICAgICBHZW5lcmF0ZWROYW1lQ2hlY2tlci5hZGRfbmFtZShu
YW1lKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc3VibWFwID0gY2xzLm1hcF9b
bmFtZV0KKyAgICAgICAgaWYgY2FwaXRhbGl6YXRpb24gbm90IGluIHN1Ym1hcDoKKyAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiRG9uJ3QgaGF2ZSBjYXBpdGFsaXphdGlvbiAnJXMnIGZvciBu
YW1lICclcyciICUgKGNhcGl0YWxpemF0aW9uLCBuYW1lKSkKKyAgICAgICAgcmVzdWx0ID0gc3Vi
bWFwW2NhcGl0YWxpemF0aW9uXQorICAgICAgICBHZW5lcmF0ZWROYW1lQ2hlY2tlci5hZGRfbmFt
ZShyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisjIFRoaXMgY2xhc3MgY29sbGVj
dHMgYWxsIGdlbmVyYXRlZCBuYW1lcyB0aGF0IGNvdWxkIHRoZW9yZXRpY2FsbHkgY29uZmxpY3Qg
d2l0aCBwcmVwcm9jZXNzb3IgZGVmaW5lcy4KKyMgSXQgY2FuIG9wdGlvbmFsbHkgZ2VuZXJhdGUg
cHJlcHJvY2Vzc29yIGNoZWNrcyBhZ2FpbnN0IHN1Y2ggY29uZmxpY3RzLgorY2xhc3MgR2VuZXJh
dGVkTmFtZUNoZWNrZXI6CisgICAgIyBEZWZpbmVzIHdoZXRoZXIgd2Ugd2FudCBjaGVjayBjb2Rl
IGdlbmVyYXRlZC4gQ2hhbmdlIGl0IG1hbnVhbGx5LgorICAgIEdFTkVSQVRFX0NIRUNLSU5HX0NP
REUgPSBGYWxzZQorCisgICAgbmFtZV9zZXRfID0gc2V0KCkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBhZGRfbmFtZShjbHMsIG5hbWUpOgorICAgICAgICBjbHMubmFtZV9zZXRfLmFkZChu
YW1lKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdlbmVyYXRlX2NoZWNrX2NvZGUoY2xz
KToKKyAgICAgICAgaWYgY2xzLkdFTkVSQVRFX0NIRUNLSU5HX0NPREU6CisgICAgICAgICAgICBv
dXRwdXQgPSBbXQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gY2xzLm5hbWVfc2V0XzoKKyAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIjaWZkZWYgIiArIG5hbWUgKyAiXG4iKQorICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNlcnJvciBuYW1lICIgKyBuYW1lICsgIiBpcyB1c2Vk
XG4iKQorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNlbmRpZlxuIikKKyAgICAgICAg
ICAgIHJldHVybiBqb2luKG91dHB1dCwgIiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gIiIKIAorR2VuZXJhdGVkTmFtZUNoZWNrZXIuYWRkX25hbWUoIkVudW0iKQogCiBjbWRs
aW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCiAjIEZJWE1FOiBnZXQgcmlkIG9m
IHRoaXMgb3B0aW9uIG9uY2UgdGhlIHN5c3RlbSBpcyBzdGFibGUuCkBAIC00NjAsOSArNTIyLDgg
QEAgSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVMgPSBmcm96ZW5zZXQoWyJzZXRWYWx1ZSIs
ICJzZXRCb29sZWFuIiwgInNldE51bWJlciIKIAogCiBkZWYgZml4X3R5cGVfbmFtZShqc29uX25h
bWUpOgotICAgIGlmIGpzb25fbmFtZSBpbiBUWVBFX05BTUVfRklYX01BUDoKLSAgICAgICAgZml4
ZWQgPSBUWVBFX05BTUVfRklYX01BUFtqc29uX25hbWVdCi0KKyAgICBmaXhlZCA9IE5hbWVGaXhN
YXAuZ2V0X2ZpeChqc29uX25hbWUsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUuQ0FNRUxfQ0FTRSkK
KyAgICBpZiBmaXhlZDoKICAgICAgICAgY2xhc3MgUmVzdWx0KG9iamVjdCk6CiAgICAgICAgICAg
ICBjbGFzc19uYW1lID0gZml4ZWQKIApAQCAtNTE5LDYgKzU4MCwyOCBAQCBjbGFzcyBXcml0ZXI6
CiAgICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQgKyBhZGRpdGlv
bmFsX2luZGVudCkKIAogCitjbGFzcyBFbnVtQ29uc3RhbnRzOgorICAgIG1hcF8gPSB7fQorICAg
IGNvbnN0YW50c18gPSBbXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZF9jb25zdGFu
dChjbHMsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86CisgICAgICAgICAg
ICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3Mg
PSBsZW4oY2xzLm1hcF8pCisgICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBwb3MKKyAgICAg
ICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBw
b3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZW51bV9jb25zdGFudF9jb2RlKGNs
cyk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGNscy5jb25zdGFu
dHNfOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0gKyAiXCIiKQor
ICAgICAgICByZXR1cm4gam9pbihvdXRwdXQsICIsXG4iKSArICJcbiIKKworCiBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlwZV9k
ZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0YSk6
CkBAIC01MjYsNiArNjA5LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgIGNsYXNz
IEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCisgICAgICAgICAgICBmdWxs
X25hbWVfcHJlZml4ID0gIlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6
OiIKIAogICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVmIHdyaXRlX2Rv
Yyh3cml0ZXIpOgpAQCAtNTQ2LDYgKzYzMCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBk
ZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9k
b21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNsYXNzIEhlbHBlcjoK
ICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVm
aXggPSAiIgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBkZWYgd3Jp
dGVfZG9jKHdyaXRlcik6CkBAIC01NzEsMjMgKzY1NiwyOSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfb3V0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyLmdldF9pbmRlbnRl
ZCgiLy8gIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25fdHlw
YWJsZVsiZW51bSJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0
ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX25hbWUg
PSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1Y3QgIikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGVudW0gRW51bSB7
XG4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVu
dW06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1D
b25zdGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKKwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBlbnVtX2l0ZW0ucmVwbGFjZSgnLScsICdfJykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjb25z
dCBjaGFyKiBjb25zdCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZChDYXBpdGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKGl0ZW1fY19u
YW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
IiA9IFwiIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoZW51bV9pdGVtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiXCI7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgifSAvLyBuYW1lc3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW1fY19uYW1lID0gQ2FwaXRhbGl6ZXIuY2FtZWxfY2FzZV90b19jYXBpdGFsaXpl
ZF93aXRoX3VuZGVyc2NvcmVzKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZml4ZWRfaXRlbV9jX25hbWUgPSBOYW1lRml4TWFwLmdldF9maXgoaXRlbV9j
X25hbWUsIE5hbWVDYXBpdGFsaXphdGlvblR5cGUuQUxMX0NBUFMpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBmaXhlZF9pdGVtX2NfbmFtZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGZpeGVkX2l0ZW1fY19uYW1l
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZChpdGVtX2NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5hcHBlbmQoIiA9ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKCIlcyIgJSBlbnVtX3BvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoIixcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfTtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuXG4iKQogCkBAIC01OTksNyArNjkwLDEx
IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlv
bmFsKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190
eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4
dCgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVm
aXggKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCisKKyAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMpIgogCiAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgp
OgpAQCAtNjMzLDYgKzcyOCwxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAg
ICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAorICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25f
cGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9p
bl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKICAgICAgICAgICAgICAgICAgICAgICAgICNG
SVhNRTogcmV0dXJuIGEgdHlwZWRlZiBuYW1lIGluc3RlYWQuCkBAIC03MTUsMjggKzgxNCwzMiBA
QCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0
X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNl
X3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90
YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fcmF3X3R5cGUuZ2V0X2Nf
cGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoIiIiCisjICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5
cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JV
SUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKKyMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChG
YWxzZSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90
eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRp
bmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lX211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMg
dmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAl
cyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQl
cygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dl
cl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRl
cl9uYW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4
dChwYXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJf
bmFtZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5
cGVfYmluZGluZywgInZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQog
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVf
YmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIp
Ci0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGls
aW5lKCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03
NzMsMTMgKzg3NiwxNSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlw
ZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2Fw
aXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAg
dm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9i
aW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZ
UEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3Rl
eHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0
JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3
X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhv
ZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxu
ICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0
LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdf
dHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIp
CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0g
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs5MzAsMTEg
QEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhv
ZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9u
YWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xh
c3NfbmFtZSArICI+IgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRy
PCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
ICsgIj4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6
CkBAIC04NDQsNiArOTUzLDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlw
ZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICsxMDA4LDEwIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQo
KQogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICBkZWYgcmVkdWNlX3Rv
X3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJhd190eXBlCiAKQEAgLTEwODQs
NiArMTIwMSw3IEBAICRjb2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICNp
bmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
KyRjaGVja0RlZmluZXMKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwpAQCAtMTA5OSw2ICsxMjE3LDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAke2ZvcndhcmRzfQorCitjb25zdCBT
dHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRlcnN9
CiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCkBAIC0xNTQxLDYgKzE2NjIsMTcgQEAgJGNv
bnN0cnVjdG9ySW5pdHsKIAogJG1ldGhvZHMKIAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKwor
Y29uc3QgU3RyaW5nIGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50VmFs
dWVzfTsKKworY29uc3QgU3RyaW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTcwMCw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90eXBl
X3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToKICAgICBlbHNlOgogICAgICAgICByZXR1
cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMgbWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBhIHBh
cnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFyIHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFz
IG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBwYXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhv
ZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQgY29tbWVudGVkIGFubm90YXRpb24gYWJvdXQgZXhw
ZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBuYW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdo
ZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBwYXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJl
bnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0eXBl
X2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAg
ICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlm
ZmVyZW50LgorICAgICAgICAgICAgcmV0dXJuIFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xz
LlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEluIHJhdyBh
bmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgIyBP
bmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5cGUgaW4gY29tbWVudHMuCisgICAgICAgICAgICBy
ZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisKKyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2Rl
OgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3Rl
eHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3Jl
Zik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFyYW1l
dGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1f
dHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5n
LnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJ
TERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGlu
ZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNz
IENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2Nf
cGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0X2Fu
bm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9j
X3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4
dCgpLAorICAgICAgICAgICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFs
c2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAg
ICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRfY2xh
c3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtd
CkBAIC0xOTQwLDcgKzIxMjUsOCBAQCBmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZy
b250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKICAgICAgICAgIGRv
bWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMs
ICIiKSwKICAgICAgICAgIHR5cGVCdWlsZGVycz1qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3Iu
dHlwZV9idWlsZGVyX2ZyYWdtZW50cyksICIiKSwKLSAgICAgICAgIGZvcndhcmRzPWpvaW4oR2Vu
ZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgIiIpKSkKKyAgICAgICAgIGZvcndhcmRzPWpv
aW4oR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgIiIpLAorICAgICAgICAgY2hlY2tE
ZWZpbmVzPUdlbmVyYXRlZE5hbWVDaGVja2VyLmdlbmVyYXRlX2NoZWNrX2NvZGUoKSkpCiAKIGJh
Y2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAog
ICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdCwgIlxuIiksCkBAIC0xOTUyLDcgKzIxMzgsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0
ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2Zp
bGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29u
c3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlz
dCwgIiIpLAotICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3Qs
ICJcbiIpKSkKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0
LCAiXG4iKSwKKyAgICBlbnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9j
b25zdGFudF9jb2RlKCkpKQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNr
ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2lu
KEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120460</attachid>
            <date>2011-12-23 05:18:50 -0800</date>
            <delta_ts>2011-12-23 05:58:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111223171848.patch</filename>
            <type>text/plain</type>
            <size>17198</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi44ZjBmZmM1NDQ5ZDg5ZmUx
YjcxMzdkMDc2MDZjZmE2MDUwZmMwZDc2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTE5LDYgKzUxOSwyOCBAQCBjbGFz
cyBXcml0ZXI6CiAgICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQg
KyBhZGRpdGlvbmFsX2luZGVudCkKIAogCitjbGFzcyBFbnVtQ29uc3RhbnRzOgorICAgIG1hcF8g
PSB7fQorICAgIGNvbnN0YW50c18gPSBbXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFk
ZF9jb25zdGFudChjbHMsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86Cisg
ICAgICAgICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBwb3MgPSBsZW4oY2xzLm1hcF8pCisgICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBw
b3MKKyAgICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBwb3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZW51bV9jb25zdGFu
dF9jb2RlKGNscyk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGNs
cy5jb25zdGFudHNfOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0g
KyAiXCIiKQorICAgICAgICByZXR1cm4gam9pbihvdXRwdXQsICIsXG4iKSArICJcbiIKKworCiBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFt
ZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5
cGVfZGF0YSk6CkBAIC01MjYsNiArNTQ4LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAg
ICAgIGNsYXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCisgICAgICAg
ICAgICBmdWxsX25hbWVfcHJlZml4ID0gIlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5f
bmFtZSArICI6OiIKIAogICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVm
IHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTQ2LDYgKzU2OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICBkZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwg
Y29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNsYXNz
IEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKKyAgICAgICAgICAgIGZ1bGxf
bmFtZV9wcmVmaXggPSAiIgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAg
ICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzEsMjMgKzU5NSwyNyBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9s
aXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfb3V0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyLmdl
dF9pbmRlbnRlZCgiLy8gIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9
IGpzb25fdHlwYWJsZVsiZW51bSJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnVtX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJlbnVtICIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1l
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lX3ByZWZpeCA9IENhcGl0
YWxpemVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhlbnVtX25h
bWUpICsgIl8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0g
aW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fcG9zID0g
RW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5yZXBsYWNlKCctJywg
J18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
ImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoaXRl
bV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBpdGVtX25hbWVfcHJlZml4ICsgQ2FwaXRhbGl6ZXIu
Y2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKGl0ZW1fY19uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQ
RV9OQU1FX0ZJWF9NQVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbV9jX25hbWUgPSBUWVBFX05BTUVfRklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRlbV9jX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSAiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMiICUg
ZW51bV9wb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCIsXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgifTsgLy8gZW51bSAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiXG5cbiIpCiAKQEAgLTU5OSw3ICs2MjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdz
OgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBl
KFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5j
bGFzc19uYW1lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMpIgog
CiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgpAQCAtNjMzLDYgKzY2NSwxMCBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAorICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKICAg
ICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogcmV0dXJuIGEgdHlwZWRlZiBuYW1lIGluc3Rl
YWQuCkBAIC03MTUsMjggKzc1MSwzMiBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVf
cGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSBw
YXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3Rl
eHQocGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVS
X09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0
aWxpbmUoIiIiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVk
X3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19wYXJh
bV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwK
KyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5k
aW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdl
dF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRl
cjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4o
KTsKICAgICAgICAgfQogIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
IChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNb
cG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9p
dGVtc1twb3NdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChz
dGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
b3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwg
cHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9y
ID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVy
X3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3MgKz0gMQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
X2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0
ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8
JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMsMTMgKzgxMywxNSBAQCBjbGFzcyBUeXBlQmluZGlu
Z3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmlu
ZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9o
b2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBl
cihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRl
ZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9j
X3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
YmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90
eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5
cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsi
bmFtZSJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgfVxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5
cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZh
bHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBl
X2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlw
ZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJu
YW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRp
bmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVy
YXRvcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVy
YXRvcjoKQEAgLTgyNSw3ICs4NjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2lu
X2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6
OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+IgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAK
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC04NDQsNiArODkwLDEwIEBAIGNsYXNzIFR5cGVC
aW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jh
d190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRf
dGV4dCgpCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5
NSw2ICs5NDUsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIHJldHVy
biBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZF
TlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICByZXR1
cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsxMTUzLDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAke2ZvcndhcmRzfQorCitjb25zdCBT
dHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRlcnN9
CiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCkBAIC0xNTQxLDYgKzE1OTgsMTcgQEAgJGNv
bnN0cnVjdG9ySW5pdHsKIAogJG1ldGhvZHMKIAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKwor
Y29uc3QgU3RyaW5nIGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50VmFs
dWVzfTsKKworY29uc3QgU3RyaW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTYzNiw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90eXBl
X3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToKICAgICBlbHNlOgogICAgICAgICByZXR1
cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMgbWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBhIHBh
cnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFyIHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFz
IG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBwYXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhv
ZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQgY29tbWVudGVkIGFubm90YXRpb24gYWJvdXQgZXhw
ZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBuYW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdo
ZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBwYXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJl
bnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0eXBl
X2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAg
ICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlm
ZmVyZW50LgorICAgICAgICAgICAgcmV0dXJuIFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xz
LlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEluIHJhdyBh
bmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgIyBP
bmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5cGUgaW4gY29tbWVudHMuCisgICAgICAgICAgICBy
ZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisKKyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2Rl
OgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3Rl
eHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0X2lu
X2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3Jl
Zik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFyYW1l
dGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1f
dHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5n
LnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJ
TERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGlu
ZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNz
IENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2Nf
cGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0X2Fu
bm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9j
X3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4
dCgpLAorICAgICAgICAgICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFs
c2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAg
ICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRfY2xh
c3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtd
CkBAIC0xOTUyLDcgKzIwNzMsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFj
a2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1l
dGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBt
ZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBl
bnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkp
KQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0
dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNr
ZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120461</attachid>
            <date>2011-12-23 05:20:11 -0800</date>
            <delta_ts>2011-12-27 10:26:43 -0800</delta_ts>
            <desc>Sample InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>143572</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKCmNvbnN0IFN0cmluZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOwoKbmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5h
bWUuICovCmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX05BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIENPVU5UX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOT0RFX05BTUVfU0VUIHwgQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBzZXROb2RlTmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09VTlRfU0VUPiYgc2V0Q291bnQoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPVU5UX1NFVCks
IHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09VTlRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3VudD4g
cmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4p
CiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKSk7CiAgICB9Cn07CgpjbGFzcyBET01H
cm91cCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMCwKICAgICAgICBU
SVRMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgTk9ERV9DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoU0laRV9TRVQgfCBUSVRMRV9TRVQgfCBOT0RFX0NPVU5UX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIERPTUdyb3VwOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9T
RVQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRJVExFX1NFVD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VUKSwgcHJvcGVy
dHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRMRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9DT1VOVF9TRVQ+JiBzZXRO
b2RlQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9DT1VOVF9TRVQpLCBwcm9wZXJ0
eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
Im5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0NP
VU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERPTUdyb3VwPiBy
ZXN1bHQgPSBET01Hcm91cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IERPTUdyb3VwKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSSSIsIHZhbHVlKTsKICAgIH0K
fTsKCn0gLy8gTWVtb3J5CgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFJlc291cmNlIHR5cGUgYXMgaXQg
d2FzIHBlcmNlaXZlZCBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gKi8KZW51bSBSZXNvdXJjZVR5
cGUgewogICAgUkVTT1VSQ0VfVFlQRV9ET0NVTUVOVCA9IDAsCiAgICBSRVNPVVJDRV9UWVBFX1NU
WUxFU0hFRVQgPSAxLAogICAgUkVTT1VSQ0VfVFlQRV9JTUFHRSA9IDIsCiAgICBSRVNPVVJDRV9U
WVBFX0ZPTlQgPSAzLAogICAgUkVTT1VSQ0VfVFlQRV9TQ1JJUFQgPSA0LAogICAgUkVTT1VSQ0Vf
VFlQRV9YSFIgPSA1LAogICAgUkVTT1VSQ0VfVFlQRV9XRUJfU09DS0VUID0gNiwKICAgIFJFU09V
UkNFX1RZUEVfT1RIRVIgPSA3LAp9OyAvLyBlbnVtIFJlc291cmNlVHlwZQoKLyogSW5mb3JtYXRp
b24gYWJvdXQgdGhlIEZyYW1lIG9uIHRoZSBwYWdlLiAqLwpjbGFzcyBGcmFtZSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKICAgICAgICBJRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgTE9BREVSX0lEX1NFVCA9IDEg
PDwgMSwKICAgICAgICBVUkxfU0VUID0gMSA8PCAyLAogICAgICAgIE1JTUVfVFlQRV9TRVQgPSAx
IDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgTE9BREVSX0lEX1NFVCB8
IFVSTF9TRVQgfCBNSU1FX1RZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5X2lk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IExPQURFUl9JRF9TRVQ+JiBzZXRMb2FkZXJJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIExPQURFUl9JRF9TRVQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPExPQURFUl9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9w
ZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1
cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVfU0VUPiYgc2V0TWltZVR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVfU0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxGcmFt
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8RnJhbWU+IHJlc3VsdCA9IEZyYW1lOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRJZCguLi4pCiAgICAgKiAgICAgLnNldExvYWRlcklkKC4uLikKICAgICAqICAgICAuc2V0VXJs
KC4uLikKICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRnJhbWUoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0UGFyZW50SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoInBhcmVudElkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygibmFtZSIsIHZhbHVl
KTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxv
bmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiAqLwpjbGFzcyBGcmFtZVJlc291cmNlVHJl
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRy
ZWUuCiAgICAvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5LgogICAgY2xhc3MgUmVzb3VyY2Vz
SXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgcHVibGljOgogICAgICAgIGVudW0g
ewogICAgICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICAgICAgVVJMX1NFVCA9IDEg
PDwgMCwKICAgICAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgICAgIE1JTUVfVFlQ
RV9TRVQgPSAxIDw8IDIsCiAgICAgICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBU
WVBFX1NFVCB8IE1JTUVfVFlQRV9TRVQpCiAgICAgICAgfTsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgICAgIGNsYXNzIEJ1aWxkZXIgewogICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcHRyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlc0l0ZW07CiAgICAgICAg
cHVibGljOgogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJs
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICAgICAgfQogICAg
CiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxk
ZXI6OlBhZ2U6OlJlc291cmNlVHlwZSB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHBy
b3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQ
RV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TUlNRV9UWVBFX1NFVD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVf
U0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAgIAogICAgICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2VzSXRlbT4mICgpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8UmVzb3VyY2VzSXRlbT4qPigmbV9yZXN1bHQpOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+ICgpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4oKnRoaXMpOwog
ICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLyoKICAgICAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgICAgICogUmVmUHRyPFJlc291cmNlc0l0ZW0+IHJlc3VsdCA9IFJl
c291cmNlc0l0ZW06OmNyZWF0ZSgpCiAgICAgICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICAg
ICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwog
ICAgICAgICAqLwogICAgICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgUmVzb3VyY2VzSXRlbSgpKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFNRV9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgUkVTT1VSQ0VTX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChG
UkFNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWVSZXNvdXJjZVRyZWU7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9TRVQ+JiBzZXRGcmFtZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBGUkFNRV9TRVQpLCBwcm9wZXJ0eV9mcmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImZyYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEZSQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVSZXNv
dXJjZVRyZWU+IHJlc3VsdCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRGcmFtZSguLi4pCiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAg
ICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBGcmFtZVJlc291cmNlVHJl
ZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZEZyYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRGcmFtZXMi
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTZWFyY2ggbWF0Y2ggZm9yIHJlc291cmNlLiAqLwpjbGFz
cyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBMSU5FX05VTUJFUl9TRVQgPSAx
IDw8IDAsCiAgICAgICAgTElORV9DT05URU5UX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChMSU5FX05VTUJFUl9TRVQgfCBMSU5FX0NPTlRFTlRfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VhcmNoTWF0
Y2g+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5P
X0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VhcmNo
TWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMSU5FX05VTUJFUl9T
RVQ+JiBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX05VTUJFUl9TRVQpLCBwcm9wZXJ0eV9saW5lTnVt
YmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51
bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSU5FX05VTUJFUl9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9DT05URU5UX1NF
VD4mIHNldExpbmVDb250ZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9DT05URU5UX1NFVCksIHByb3BlcnR5
X2xpbmVDb250ZW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibGluZUNvbnRlbnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElO
RV9DT05URU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWFy
Y2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoTWF0Y2g+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoTWF0Y2g+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaE1hdGNoPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hNYXRjaDo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldExpbmVDb250ZW50KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlYXJj
aE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291cmNlLiAqLwpj
bGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwg
MCwKICAgICAgICBGUkFNRV9JRF9TRVQgPSAxIDw8IDEsCiAgICAgICAgTUFUQ0hFU19DT1VOVF9T
RVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IEZSQU1FX0lE
X1NFVCB8IE1BVENIRVNfQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlYXJjaFJlc3VsdDsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxf
U0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVfSURfU0VUPiYg
c2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2ZyYW1lSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQVRDSEVTX0NPVU5UX1NFVD4mIHNldE1hdGNo
ZXNDb3VudChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTUFUQ0hFU19DT1VOVF9TRVQpLCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hFU19DT1VOVF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VhcmNoUmVzdWx0PiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxTZWFyY2hSZXN1bHQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hSZXN1bHQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2Vh
cmNoUmVzdWx0PiByZXN1bHQgPSBTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFVybCguLi4pCiAgICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRNYXRj
aGVzQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgU2VhcmNoUmVzdWx0KCkpKTsKICAgIH0KfTsKCi8qIENvb2tpZSBvYmplY3QgKi8K
Y2xhc3MgQ29va2llIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAog
ICAgICAgIFZBTFVFX1NFVCA9IDEgPDwgMSwKICAgICAgICBET01BSU5fU0VUID0gMSA8PCAyLAog
ICAgICAgIFBBVEhfU0VUID0gMSA8PCAzLAogICAgICAgIEVYUElSRVNfU0VUID0gMSA8PCA0LAog
ICAgICAgIFNJWkVfU0VUID0gMSA8PCA1LAogICAgICAgIEhUVFBfT05MWV9TRVQgPSAxIDw8IDYs
CiAgICAgICAgU0VDVVJFX1NFVCA9IDEgPDwgNywKICAgICAgICBTRVNTSU9OX1NFVCA9IDEgPDwg
OCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NFVCB8IERPTUFJ
Tl9TRVQgfCBQQVRIX1NFVCB8IEVYUElSRVNfU0VUIHwgU0laRV9TRVQgfCBIVFRQX09OTFlfU0VU
IHwgU0VDVVJFX1NFVCB8IFNFU1NJT05fU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29va2llPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENvb2tpZTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwg
cHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVkFMVUVfU0VUPiYgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBET01BSU5fU0VUPiYgc2V0RG9tYWluKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRE9NQUlOX1NFVCks
IHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxET01B
SU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBBVEhfU0VUPiYg
c2V0UGF0aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFBBVEhfU0VUKSwgcHJvcGVydHlfcGF0aF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UEFUSF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRVhQSVJFU19TRVQ+JiBzZXRFeHBpcmVzKGludCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFWFBJUkVTX1NFVCksIHByb3Bl
cnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVYUElSRVNf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNJWkVfU0VUPiYgc2V0
U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU0laRV9TRVQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBI
VFRQX09OTFlfU0VUPiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIVFRQX09OTFlfU0VUKSwgcHJvcGVydHlfaHR0
cE9ubHlfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaHR0
cE9ubHkiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SFRUUF9PTkxZX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRUNVUkVfU0VUPiYgc2V0
U2VjdXJlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU0VDVVJFX1NFVCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U0VDVVJFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTRVNTSU9OX1NFVD4mIHNldFNlc3Npb24oYm9vbCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRVNTSU9OX1NFVCksIHByb3Bl
cnR5X3Nlc3Npb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVh
bigic2Vzc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTRVNTSU9O
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDb29raWU+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENvb2tpZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3VsdCA9IENvb2tp
ZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVl
KC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0UGF0aCguLi4p
CiAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAg
ICAqICAgICAuc2V0SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUoLi4uKQogICAg
ICogICAgIC5zZXRTZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IENvb2tpZSgpKSk7CiAgICB9Cn07CgovKiBVbmlxdWUgc2NyaXB0
IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFNjcmlwdElkZW50aWZpZXI7Cgp9IC8vIFBh
Z2UKCm5hbWVzcGFjZSBSdW50aW1lIHsKLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwp0
eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKCi8qIE1pcnJvciBvYmplY3QgcmVmZXJlbmNp
bmcgb3JpZ2luYWwgSmF2YVNjcmlwdCBvYmplY3QuICovCmNsYXNzIFJlbW90ZU9iamVjdCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KICAgIGVudW0gVHlw
ZSB7CiAgICAgICAgVFlQRV9PQkpFQ1QgPSA4LAogICAgICAgIFRZUEVfRlVOQ1RJT04gPSA5LAog
ICAgICAgIFRZUEVfVU5ERUZJTkVEID0gMTAsCiAgICAgICAgVFlQRV9TVFJJTkcgPSAxMSwKICAg
ICAgICBUWVBFX05VTUJFUiA9IDEyLAogICAgICAgIFRZUEVfQk9PTEVBTiA9IDEzLAogICAgfTsg
Ly8gZW51bSBUeXBlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3VidHlwZScg
d2hpbGUgZ2VuZXJhdGluZyBSZW1vdGVPYmplY3QuCiAgICBlbnVtIFN1YnR5cGUgewogICAgICAg
IFNVQlRZUEVfQVJSQVkgPSAxNCwKICAgICAgICBTVUJUWVBFX05VTEwgPSAxNSwKICAgICAgICBT
VUJUWVBFX05PREUgPSAxNiwKICAgICAgICBTVUJUWVBFX1JFR0VYUCA9IDE3LAogICAgICAgIFNV
QlRZUEVfREFURSA9IDE4LAogICAgfTsgLy8gZW51bSBTdWJ0eXBlCgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90
eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFJlbW90ZU9iamVjdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFJlbW90ZU9iamVjdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+
IHJlc3VsdCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZW1v
dGVPYmplY3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShTdWJ0eXBlIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIGdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJjbGFzc05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JP
YmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldE9iamVjdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IE9iamVjdCBwcm9wZXJ0eSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3Ig
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgV1JJVEFC
TEVfU0VUID0gMSA8PCAxLAogICAgICAgIENPTkZJR1VSQUJMRV9TRVQgPSAxIDw8IDIsCiAgICAg
ICAgRU5VTUVSQUJMRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFN
RV9TRVQgfCBXUklUQUJMRV9TRVQgfCBDT05GSUdVUkFCTEVfU0VUIHwgRU5VTUVSQUJMRV9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9w
ZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBXUklUQUJMRV9TRVQ+JiBzZXRXcml0
YWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFdSSVRBQkxFX1NFVCksIHByb3BlcnR5X3dyaXRhYmxlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oIndyaXRhYmxlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFdSSVRBQkxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDT05GSUdVUkFCTEVfU0VUPiYgc2V0Q29uZmlndXJhYmxlKGJvb2wg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09O
RklHVVJBQkxFX1NFVCksIHByb3BlcnR5X2NvbmZpZ3VyYWJsZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25maWd1cmFibGUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09ORklHVVJBQkxFX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFTlVNRVJBQkxFX1NFVD4mIHNldEVudW1lcmFibGUoYm9v
bCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBF
TlVNRVJBQkxFX1NFVCksIHByb3BlcnR5X2VudW1lcmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiZW51bWVyYWJsZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFTlVNRVJBQkxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBy
b3BlcnR5RGVzY3JpcHRvcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxQ
cm9wZXJ0eURlc2NyaXB0b3I+IHJlc3VsdCA9IFByb3BlcnR5RGVzY3JpcHRvcjo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFdyaXRhYmxlKC4uLikKICAg
ICAqICAgICAuc2V0Q29uZmlndXJhYmxlKC4uLikKICAgICAqICAgICAuc2V0RW51bWVyYWJsZSgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBQ
cm9wZXJ0eURlc2NyaXB0b3IoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgidmFsdWUi
LCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAg
ICB2b2lkIHNldEdldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZXQoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgi
c2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0V2FzVGhyb3duKGJvb2wgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigid2FzVGhyb3duIiwgdmFsdWUpOwogICAgfQp9
OwoKLyogUmVwcmVzZW50cyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50LiBFaXRoZXIgcmVtb3RlIG9i
amVjdCBpZCA8Y29kZT5vYmplY3RJZDwvY29kZT4gb3IgcHJpbWl0aXZlIDxjb2RlPnZhbHVlPC9j
b2RlPiBvciBuZWl0aGVyIG9mIChmb3IgdW5kZWZpbmVkKSB0aGVtIHNob3VsZCBiZSBzcGVjaWZp
ZWQuICovCmNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPENhbGxBcmd1bWVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBDYWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxDYWxsQXJndW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxBcmd1bWVudD4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxs
QXJndW1lbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxBcmd1
bWVudD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsQXJndW1lbnQ+IHJlc3VsdCA9IENhbGxBcmd1
bWVudDo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRv
cHRSZWYobmV3IENhbGxBcmd1bWVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1
ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZh
bHVlOwoKCiAgICB2b2lkIHNldE9iamVjdElkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFsdWUpOwogICAgfQp9
OwoKfSAvLyBSdW50aW1lCgpuYW1lc3BhY2UgQ29uc29sZSB7Ci8qIENvbnNvbGUgbWVzc2FnZS4g
Ki8KY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0
aW5nIENvbnNvbGVNZXNzYWdlLgogICAgZW51bSBTb3VyY2UgewogICAgICAgIFNPVVJDRV9IVE1M
ID0gMTksCiAgICAgICAgU09VUkNFX1dNTCA9IDIwLAogICAgICAgIFNPVVJDRV9YTUwgPSAyMSwK
ICAgICAgICBTT1VSQ0VfSkFWQVNDUklQVCA9IDIyLAogICAgICAgIFNPVVJDRV9ORVRXT1JLID0g
MjMsCiAgICAgICAgU09VUkNFX0NPTlNPTEVfQVBJID0gMjQsCiAgICAgICAgU09VUkNFX09USEVS
ID0gMjUsCiAgICB9OyAvLyBlbnVtIFNvdXJjZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgZW51bSBM
ZXZlbCB7CiAgICAgICAgTEVWRUxfVElQID0gMjYsCiAgICAgICAgTEVWRUxfTE9HID0gMjcsCiAg
ICAgICAgTEVWRUxfV0FSTklORyA9IDI4LAogICAgICAgIExFVkVMX0VSUk9SID0gMjksCiAgICAg
ICAgTEVWRUxfREVCVUcgPSAzMCwKICAgIH07IC8vIGVudW0gTGV2ZWwKCiAgICAvLyBOYW1lZCBh
ZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdl
LgogICAgZW51bSBUeXBlIHsKICAgICAgICBUWVBFX0xPRyA9IDI3LAogICAgICAgIFRZUEVfRElS
ID0gMzEsCiAgICAgICAgVFlQRV9ESVJYTUwgPSAzMiwKICAgICAgICBUWVBFX1RSQUNFID0gMzMs
CiAgICAgICAgVFlQRV9TVEFSVF9HUk9VUCA9IDM0LAogICAgICAgIFRZUEVfU1RBUlRfR1JPVVBf
Q09MTEFQU0VEID0gMzUsCiAgICAgICAgVFlQRV9FTkRfR1JPVVAgPSAzNiwKICAgICAgICBUWVBF
X0FTU0VSVCA9IDM3LAogICAgfTsgLy8gZW51bSBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgU09VUkNFX1NFVCA9IDEgPDwgMCwKICAgICAgICBMRVZF
TF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVEVYVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoU09VUkNFX1NFVCB8IExFVkVMX1NFVCB8IFRFWFRfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29uc29sZU1l
c3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29u
c29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0Vf
U0VUPiYgc2V0U291cmNlKFNvdXJjZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0Vf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9TRVQ+JiBz
ZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoTGV2ZWwgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwg
cHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TEVWRUxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IExFVkVMX1NFVD4mIHNldExldmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwgcHJvcGVy
dHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJs
ZXZlbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMRVZFTF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29uc29sZU1lc3NhZ2U+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29uc29sZU1l
c3NhZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvbnNvbGVNZXNz
YWdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdlPiByZXN1bHQgPSBDb25zb2xl
TWVzc2FnZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U291cmNlKC4uLikKICAgICAqICAgICAu
c2V0TGV2ZWwoLi4uKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENvbnNvbGVNZXNzYWdlKCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZv
aWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVt
YmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgic3RhY2tUcmFjZSIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1
ZSk7CiAgICB9Cn07CgovKiBTdGFjayBlbnRyeSBmb3IgY29uc29sZSBlcnJvcnMgYW5kIGFzc2Vy
dGlvbnMuICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGVU5DVElP
Tl9OQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAxLAogICAgICAgIExJ
TkVfTlVNQkVSX1NFVCA9IDEgPDwgMiwKICAgICAgICBDT0xVTU5fTlVNQkVSX1NFVCA9IDEgPDwg
MywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChGVU5DVElPTl9OQU1FX1NFVCB8IFVSTF9TRVQg
fCBMSU5FX05VTUJFUl9TRVQgfCBDT0xVTU5fTlVNQkVSX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGVU5DVElPTl9OQU1FX1NFVD4mIHNldEZ1
bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEZVTkNUSU9OX05BTUVfU0VUKSwgcHJvcGVydHlfZnVuY3Rp
b25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnVu
Y3Rpb25OYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZVTkNUSU9O
X05BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+
JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9OVU1CRVJfU0VU
KSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENPTFVNTl9OVU1CRVJfU0VUPiYgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT0xVTU5fTlVNQkVSX1NF
VCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDT0xVTU5fTlVNQkVSX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAg
ICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldENvbHVtbk51bWJlcigu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBD
YWxsRnJhbWUoKSkpOwogICAgfQp9OwoKfSAvLyBDb25zb2xlCgpuYW1lc3BhY2UgTmV0d29yayB7
Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7
CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgRnJhbWVJZDsK
Ci8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJ
ZDsKCi8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QuICovCmNsYXNzIFJlc291
cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfVElNRV9TRVQgPSAxIDw8
IDAsCiAgICAgICAgUFJPWFlfU1RBUlRfU0VUID0gMSA8PCAxLAogICAgICAgIFBST1hZX0VORF9T
RVQgPSAxIDw8IDIsCiAgICAgICAgRE5TX1NUQVJUX1NFVCA9IDEgPDwgMywKICAgICAgICBETlNf
RU5EX1NFVCA9IDEgPDwgNCwKICAgICAgICBDT05ORUNUX1NUQVJUX1NFVCA9IDEgPDwgNSwKICAg
ICAgICBDT05ORUNUX0VORF9TRVQgPSAxIDw8IDYsCiAgICAgICAgU1NMX1NUQVJUX1NFVCA9IDEg
PDwgNywKICAgICAgICBTU0xfRU5EX1NFVCA9IDEgPDwgOCwKICAgICAgICBTRU5EX1NUQVJUX1NF
VCA9IDEgPDwgOSwKICAgICAgICBTRU5EX0VORF9TRVQgPSAxIDw8IDEwLAogICAgICAgIFJFQ0VJ
VkVfSEVBREVSU19FTkRfU0VUID0gMSA8PCAxMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChS
RVFVRVNUX1RJTUVfU0VUIHwgUFJPWFlfU1RBUlRfU0VUIHwgUFJPWFlfRU5EX1NFVCB8IEROU19T
VEFSVF9TRVQgfCBETlNfRU5EX1NFVCB8IENPTk5FQ1RfU1RBUlRfU0VUIHwgQ09OTkVDVF9FTkRf
U0VUIHwgU1NMX1NUQVJUX1NFVCB8IFNTTF9FTkRfU0VUIHwgU0VORF9TVEFSVF9TRVQgfCBTRU5E
X0VORF9TRVQgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNf
U0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlVGltaW5n
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVTVF9USU1FX1NFVD4m
IHNldFJlcXVlc3RUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBSRVFVRVNUX1RJTUVfU0VUKSwgcHJvcGVydHlfcmVxdWVzdFRp
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0
VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVFVRVNUX1RJTUVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBST1hZX1NUQVJUX1NF
VD4mIHNldFByb3h5U3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX1NUQVJUX1NFVCksIHByb3BlcnR5X3Byb3h5U3Rh
cnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0
YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBST1hZX1NUQVJUX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQUk9YWV9FTkRfU0VUPiYg
c2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFBST1hZX0VORF9TRVQpLCBwcm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5RW5kIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBST1hZX0VORF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE5TX1NUQVJUX1NFVD4mIHNldERuc1N0YXJ0KGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBETlNfU1RBUlRfU0VUKSwgcHJvcGVydHlfZG5zU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxETlNfU1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEROU19FTkRfU0VUPiYgc2V0RG5zRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBETlNfRU5EX1NFVCksIHBy
b3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfRU5E
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT05ORUNUX1NUQVJU
X1NFVD4mIHNldENvbm5lY3RTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09OTkVDVF9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9j
b25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09O
TkVDVF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09O
TkVDVF9FTkRfU0VUPiYgc2V0Q29ubmVjdEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09OTkVDVF9FTkRfU0VUKSwgcHJvcGVy
dHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09O
TkVDVF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNTTF9T
VEFSVF9TRVQ+JiBzZXRTc2xTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX1NUQVJUX1NFVCksIHByb3BlcnR5X3NzbFN0
YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3NsU3Rh
cnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX1NUQVJUX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTU0xfRU5EX1NFVD4mIHNldFNz
bEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU1NMX0VORF9TRVQpLCBwcm9wZXJ0eV9zc2xFbmRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzc2xFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U1NMX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU0VORF9TVEFSVF9TRVQ+JiBzZXRTZW5kU3RhcnQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTkRfU1RBUlRf
U0VUKSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNFTkRfU1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNFTkRfRU5EX1NFVD4mIHNldFNlbmRFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTkRfRU5EX1NFVCksIHByb3BlcnR5
X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJz
ZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfRU5EX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRUNFSVZFX0hFQURFUlNf
RU5EX1NFVD4mIHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRUNFSVZFX0hFQURFUlNfRU5EX1NF
VCksIHByb3BlcnR5X3JlY2VpdmVIZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UkVDRUlWRV9IRUFERVJTX0VORF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXNvdXJj
ZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1pbmc6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAuc2V0UHJveHlTdGFydCguLi4pCiAgICAgKiAg
ICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAgICAuc2V0RG5zU3RhcnQoLi4uKQogICAgICog
ICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0U3RhcnQoLi4uKQogICAg
ICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAqICAgICAuc2V0U3NsU3RhcnQoLi4uKQog
ICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAgICogICAgIC5zZXRTZW5kU3RhcnQoLi4uKQog
ICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAqICAgICAuc2V0UmVjZWl2ZUhlYWRlcnNF
bmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgUmVzb3VyY2VUaW1pbmcoKSkpOwogICAgfQp9OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICov
CmNsYXNzIFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBNRVRIT0RfU0VUID0gMSA8PCAxLAogICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAy
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBNRVRIT0RfU0VUIHwgSEVBREVS
U19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxf
U0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1FVEhPRF9TRVQ+JiBzZXRNZXRob2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNRVRIT0RfU0VU
KSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1F
VEhPRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19T
RVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHBy
b3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2Jq
ZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURF
UlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlcXVlc3Q+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQg
PSBSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5z
ZXRNZXRob2QoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJlcXVlc3QoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSFRUUCByZXNw
b25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxf
U0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19TRVQgPSAxIDw8IDEsCiAgICAgICAgU1RBVFVT
X1RFWFRfU0VUID0gMSA8PCAyLAogICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAzLAogICAgICAg
IE1JTUVfVFlQRV9TRVQgPSAxIDw8IDQsCiAgICAgICAgQ09OTkVDVElPTl9SRVVTRURfU0VUID0g
MSA8PCA1LAogICAgICAgIENPTk5FQ1RJT05fSURfU0VUID0gMSA8PCA2LAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKFVSTF9TRVQgfCBTVEFUVVNfU0VUIHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVB
REVSU19TRVQgfCBNSU1FX1RZUEVfU0VUIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUIHwgQ09OTkVD
VElPTl9JRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1NFVD4mIHNldFN0YXR1cyhkb3VibGUgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1NF
VCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
VEFUVVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19U
RVhUX1NFVD4mIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFUVVNfVEVYVF9TRVQpLCBwcm9w
ZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
VEFUVVNfVEVYVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVB
REVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NF
VCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1JTUVf
VFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0
eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQ
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9S
RVVTRURfU0VUPiYgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05fUkVVU0VEX1NFVCks
IHByb3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX1JFVVNFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9JRF9TRVQ+JiBzZXRDb25uZWN0aW9uSWQo
ZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENPTk5FQ1RJT05fSURfU0VUKSwgcHJvcGVydHlfY29ubmVjdGlvbklkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdGlvbklkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTk5FQ1RJT05fSURfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzcG9uc2U+IHJlc3VsdCA9IFJlc3BvbnNl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXMo
Li4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVy
cyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLikKICAgICAqICAgICAuc2V0Q29ubmVj
dGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25JZCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0Iiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURpc2tDYWNoZShib29sIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmciLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBX
ZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19T
RVQgPSAwLAogICAgICAgIFJFUVVFU1RfS0VZM19TRVQgPSAxIDw8IDAsCiAgICAgICAgSEVBREVS
U19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoUkVRVUVTVF9LRVkzX1NF
VCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVTVF9LRVkzX1NFVD4mIHNldFJlcXVlc3RLZXkz
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgUkVRVUVTVF9LRVkzX1NFVCksIHByb3BlcnR5X3JlcXVlc3RLZXkzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygicmVxdWVzdEtleTMiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVRVUVTVF9LRVkzX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIRUFERVJTX1NFVD4mIHNldEhlYWRl
cnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhFQURFUlNfU0VUKSwgcHJvcGVydHlfaGVhZGVy
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RLZXkzKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVy
cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBXZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAgIH0KfTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBk
YXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBT
VEFUVVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19URVhUX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBIRUFERVJTX1NFVCA9IDEgPDwgMiwKICAgICAgICBDSEFMTEVOR0VfUkVTUE9OU0VfU0VU
ID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUQVRVU19TRVQgfCBTVEFUVVNf
VEVYVF9TRVQgfCBIRUFERVJTX1NFVCB8IENIQUxMRU5HRV9SRVNQT05TRV9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2Nr
ZXRSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNU
ZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRfU0VUKSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1RFWFRfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVy
cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJz
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUPiYg
c2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUKSwg
cHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDSEFMTEVOR0VfUkVTUE9OU0VfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxXZWJTb2NrZXRSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
V2ViU29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikK
ICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3Bv
bnNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0
IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNzIENhY2hlZFJlc291cmNlIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQg
PSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEs
CiAgICAgICAgUkVTUE9OU0VfU0VUID0gMSA8PCAyLAogICAgICAgIEJPRFlfU0laRV9TRVQgPSAx
IDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgUkVT
UE9OU0VfU0VUIHwgQk9EWV9TSVpFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNlOwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4m
IHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5
X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBl
IiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBF
X1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFJFU1BPTlNFX1NFVD4mIHNldFJlc3BvbnNlKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJFU1BPTlNFX1NFVCksIHByb3BlcnR5X3Jlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgicmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UkVTUE9OU0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEJPRFlfU0laRV9TRVQ+JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQk9EWV9TSVpFX1NF
VCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Qk9EWV9TSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxD
YWNoZWRSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3Vy
Y2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhY2hlZFJlc291cmNl
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENhY2hlZFJlc291cmNlPiByZXN1bHQgPSBDYWNoZWRSZXNv
dXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0VHlw
ZSguLi4pCiAgICAgKiAgICAgLnNldFJlc3BvbnNlKC4uLikKICAgICAqICAgICAuc2V0Qm9keVNp
emUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgQ2FjaGVkUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhl
IHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpjbGFzcyBJbml0aWF0b3IgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScg
d2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0b3IuCiAgICBlbnVtIFR5cGUgewogICAgICAgIFRZUEVf
UEFSU0VSID0gMzgsCiAgICAgICAgVFlQRV9TQ1JJUFQgPSAzOSwKICAgICAgICBUWVBFX09USEVS
ID0gMjUsCiAgICB9OyAvLyBlbnVtIFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NF
VCA9IChUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPEluaXRpYXRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBJbml0aWF0b3I7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBF
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEluaXRpYXRvcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5pdGlhdG9yPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaXRpYXRvcj4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SW5pdGlhdG9yPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEluaXRpYXRvcj4gcmVzdWx0ID0gSW5pdGlhdG9yOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IEluaXRpYXRvcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGFja1Ry
YWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldEFycmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VXJsKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9
IC8vIE5ldHdvcmsKCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRGF0YWJhc2Ug
ewovKiBEYXRhYmFzZSBvYmplY3QuICovCmNsYXNzIERhdGFiYXNlIDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAog
ICAgICAgIElEX1NFVCA9IDEgPDwgMCwKICAgICAgICBET01BSU5fU0VUID0gMSA8PCAxLAogICAg
ICAgIE5BTUVfU0VUID0gMSA8PCAyLAogICAgICAgIFZFUlNJT05fU0VUID0gMSA8PCAzLAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKElEX1NFVCB8IERPTUFJTl9TRVQgfCBOQU1FX1NFVCB8IFZF
UlNJT05fU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8RGF0YWJhc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBJRF9TRVQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5X2lkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IERPTUFJTl9TRVQ+JiBzZXREb21haW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBET01BSU5fU0VU
KSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERP
TUFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+
JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWRVJTSU9OX1NFVD4mIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWRVJTSU9O
X1NFVCksIHByb3BlcnR5X3ZlcnNpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFZFUlNJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPERh
dGFiYXNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxEYXRhYmFzZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxEYXRhYmFzZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8RGF0YWJhc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RGF0
YWJhc2U+IHJlc3VsdCA9IERhdGFiYXNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRJZCguLi4p
CiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAg
ICogICAgIC5zZXRWZXJzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0KfTsKCn0gLy8gRGF0YWJhc2UK
CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRE9NU3RvcmFnZSB7Ci8q
IERPTSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBIT1NUX1NFVCA9IDEgPDwgMCwKICAgICAgICBJU19MT0NBTF9TVE9SQUdFX1NFVCA9IDEgPDwg
MSwKICAgICAgICBJRF9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSE9T
VF9TRVQgfCBJU19MT0NBTF9TVE9SQUdFX1NFVCB8IElEX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEVudHJ5PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEVudHJ5OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSE9TVF9TRVQ+JiBzZXRIb3N0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSE9T
VF9TRVQpLCBwcm9wZXJ0eV9ob3N0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxI
T1NUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJU19MT0NBTF9T
VE9SQUdFX1NFVD4mIHNldElzTG9jYWxTdG9yYWdlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSVNfTE9DQUxfU1RPUkFHRV9TRVQpLCBw
cm9wZXJ0eV9pc0xvY2FsU3RvcmFnZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJU19MT0NBTF9TVE9SQUdFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8RW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVudHJ5Pio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEVudHJ5PiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFbnRyeT4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEhvc3Qo
Li4uKQogICAgICogICAgIC5zZXRJc0xvY2FsU3RvcmFnZSguLi4pCiAgICAgKiAgICAgLnNldElk
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3
IEVudHJ5KCkpKTsKICAgIH0KfTsKCn0gLy8gRE9NU3RvcmFnZQoKbmFtZXNwYWNlIEFwcGxpY2F0
aW9uQ2FjaGUgewovKiBEZXRhaWxlZCBhcHBsaWNhdGlvbiBjYWNoZSByZXNvdXJjZSBpbmZvcm1h
dGlvbi4gKi8KY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlIDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAog
ICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU0laRV9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgVFlQRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8
IFNJWkVfU0VUIHwgVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNl
dFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTSVpFX1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKCkpKTsKICAgIH0KfTsKCi8q
IERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE1BTklGRVNUX1VfUl9MX1NFVCA9IDEg
PDwgMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMSwKICAgICAgICBDUkVBVElPTl9USU1FX1NF
VCA9IDEgPDwgMiwKICAgICAgICBVUERBVEVfVElNRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgUkVT
T1VSQ0VTX1NFVCA9IDEgPDwgNCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChNQU5JRkVTVF9V
X1JfTF9TRVQgfCBTSVpFX1NFVCB8IENSRUFUSU9OX1RJTUVfU0VUIHwgVVBEQVRFX1RJTUVfU0VU
IHwgUkVTT1VSQ0VTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BTklGRVNUX1VfUl9MX1NFVD4mIHNldE1hbmlmZXN0
VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTUFOSUZFU1RfVV9SX0xfU0VUKSwgcHJvcGVydHlfbWFuaWZlc3RVUkxf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVS
TCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQU5JRkVTVF9VX1JfTF9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+JiBzZXRT
aXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENSRUFUSU9OX1RJTUVfU0VUPiYgc2V0Q3JlYXRpb25UaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDUkVBVElPTl9USU1FX1NF
VCksIHByb3BlcnR5X2NyZWF0aW9uVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImNyZWF0aW9uVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDUkVBVElPTl9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVUERBVEVfVElNRV9TRVQ+JiBzZXRVcGRhdGVUaW1lKGRvdWJsZSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUERBVEVfVElN
RV9TRVQpLCBwcm9wZXJ0eV91cGRhdGVUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigidXBkYXRlVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxVUERBVEVfVElNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSRVNPVVJDRVNfU0VUKSwgcHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UkVTT1VSQ0VTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAu
c2V0Q3JlYXRpb25UaW1lKC4uLikKICAgICAqICAgICAuc2V0VXBkYXRlVGltZSguLi4pCiAgICAg
KiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19G
SUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlKCkpKTsKICAgIH0KfTsKCi8qIEZy
YW1lIGlkZW50aWZpZXIgLSBtYW5pZmVzdCBVUkwgcGFpci4gKi8KY2xhc3MgRnJhbWVXaXRoTWFu
aWZlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgRlJBTUVfSURfU0VUID0gMSA8PCAwLAogICAg
ICAgIE1BTklGRVNUX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8
PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZSQU1FX0lEX1NFVCB8IE1BTklGRVNUX1Vf
Ul9MX1NFVCB8IFNUQVRVU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVdpdGhNYW5pZmVzdDsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX0lEX1NFVD4mIHNldEZyYW1lSWQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBGUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGUkFNRV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYgc2V0TWFuaWZlc3RVUkwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklGRVNUX1VfUl9MX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfU0VUPiYgc2V0U3RhdHVz
KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTVEFUVVNfU0VUKSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNUQVRVU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8RnJhbWVXaXRoTWFuaWZlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZy
YW1lV2l0aE1hbmlmZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxG
cmFtZVdpdGhNYW5pZmVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4g
cmVzdWx0ID0gRnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1l
SWQoLi4uKQogICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFN0
YXR1cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVm
KG5ldyBGcmFtZVdpdGhNYW5pZmVzdCgpKSk7CiAgICB9Cn07Cgp9IC8vIEFwcGxpY2F0aW9uQ2Fj
aGUKCm5hbWVzcGFjZSBET00gewovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4g
dGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9k
ZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIE5vZGUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgTk9ERV9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgTk9ERV9U
WVBFX1NFVCA9IDEgPDwgMSwKICAgICAgICBOT0RFX05BTUVfU0VUID0gMSA8PCAyLAogICAgICAg
IExPQ0FMX05BTUVfU0VUID0gMSA8PCAzLAogICAgICAgIE5PREVfVkFMVUVfU0VUID0gMSA8PCA0
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5PREVfSURfU0VUIHwgTk9ERV9UWVBFX1NFVCB8
IE5PREVfTkFNRV9TRVQgfCBMT0NBTF9OQU1FX1NFVCB8IE5PREVfVkFMVUVfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklF
TERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBOb2RlOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXROb2RlSWQo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE5PREVfSURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE5PREVfVFlQRV9TRVQ+JiBzZXROb2RlVHlwZShpbnQgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9UWVBFX1NFVCksIHByb3BlcnR5
X25vZGVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
bm9kZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9UWVBF
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX05BTUVfU0VU
PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX05BTUVfU0VUKSwgcHJvcGVydHlfbm9kZU5h
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlTmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX05BTUVfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExPQ0FMX05BTUVfU0VUPiYgc2V0
TG9jYWxOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTE9DQUxfTkFNRV9TRVQpLCBwcm9wZXJ0eV9sb2NhbE5hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsb2NhbE5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TE9DQUxfTkFNRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9WQUxVRV9TRVQ+JiBzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX1ZBTFVFX1NFVCksIHByb3BlcnR5X25vZGVWYWx1ZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVWYWx1ZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX1ZBTFVFX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxOb2RlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxOb2RlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPE5vZGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGU+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAg
IC5zZXROb2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAg
ICAgLnNldE5vZGVWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVM
RFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+KGFkb3B0UmVmKG5ldyBOb2RlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkTm9kZUNv
dW50KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImNoaWxkTm9kZUNv
dW50IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVu
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0QXR0cmlidXRlcyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiYXR0cmlidXRl
cyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJMKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFB1YmxpY0lkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwdWJsaWNJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFN5c3RlbUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEludGVybmFs
U3Vic2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJpbnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFhtbFZlcnNpb24o
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInhtbFZl
cnNpb24iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0OjpzZXRWYWx1ZTsKCn07CgovKiBET00gaW50ZXJhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4g
dGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIGFjdHVhbCBET00gbm9k
ZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUuICovCmNsYXNzIEV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAgICAg
VVNFX0NBUFRVUkVfU0VUID0gMSA8PCAxLAogICAgICAgIElTX0FUVFJJQlVURV9TRVQgPSAxIDw8
IDIsCiAgICAgICAgTk9ERV9JRF9TRVQgPSAxIDw8IDMsCiAgICAgICAgSEFORExFUl9CT0RZX1NF
VCA9IDEgPDwgNCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUWVBFX1NFVCB8IFVTRV9DQVBU
VVJFX1NFVCB8IElTX0FUVFJJQlVURV9TRVQgfCBOT0RFX0lEX1NFVCB8IEhBTkRMRVJfQk9EWV9T
RVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5
cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVTRV9DQVBUVVJFX1NFVD4mIHNldFVzZUNhcHR1
cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBVU0VfQ0FQVFVSRV9TRVQpLCBwcm9wZXJ0eV91c2VDYXB0dXJlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInVzZUNhcHR1cmUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVNFX0NBUFRVUkVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElTX0FUVFJJQlVURV9TRVQ+JiBzZXRJc0F0dHJpYnV0
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIElTX0FUVFJJQlVURV9TRVQpLCBwcm9wZXJ0eV9pc0F0dHJpYnV0ZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJpc0F0dHJpYnV0ZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJU19BVFRSSUJVVEVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfSURfU0VUPiYgc2V0Tm9kZUlkKGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RF
X0lEX1NFVCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxOT0RFX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBI
QU5ETEVSX0JPRFlfU0VUPiYgc2V0SGFuZGxlckJvZHkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIQU5ETEVSX0JPRFlf
U0VUKSwgcHJvcGVydHlfaGFuZGxlckJvZHlfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJoYW5kbGVyQm9keSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxIQU5ETEVSX0JPRFlfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEV2ZW50TGlzdGVuZXI+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVu
dExpc3RlbmVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAu
c2V0VXNlQ2FwdHVyZSguLi4pCiAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAgICAq
ICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0SGFuZGxlckJvZHkoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRXZlbnRMaXN0
ZW5lcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRMb2NhdGlvbigvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsK
ICAgIH0KfTsKCi8qIEEgc3RydWN0dXJlIGhvbGRpbmcgYW4gUkdCQSBjb2xvci4gKi8KLy8gVHlw
ZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnUkdCQScuCmNsYXNzIFJnYmEgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgUl9TRVQgPSAxIDw8IDAsCiAgICAgICAgR19TRVQgPSAxIDw8IDEsCiAgICAgICAg
Ql9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoUl9TRVQgfCBHX1NFVCB8
IEJfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8UmdiYT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBSZ2JhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUl9TRVQ+JiBz
ZXRSKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSX1NFVCksIHByb3BlcnR5X3JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEdfU0VUPiYgc2V0Ryhp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
R19TRVQpLCBwcm9wZXJ0eV9nX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxHX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCX1NFVD4mIHNldEIoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJfU0VU
KSwgcHJvcGVydHlfYl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Ql9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmdiYT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
UmdiYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxSZ2JhPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZ2JhPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFJnYmE+IHJlc3VsdCA9IFJnYmE6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFIoLi4uKQogICAgICogICAgIC5zZXRHKC4uLikKICAgICAqICAgICAuc2V0QiguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZ2JhKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE51bWJlcigiYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENvbmZpZ3VyYXRpb24gZGF0YSBm
b3IgdGhlIGhpZ2hsaWdodGluZyBvZiBwYWdlIGVsZW1lbnRzLiAqLwpjbGFzcyBIaWdobGlnaHRD
b25maWcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAwCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxIaWdobGln
aHRDb25maWc+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
SGlnaGxpZ2h0Q29uZmlnOwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SGln
aGxpZ2h0Q29uZmlnPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25maWc+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SGlnaGxpZ2h0Q29u
ZmlnPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxIaWdobGlnaHRDb25m
aWc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiByZXN1bHQgPSBIaWdobGln
aHRDb25maWc6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBIaWdobGlnaHRDb25maWcoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U2hv
d0luZm8oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJzaG93SW5m
byIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENvbnRlbnRDb2xvcigvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJjb250ZW50Q29sb3IiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRQYWRkaW5nQ29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldE9iamVjdCgicGFkZGluZ0NvbG9yIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0Qm9yZGVyQ29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE9iamVjdCgiYm9yZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRNYXJn
aW5Db2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJt
YXJnaW5Db2xvciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gRE9NCgpuYW1lc3BhY2UgQ1NTIHsK
LyogVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBzdHlsZSBpbiBhIHVuaXF1ZSB3YXkuICov
CmNsYXNzIENTU1N0eWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZTEVfU0hFRVRfSURf
U0VUID0gMSA8PCAwLAogICAgICAgIE9SRElOQUxfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IE9SRElOQUxfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVJ
ZD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHls
ZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURf
U0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJv
cGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVydHlfb3Jk
aW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGlu
YWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVJZD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTU3R5bGVJZD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDU1NTdHlsZUlkPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlSWQ+IHJl
c3VsdCA9IENTU1N0eWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCgu
Li4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGVJZCgpKSk7CiAgICB9Cn07CgovKiBU
aGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHJ1bGUgaW4gYSB1bmlxdWUgd2F5LiAqLwpjbGFz
cyBDU1NSdWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZTEVfU0hFRVRfSURfU0VUID0g
MSA8PCAwLAogICAgICAgIE9SRElOQUxfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IE9SRElOQUxfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNf
U0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1bGVJZDsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NIRUVUX0lEX1NFVD4mIHNl
dFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUWUxFX1NIRUVUX0lEX1NFVCksIHByb3BlcnR5X3N0
eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlM
RV9TSEVFVF9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT1JE
SU5BTF9TRVQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPUkRJTkFMX1NFVCksIHByb3BlcnR5X29yZGluYWxfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SRElOQUxfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGVJZD4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENTU1J1bGVJZD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q1NTUnVsZUlkPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGVJZD4gcmVzdWx0ID0gQ1NTUnVs
ZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAg
IC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IENTU1J1bGVJZCgpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0
aW9uIGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNzIFBzZXVkb0lkUnVsZXMgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgUFNFVURPX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBSVUxF
U19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoUFNFVURPX0lEX1NFVCB8
IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgUHNldWRvSWRSdWxlczsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBTRVVET19JRF9TRVQ+JiBzZXRQc2V1ZG9JZChpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUFNFVURPX0lEX1NFVCks
IHByb3BlcnR5X3BzZXVkb0lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigicHNldWRvSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UFNFVURPX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxF
U19TRVQ+JiBzZXRSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSVUxFU19TRVQpLCBwcm9w
ZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
cnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UlVMRVNfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBzZXVkb0lkUnVsZXM+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPFBzZXVkb0lkUnVsZXM+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8UHNldWRvSWRSdWxlcz4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxQ
c2V1ZG9JZFJ1bGVzPiByZXN1bHQgPSBQc2V1ZG9JZFJ1bGVzOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRQc2V1ZG9JZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFBzZXVkb0lkUnVsZXMoKSkp
OwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVjdGlvbiBmb3IgYSBzaW5nbGUgcHNldWRvIHN0
eWxlLiAqLwpjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IE1BVENIRURfQ1NTX1JVTEVTX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChNQVRDSEVEX0NTU19SVUxFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnk7
CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQVRDSEVEX0NTU19SVUxFU19T
RVQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTUFUQ0hFRF9D
U1NfUlVMRVNfU0VUKSwgcHJvcGVydHlfbWF0Y2hlZENTU1J1bGVzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hFRF9DU1NfUlVMRVNfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiByZXN1bHQgPSBJbmhlcml0ZWRT
dHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgSW5oZXJp
dGVkU3R5bGVFbnRyeSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRJbmxpbmVTdHlsZSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiaW5saW5lU3R5bGUi
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgaW5mb3JtYXRpb24gZm9yIGEgRE9NIHN0
eWxlIGF0dHJpYnV0ZS4gKi8KY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGUgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgU1RZTEVfU0VUID0gMSA8PCAxLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgU1RZTEVfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVB
dHRyaWJ1dGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
Q1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
QU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NFVD4mIHNldFN0eWxlKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZ
TEVfU0VUKSwgcHJvcGVydHlfc3R5bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTVFlMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5
bGVBdHRyaWJ1dGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlQXR0
cmlidXRlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcmVzdWx0ID0g
Q1NTU3R5bGVBdHRyaWJ1dGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAg
ICogICAgIC5zZXRTdHlsZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVM
RFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUF0dHJpYnV0ZSgpKSk7CiAgICB9Cn07CgovKiBDU1Mg
c3R5bGVzaGVldCBtZXRhaW5mb3JtYXRpb24uICovCmNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXIg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZTEVfU0hFRVRfSURfU0VUID0gMSA8PCAwLAogICAg
ICAgIFNPVVJDRV9VX1JfTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVElUTEVfU0VUID0gMSA8PCAy
LAogICAgICAgIERJU0FCTEVEX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChTVFlMRV9TSEVFVF9JRF9TRVQgfCBTT1VSQ0VfVV9SX0xfU0VUIHwgVElUTEVfU0VUIHwgRElT
QUJMRURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0SGVhZGVyOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVl
dElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVl
dElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lE
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfVV9SX0xf
U0VUPiYgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1VfUl9MX1NFVCksIHByb3BlcnR5
X3NvdXJjZVVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InNvdXJjZVVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0Vf
VV9SX0xfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRJVExFX1NF
VD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VUKSwgcHJvcGVydHlfdGl0bGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0aXRsZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgRElTQUJMRURfU0VUPiYgc2V0RGlzYWJsZWQoYm9vbCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBESVNBQkxF
RF9TRVQpLCBwcm9wZXJ0eV9kaXNhYmxlZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxESVNBQkxFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEhl
YWRlcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlU2hl
ZXRIZWFkZXI+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJjZVVSTCguLi4pCiAg
ICAgKiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0RGlzYWJsZWQoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGVT
aGVldEhlYWRlcigpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBjb250ZW50cy4gKi8K
Y2xhc3MgQ1NTU3R5bGVTaGVldEJvZHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZTEVfU0hF
RVRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIFJVTEVTX1NFVCA9IDEgPDwgMSwKICAgICAgICBB
TExfRklFTERTX1NFVCA9IChTVFlMRV9TSEVFVF9JRF9TRVQgfCBSVUxFU19TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0Qm9keT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBDU1NTdHlsZVNoZWV0Qm9keTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNUWUxFX1NIRUVUX0lEX1NFVD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUWUxFX1NI
RUVUX0lEX1NFVCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TSEVFVF9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgUlVMRVNfU0VUPiYgc2V0UnVsZXMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUlVMRVNfU0VUKSwgcHJvcGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFJVTEVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVTaGVldEJv
ZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENTU1N0eWxlU2hlZXRCb2R5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5
PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5
bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldEJvZHkoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBydWxl
IHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NSdWxlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ29yaWdpbicgd2hp
bGUgZ2VuZXJhdGluZyBDU1NSdWxlLgogICAgZW51bSBPcmlnaW4gewogICAgICAgIE9SSUdJTl9V
U0VSID0gNDAsCiAgICAgICAgT1JJR0lOX1VTRVJfQUdFTlQgPSA0MSwKICAgICAgICBPUklHSU5f
SU5TUEVDVE9SID0gNDIsCiAgICAgICAgT1JJR0lOXyA9IDQzLAogICAgfTsgLy8gZW51bSBPcmln
aW4KCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTRUxFQ1RP
Ul9URVhUX1NFVCA9IDEgPDwgMCwKICAgICAgICBTT1VSQ0VfTElORV9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgT1JJR0lOX1NFVCA9IDEgPDwgMiwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDMsCiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU0VMRUNUT1JfVEVYVF9TRVQgfCBTT1VSQ0VfTElORV9T
RVQgfCBPUklHSU5fU0VUIHwgU1RZTEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NSdWxlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU0VMRUNUT1JfVEVYVF9TRVQ+JiBzZXRTZWxlY3RvclRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTRUxFQ1RPUl9URVhUX1NFVCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTRUxFQ1RPUl9URVhUX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfTElORV9TRVQ+JiBzZXRT
b3VyY2VMaW5lKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTT1VSQ0VfTElORV9TRVQpLCBwcm9wZXJ0eV9zb3VyY2VMaW5lX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0VfTElORV9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT1JJR0lOX1NFVD4mIHNldE9yaWdpbihPcmln
aW4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
T1JJR0lOX1NFVCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JJR0lOX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
T1JJR0lOX1NFVCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxPUklHSU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNUWUxFX1NFVD4mIHNldFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0VUKSwgcHJvcGVydHlfc3R5
bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
Q1NTUnVsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDU1NSdWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NS
dWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFNlbGVjdG9yVGV4dCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJj
ZUxpbmUoLi4uKQogICAgICogICAgIC5zZXRPcmlnaW4oLi4uKQogICAgICogICAgIC5zZXRTdHls
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBDU1NSdWxlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFJ1bGVJZCgvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0U2VsZWN0b3JSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFu
Z2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgic2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dE1lZGlhKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0
aGluIGEgcmVzb3VyY2UuICovCmNsYXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAg
ICAgIFNUQVJUX1NFVCA9IDEgPDwgMCwKICAgICAgICBFTkRfU0VUID0gMSA8PCAxLAogICAgICAg
IEFMTF9GSUVMRFNfU0VUID0gKFNUQVJUX1NFVCB8IEVORF9TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERT
X1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VSYW5nZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVJUX1NFVD4mIHNldFN0YXJ0
KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTVEFSVF9TRVQpLCBwcm9wZXJ0eV9zdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBF
TkRfU0VUPiYgc2V0RW5kKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBFTkRfU0VUKSwgcHJvcGVydHlfZW5kX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZW5kIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEVORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8U291cmNlUmFuZ2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNvdXJjZVJhbmdl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTb3VyY2VSYW5nZT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0gU291cmNlUmFuZ2U6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RW5kKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNvdXJjZVJh
bmdlKCkpKTsKICAgIH0KfTsKCmNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAx
IDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQpCiAg
ICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJp
dmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxD
U1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9T
RVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1F
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gcmVzdWx0ID0g
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4u
LikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5KCkpKTsKICAg
IH0KfTsKCi8qIENTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgQ1NTX1BST1BFUlRJRVNfU0VUID0gMSA8PCAwLAogICAgICAg
IFNIT1JUSEFORF9FTlRSSUVTX1NFVCA9IDEgPDwgMSwKICAgICAgICBXSURUSF9TRVQgPSAxIDw8
IDIsCiAgICAgICAgSEVJR0hUX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChDU1NfUFJPUEVSVElFU19TRVQgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQgfCBXSURUSF9TRVQg
fCBIRUlHSFRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDU1NfUFJPUEVSVElFU19TRVQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENTU19QUk9QRVJUSUVTX1NFVCksIHByb3BlcnR5X2Nzc1Byb3BlcnRpZXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q1NTX1BST1BFUlRJRVNfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNIT1JUSEFORF9FTlRSSUVT
X1NFVD4mIHNldFNob3J0aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0hPUlRI
QU5EX0VOVFJJRVNfU0VUKSwgcHJvcGVydHlfc2hvcnRoYW5kRW50cmllc19hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSE9SVEhBTkRfRU5UUklFU19TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV0lEVEhfU0VUPiYgc2V0V2lkdGgo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBXSURUSF9TRVQpLCBwcm9wZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIndpZHRoIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFdJRFRIX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBIRUlHSFRfU0VUPiYgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVJR0hUX1NFVCksIHBy
b3BlcnR5X2hlaWdodF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImhlaWdodCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUlHSFRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDU1NTdHlsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTU3R5bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3Vs
dCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikK
ICAgICAqICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRo
KC4uLikKICAgICAqICAgICAuc2V0SGVpZ2h0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1N0eWxlKCkpKTsKICAgIH0KCiAgICB2b2lk
IHNldFN0eWxlSWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgic3R5bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENzc1RleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImNzc1RleHQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9Cn07
CgovKiBDU1Mgc3R5bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zm
c2V0cy4gKi8KY2xhc3MgQ1NTUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3RhdHVzJyB3aGlsZSBnZW5l
cmF0aW5nIENTU1Byb3BlcnR5LgogICAgZW51bSBTdGF0dXMgewogICAgICAgIFNUQVRVU19BQ1RJ
VkUgPSA0NCwKICAgICAgICBTVEFUVVNfSU5BQ1RJVkUgPSA0NSwKICAgICAgICBTVEFUVVNfRElT
QUJMRUQgPSA0NiwKICAgICAgICBTVEFUVVNfU1RZTEUgPSA0NywKICAgIH07IC8vIGVudW0gU3Rh
dHVzCgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9T
RVQgPSAxIDw8IDAsCiAgICAgICAgVkFMVUVfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUHJvcGVydHk+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZBTFVF
X1NFVD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VUKSwgcHJvcGVydHlfdmFsdWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENT
U1Byb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENTU1Byb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDU1NQcm9wZXJ0eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NQcm9wZXJ0eT4gcmVzdWx0ID0g
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAg
IC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHJpb3Jp
dHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAg
IH0KCiAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2hv
cnRoYW5kTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygic2hvcnRoYW5kTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5n
ZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBtZWRpYSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpj
bGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVk
aWEuCiAgICBlbnVtIFNvdXJjZSB7CiAgICAgICAgU09VUkNFX01FRElBX1JVTEUgPSA0OCwKICAg
ICAgICBTT1VSQ0VfSU1QT1JUX1JVTEUgPSA0OSwKICAgICAgICBTT1VSQ0VfU1RZTEVTSEVFVCA9
IDUwLAogICAgfTsgLy8gZW51bSBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBURVhUX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NF
VCA9IChURVhUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIENTU01lZGlhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90
ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NNZWRpYT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
Q1NTTWVkaWE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q1NTTWVkaWE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENT
U01lZGlhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU01lZGlhPiByZXN1bHQgPSBDU1NNZWRpYTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NNZWRpYSgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRTb3VyY2UoU291cmNlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNl
dFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
Zygic291cmNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBD
U1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnkg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNUT1JfU0VUID0gMSA8PCAwLAogICAgICAgIFRJ
TUVfU0VUID0gMSA8PCAxLAogICAgICAgIEhJVF9DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAgICAg
TUFUQ0hfQ09VTlRfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNFTEVD
VE9SX1NFVCB8IFRJTUVfU0VUIHwgSElUX0NPVU5UX1NFVCB8IE1BVENIX0NPVU5UX1NFVCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNl
bGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU0VMRUNUT1JfU0VUPiYgc2V0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRUxFQ1RP
Ul9TRVQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNFTEVDVE9SX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUSU1FX1NFVD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRJTUVfU0VUKSwgcHJvcGVydHlfdGltZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRpbWUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VElNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgSElUX0NPVU5UX1NFVD4mIHNldEhpdENvdW50KGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBISVRfQ09VTlRf
U0VUKSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxISVRfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1BVENIX0NPVU5UX1NFVD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1BVENIX0NPVU5UX1NFVCksIHByb3Bl
cnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1B
VENIX0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxl
Y3RvclByb2ZpbGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2Vs
ZWN0b3JQcm9maWxlRW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PFNlbGVjdG9yUHJvZmlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmls
ZUVudHJ5PiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U2VsZWN0b3IoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAu
c2V0SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmls
ZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNlbGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0g
MCwKICAgICAgICBUT1RBTF9USU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEg
PDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUT1RBTF9USU1FX1NFVCB8IERBVEFfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRPVEFMX1RJTUVfU0VUPiYgc2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUT1RBTF9USU1FX1NFVCks
IHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUT1RBTF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBE
QVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgREFUQV9TRVQpLCBwcm9w
ZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJk
YXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERBVEFfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0gU2VsZWN0b3JQcm9maWxlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlbGVjdG9y
UHJvZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENTUwoKbmFtZXNwYWNlIFRpbWVsaW5lIHsKLyog
VGltZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNvcmRlZCBh
Y3Rpdml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBU
WVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZUV2ZW50Owog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERBVEFfU0VUKSwg
cHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8REFUQV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8VGltZWxpbmVFdmVudD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PFRpbWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFRpbWVsaW5lRXZlbnQoKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAg
fQp9OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpuYW1l
c3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRl
ZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICovCnR5cGVkZWYg
U3RyaW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpj
bGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTQ1JJUFRfSURfU0VUID0gMSA8
PCAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChTQ1JJUFRfSURfU0VUIHwgTElORV9OVU1CRVJfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTG9jYXRpb247CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTQ1JJUFRfSURfU0VUPiYgc2V0U2NyaXB0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTQ1JJUFRfSURfU0VUKSwgcHJvcGVydHlfc2NyaXB0SWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ1JJUFRfSURfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4mIHNldExpbmVOdW1iZXIo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9j
YXRpb24+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IExv
Y2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICB9
Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5IG9mIGNhbGwgZnJhbWVzIGZvcm0g
dGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBDQUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9
IDEgPDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8IDIsCiAgICAgICAgU0NPUEVfQ0hB
SU5fU0VUID0gMSA8PCAzLAogICAgICAgIFRISVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVOQ1RJT05fTkFNRV9TRVQgfCBMT0NB
VElPTl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDQUxMX0ZSQU1FX0lEX1NFVD4mIHNldENh
bGxGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9jYWxsRnJh
bWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxG
cmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENBTExfRlJBTUVf
SURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZVTkNUSU9OX05B
TUVfU0VUPiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBw
cm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8RlVOQ1RJT05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTE9DQVRJT05fU0VUPiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExPQ0FUSU9O
X1NFVCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TE9DQVRJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNDT1BFX0NIQUlOX1NFVD4mIHNldFNjb3BlQ2hhaW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
SElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENhbGxGcmFt
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxGcmFtZT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxG
cmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDYWxsRnJh
bWVJZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNl
dExvY2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0U2NvcGVDaGFpbiguLi4pCiAgICAgKiAgICAg
LnNldFRoaXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIFNjb3BlIGRlc2NyaXB0aW9uLiAq
LwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgog
ICAgZW51bSBUeXBlIHsKICAgICAgICBUWVBFX0dMT0JBTCA9IDUxLAogICAgICAgIFRZUEVfTE9D
QUwgPSA1MiwKICAgICAgICBUWVBFX1dJVEggPSA1MywKICAgICAgICBUWVBFX0NMT1NVUkUgPSA1
NCwKICAgICAgICBUWVBFX0NBVENIID0gNTUsCiAgICB9OyAvLyBlbnVtIFR5cGUKCiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBPQkpFQ1RfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZ
UEVfU0VUIHwgT0JKRUNUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPFNjb3BlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPQkpFQ1RfU0VUPiYgc2V0T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1Rf
U0VUKSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgib2JqZWN0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE9CSkVDVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFNjb3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2Nv
cGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmpl
Y3QoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgU2NvcGUoKSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVz
cGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCmVudW0gRE9NQnJl
YWtwb2ludFR5cGUgewogICAgRE9NX0JSRUFLUE9JTlRfVFlQRV9TVUJUUkVFX01PRElGSUVEID0g
NTYsCiAgICBET01fQlJFQUtQT0lOVF9UWVBFX0FUVFJJQlVURV9NT0RJRklFRCA9IDU3LAogICAg
RE9NX0JSRUFLUE9JTlRfVFlQRV9OT0RFX1JFTU9WRUQgPSA1OCwKfTsgLy8gZW51bSBET01CcmVh
a3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBQcm9m
aWxlciB7Cn0gLy8gUHJvZmlsZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCn0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRl
bmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKGludCB0ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9p
ZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBoaW50cyk7CiAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95
V29ya2VyKGludCBpZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIEluc3BlY3RvciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVj
dG9yOyB9CgogICAgY2xhc3MgTWVtb3J5IHsKICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAg
ICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5
KiBtZW1vcnkoKSB7IHJldHVybiAmbV9tZW1vcnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1
YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUg
dGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXAp
OwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQ
YWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAg
IHZvaWQgZnJhbWVEZXRhY2hlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQYWdlKiBwYWdlKCkg
eyByZXR1cm4gJm1fcGFnZTsgfQoKICAgIGNsYXNzIFJ1bnRpbWUgewogICAgcHVibGljOgogICAg
ICAgIFJ1bnRpbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgUnVudGltZSogcnVudGltZSgpIHsgcmV0dXJuICZtX3J1bnRpbWU7IH0KCiAgICBj
bGFzcyBDb25zb2xlIHsKICAgIHB1YmxpYzoKICAgICAgICBDb25zb2xlKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZXNz
YWdlQWRkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2Fn
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBt
ZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdl
c0NsZWFyZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgQ29uc29sZSogY29uc29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAg
ICBjbGFzcyBOZXR3b3JrIHsKICAgIHB1YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBy
ZXF1ZXN0V2lsbEJlU2VudChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBpbml0aWF0b3IsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNrVHJhY2Us
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgIHZvaWQgcmVxdWVz
dFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAgICAgICAgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1
aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSovIGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZvaWQgZGF0YVJlY2VpdmVkKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29k
ZWREYXRhTGVuZ3RoKTsKICAgICAgICB2b2lkIGxvYWRpbmdGaW5pc2hlZChjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVk
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcm
IGVycm9yVGV4dCwgY29uc3QgYm9vbCogY29uc3QgY2FuY2VsZWQpOwogICAgICAgIHZvaWQgcmVx
dWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRv
Y3VtZW50VVJMLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9y
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2Nr
ZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJs
ZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0
UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCk7CiAgICAgICAg
dm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDbG9zZWQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3Jr
KCkgeyByZXR1cm4gJm1fbmV0d29yazsgfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBj
bGFzcyBEYXRhYmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRGF0YWJhc2UoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFk
ZERhdGFiYXNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZSk7CiAgICAgICAgdm9pZCBzcWxU
cmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7
CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvbkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbEVycm9yKTsKICAgICAgICB2b2lkIHNldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkg
eyByZXR1cm4gJm1fZGF0YWJhc2U7IH0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQog
ICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NU3RvcmFnZShJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAg
IHZvaWQgYWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSk7
CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01TdG9yYWdl
KiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsgfQoKICAgIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7CiAgICAgICAgdm9pZCBuZXR3
b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBsaWNhdGlvbkNhY2hlKiBhcHBs
aWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25jYWNoZTsgfQoKI2lmIEVOQUJM
RShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVTeXN0ZW0gewogICAgcHVibGljOgogICAgICAg
IEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIHsgcmV0dXJuICZtX2ZpbGVzeXN0ZW07
IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBjbGFzcyBET00gewogICAgcHVi
bGljOgogICAgICAgIERPTShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9jdW1lbnRVcGRhdGVkKCk7CiAgICAgICAgdm9p
ZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
bm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICB2b2lkIGF0dHJpYnV0
ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICAgICB2b2lkIGlu
bGluZVN0eWxlSW52YWxpZGF0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZUlkcyk7
CiAgICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiBjaGFyYWN0ZXJEYXRhKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUNvdW50VXBkYXRlZChp
bnQgbm9kZUlkLCBpbnQgY2hpbGROb2RlQ291bnQpOwogICAgICAgIHZvaWQgY2hpbGROb2RlSW5z
ZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZpb3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbm9k
ZSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnROb2RlSWQsIGludCBu
b2RlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBET00qIGRvbSgpIHsgcmV0dXJuICZtX2RvbTsgfQoKICAgIGNsYXNzIENTUyB7CiAg
ICBwdWJsaWM6CiAgICAgICAgQ1NTKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgp
OwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBDU1MqIGNzcygpIHsgcmV0dXJuICZtX2NzczsgfQoKICAgIGNsYXNzIFRpbWVsaW5lIHsKICAg
IHB1YmxpYzoKICAgICAgICBUaW1lbGluZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZXZlbnRSZWNvcmRlZCgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBUaW1lbGluZSogdGltZWxpbmUoKSB7IHJldHVybiAm
bV90aW1lbGluZTsgfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3Mg
RGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBnbG9iYWxP
YmplY3RDbGVhcmVkKCk7CiAgICAgICAgdm9pZCBzY3JpcHRQYXJzZWQoY29uc3QgU3RyaW5nJiBz
Y3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBzdGFydExpbmUsIGludCBzdGFydENvbHVt
biwgaW50IGVuZExpbmUsIGludCBlbmRDb2x1bW4sIGNvbnN0IGJvb2wqIGNvbnN0IGlzQ29udGVu
dFNjcmlwdCwgY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBVUkwpOwogICAgICAgIHZvaWQgc2NyaXB0
RmFpbGVkVG9QYXJzZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzY3JpcHRTb3Vy
Y2UsIGludCBzdGFydExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKICAgICAgICB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZChjb25zdCBTdHJpbmcmIGJyZWFr
cG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKTsKICAgIC8vIE5hbWVkIGFmdGVy
IHBhcmFtZXRlciBuYW1lICdyZWFzb24nIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgog
ICAgZW51bSBSZWFzb24gewogICAgICAgIFJFQVNPTl9YSFIgPSA1LAogICAgICAgIFJFQVNPTl9E
T00gPSA1OSwKICAgICAgICBSRUFTT05fRVZFTlRfTElTVEVORVIgPSA2MCwKICAgICAgICBSRUFT
T05fRVhDRVBUSU9OID0gNjEsCiAgICAgICAgUkVBU09OX09USEVSID0gMjUsCiAgICB9OyAvLyBl
bnVtIFJlYXNvbgoKICAgICAgICB2b2lkIHBhdXNlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBjYWxsRnJhbWVzLCAvKlJlYXNvbiovIGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgICAgdm9pZCByZXN1bWVkKCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNs
YXNzIERPTURlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBET01EZWJ1Z2dlcihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01EZWJ1Z2dl
ciogZG9tZGVidWdnZXIoKSB7IHJldHVybiAmbV9kb21kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIGFkZFByb2ZpbGVIZWFkZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcik7
CiAgICAgICAgdm9pZCBhZGRIZWFwU25hcHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcm
IGNodW5rKTsKICAgICAgICB2b2lkIGZpbmlzaEhlYXBTbmFwc2hvdChpbnQgdWlkKTsKICAgICAg
ICB2b2lkIHNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7CiAgICAgICAgdm9p
ZCByZXNldFByb2ZpbGVzKCk7CiAgICAgICAgdm9pZCByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
cyhpbnQgZG9uZSwgaW50IHRvdGFsKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUHJvZmlsZXIqIHByb2ZpbGVyKCkgeyByZXR1cm4gJm1f
cHJvZmlsZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVO
QUJMRShXT1JLRVJTKQogICAgY2xhc3MgV29ya2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBXb3Jr
ZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIHdvcmtlckNyZWF0ZWQoaW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVy
bCwgYm9vbCBpbnNwZWN0b3JDb25uZWN0ZWQpOwogICAgICAgIHZvaWQgd29ya2VyVGVybWluYXRl
ZChpbnQgd29ya2VySWQpOwogICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihp
bnQgd29ya2VySWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RlZEZyb21Xb3JrZXIoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgV29ya2VyKiB3b3JrZXIoKSB7IHJldHVy
biAmbV93b3JrZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
SW5zcGVjdG9yIG1faW5zcGVjdG9yOwogICAgTWVtb3J5IG1fbWVtb3J5OwogICAgUGFnZSBtX3Bh
Z2U7CiAgICBSdW50aW1lIG1fcnVudGltZTsKICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0
d29yayBtX25ldHdvcms7CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgRGF0YWJhc2UgbV9k
YXRhYmFzZTsKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1f
ZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAv
LyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBU
aW1lbGluZSBtX3RpbWVsaW5lOwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBE
ZWJ1Z2dlciBtX2RlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVi
dWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIg
bV93b3JrZXI7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKfTsKCn0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120463</attachid>
            <date>2011-12-23 05:58:28 -0800</date>
            <delta_ts>2011-12-23 07:47:12 -0800</delta_ts>
            <desc>For win trybot</desc>
            <filename>bug-74954-20111223175826.patch</filename>
            <type>text/plain</type>
            <size>17201</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi40NjdmODJlZDE1Yzk3ZDBj
NjM1NjBmOWZiMDY2NmFjN2ViMmY1ZjY1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTE5LDYgKzUxOSwyOCBAQCBjbGFz
cyBXcml0ZXI6CiAgICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQg
KyBhZGRpdGlvbmFsX2luZGVudCkKIAogCitjbGFzcyBFbnVtQ29uc3RhbnRzOgorICAgIG1hcF8g
PSB7fQorICAgIGNvbnN0YW50c18gPSBbXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFk
ZF9jb25zdGFudChjbHMsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86Cisg
ICAgICAgICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBwb3MgPSBsZW4oY2xzLm1hcF8pCisgICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBw
b3MKKyAgICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBwb3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZW51bV9jb25zdGFu
dF9jb2RlKGNscyk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGNs
cy5jb25zdGFudHNfOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0g
KyAiXCIiKQorICAgICAgICByZXR1cm4gam9pbihvdXRwdXQsICIsXG4iKSArICJcbiIKKworCiBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFt
ZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5
cGVfZGF0YSk6CkBAIC01MjYsNiArNTQ4LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAg
ICAgIGNsYXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCisgICAgICAg
ICAgICBmdWxsX25hbWVfcHJlZml4ID0gIlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5f
bmFtZSArICI6OiIKIAogICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVm
IHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTQ2LDYgKzU2OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICBkZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwg
Y29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNsYXNz
IEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKKyAgICAgICAgICAgIGZ1bGxf
bmFtZV9wcmVmaXggPSAiIgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAg
ICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzEsMjMgKzU5NSwyNyBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9s
aXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfb3V0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyLmdl
dF9pbmRlbnRlZCgiLy8gIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9
IGpzb25fdHlwYWJsZVsiZW51bSJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnVtX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJlbnVtICIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1l
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lX3ByZWZpeCA9IENhcGl0
YWxpemVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhlbnVtX25h
bWUpICsgIl8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0g
aW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fcG9zID0g
RW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5yZXBsYWNlKCctJywg
J18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
ImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoaXRl
bV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBpdGVtX25hbWVfcHJlZml4ICsgQ2FwaXRhbGl6ZXIu
Y2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKGl0ZW1fY19uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQ
RV9OQU1FX0ZJWF9NQVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbV9jX25hbWUgPSBUWVBFX05BTUVfRklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgLy8gIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRlbV9jX25hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSAi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMi
ICUgZW51bV9wb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCIsXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgifTsgLy8gZW51bSAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiXG5cbiIpCiAKQEAgLTU5OSw3ICs2MjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90
eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFt
ZS5jbGFzc19uYW1lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMp
IgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgpAQCAtNjMzLDYgKzY2NSwxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUo
KToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAorICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
ICAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogcmV0dXJuIGEgdHlwZWRlZiBuYW1lIGlu
c3RlYWQuCkBAIC03MTUsMjggKzc1MSwzMiBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29s
dmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250
ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUg
PSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBl
X3RleHQocGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlM
REVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxz
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9t
dWx0aWxpbmUoIiIiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3Rh
dGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19w
YXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQo
KSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVz
LmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgiIiIKICAgICAgICAgQnVp
bGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwl
cz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFt
ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRl
bXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51
bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
IChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25h
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5
cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9z
XSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3Nd
KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJh
dG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lz
dGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVn
aXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMsMTMgKzgxMywxNSBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
YmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBh
ZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191
cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90
YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRf
dGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5
cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRl
ZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFt
X3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJv
cFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFt
X3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVz
IHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90
eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1f
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9w
WyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2Jp
bmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dl
bmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dl
bmVyYXRvcjoKQEAgLTgyNSw3ICs4NjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSAr
ICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+IgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCAr
IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisKKyAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25l
CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC04NDQsNiArODkwLDEwIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5n
ZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBl
KCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAg
LTg5NSw2ICs5NDUsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUu
RVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
ICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsxMTUzLDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7CiAke2ZvcndhcmRzfQorCitjb25z
dCBTdHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRl
cnN9CiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCkBAIC0xNTQxLDYgKzE1OTgsMTcgQEAg
JGNvbnN0cnVjdG9ySW5pdHsKIAogJG1ldGhvZHMKIAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
KworY29uc3QgU3RyaW5nIGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50
VmFsdWVzfTsKKworY29uc3QgU3RyaW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
eworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1swXTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTYzNiw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90
eXBlX3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToKICAgICBlbHNlOgogICAgICAgICBy
ZXR1cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMgbWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBh
IHBhcnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFyIHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVk
IGFzIG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBwYXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1l
dGhvZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQgY29tbWVudGVkIGFubm90YXRpb24gYWJvdXQg
ZXhwZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBuYW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9k
IHdoZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBwYXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZm
ZXJlbnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RHZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAg
ICAgICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkg
ZGlmZmVyZW50LgorICAgICAgICAgICAgcmV0dXJuIFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwg
Y2xzLlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEluIHJh
dyBhbmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAg
IyBPbmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5cGUgaW4gY29tbWVudHMuCisgICAgICAgICAg
ICByZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisKKyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJN
b2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBl
X3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0
X2luX2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVl
X3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFy
YW1ldGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFy
YW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmlu
ZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNs
YXNzIENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0
X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRf
dGV4dCgpLAorICAgICAgICAgICAgICAgIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQo
RmFsc2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAg
ICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVz
c2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFzcyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRf
Y2xhc3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9
IFtdCkBAIC0xOTUyLDcgKzIwNzMsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMu
YmFja2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVt
cGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0
PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAg
IG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAg
ICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAg
ICBlbnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2Rl
KCkpKQogCiBiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJz
dGl0dXRlKE5vbmUsCiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5i
YWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120465</attachid>
            <date>2011-12-23 07:47:40 -0800</date>
            <delta_ts>2011-12-27 09:41:12 -0800</delta_ts>
            <desc>For win trybot</desc>
            <filename>bug-74954-20111223194738.patch</filename>
            <type>text/plain</type>
            <size>17250</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi5iZDBlZmJiNTE4YzZlOGE4
MDUwOTlmOGI4ZjI5YzY5YTg3ZjUwMDk5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTE5LDYgKzUxOSwyOCBAQCBjbGFz
cyBXcml0ZXI6CiAgICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQg
KyBhZGRpdGlvbmFsX2luZGVudCkKIAogCitjbGFzcyBFbnVtQ29uc3RhbnRzOgorICAgIG1hcF8g
PSB7fQorICAgIGNvbnN0YW50c18gPSBbXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFk
ZF9jb25zdGFudChjbHMsIHZhbHVlKToKKyAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86Cisg
ICAgICAgICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBwb3MgPSBsZW4oY2xzLm1hcF8pCisgICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBw
b3MKKyAgICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBwb3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZW51bV9jb25zdGFu
dF9jb2RlKGNscyk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIGNs
cy5jb25zdGFudHNfOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0g
KyAiXCIiKQorICAgICAgICByZXR1cm4gam9pbihvdXRwdXQsICIsXG4iKSArICJcbiIKKworCiBj
bGFzcyBUeXBlQmluZGluZ3M6CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcmVhdGVfbmFt
ZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5
cGVfZGF0YSk6CkBAIC01MjYsNiArNTQ4LDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAg
ICAgIGNsYXNzIEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCisgICAgICAg
ICAgICBmdWxsX25hbWVfcHJlZml4ID0gIlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5f
bmFtZSArICI6OiIKIAogICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgZGVm
IHdyaXRlX2RvYyh3cml0ZXIpOgpAQCAtNTQ2LDYgKzU2OSw3IEBAIGNsYXNzIFR5cGVCaW5kaW5n
czoKICAgICBkZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwg
Y29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6CiAgICAgICAgIGNsYXNz
IEhlbHBlcjoKICAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKKyAgICAgICAgICAgIGZ1bGxf
bmFtZV9wcmVmaXggPSAiIgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAg
ICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NzEsMjMgKzU5NSwyNyBAQCBjbGFzcyBUeXBl
QmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9s
aXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfb3V0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyLmdl
dF9pbmRlbnRlZCgiLy8gIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9
IGpzb25fdHlwYWJsZVsiZW51bSJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHBlci53cml0ZV9kb2Mod3JpdGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnVtX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJlbnVtICIp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1l
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lX3ByZWZpeCA9IENhcGl0
YWxpemVyLmNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhlbnVtX25h
bWUpICsgIl8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0g
aW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fcG9zID0g
RW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5yZXBsYWNlKCctJywg
J18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
ImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoaXRl
bV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBpdGVtX25hbWVfcHJlZml4ICsgQ2FwaXRhbGl6ZXIu
Y2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKGl0ZW1fY19uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQ
RV9OQU1FX0ZJWF9NQVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbV9jX25hbWUgPSBUWVBFX05BTUVfRklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgLy8gIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRlbV9jX25hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSAi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMi
ICUgZW51bV9wb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCIsXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgifTsgLy8gZW51bSAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiXG5cbiIpCiAKQEAgLTU5OSw3ICs2MjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRp
bmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90
eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFt
ZS5jbGFzc19uYW1lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZ2V0RW51bUNvbnN0YW50VmFsdWUoJXMp
IgogCiAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgpAQCAtNjMzLDYgKzY2NSwxMCBAQCBjbGFzcyBU
eXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUo
KToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKIAorICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToK
ICAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogcmV0dXJuIGEgdHlwZWRlZiBuYW1lIGlu
c3RlYWQuCkBAIC03MTUsMjggKzc1MSwzMiBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29s
dmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250
ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUg
PSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBl
X3RleHQocGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlM
REVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxz
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9t
dWx0aWxpbmUoIiIiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3Rh
dGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChwYXJhbV9yYXdfdHlwZS5nZXRfY19w
YXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQo
KSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVz
LmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgiIiIKICAgICAgICAgQnVp
bGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygiJXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwl
cz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFt
ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRl
bXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51
bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl
IChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25h
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5
cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9z
XSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRl
cl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3Nd
KSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJh
dG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lz
dGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVn
aXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMsMTMgKzgxMywxNSBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
YmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBh
ZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191
cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90
YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRf
dGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5
cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRl
ZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoXCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFt
X3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJv
cFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFt
X3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVz
IHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90
eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1f
dHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9w
WyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2Jp
bmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dl
bmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dl
bmVyYXRvcjoKQEAgLTgyNSw3ICs4NjcsMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSAr
ICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI+IgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIgKyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCAr
IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisKKyAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25l
CiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC04NDQsNiArODkwLDEwIEBAIGNsYXNzIFR5
cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5n
ZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBl
KCk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAg
LTg5NSw2ICs5NDUsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUu
RVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
ICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsxMTUzLDEyIEBAIHR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwogCiBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewogJHtmb3J3YXJkc30KKworY29u
c3QgU3RyaW5nJiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CitlbnVtIFRlc3RXaW5F
bnVtIHsKKyAgICBSRUFTT05fT1RIRVIgPSAyNSwKK307CisKICR7dHlwZUJ1aWxkZXJzfQogfSAv
LyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKIApAQCAtMTU0MSw2ICsxNjAxLDE3IEBAICRjb25zdHJ1
Y3RvckluaXR7CiAKICRtZXRob2RzCiAKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK2NvbnN0
IFN0cmluZyBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworJGVudW1Db25zdGFudFZhbHVlc307
CisKK2NvbnN0IFN0cmluZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbMF07Cit9CisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCkBAIC0xNTY4LDYgKzE2MzksNTkgQEAgZGVmIGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0
KHJhd190eXBlLCBhbm5vdGF0ZWRfdHlwZSk6CiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIHJh
d190eXBlCiAKKworIyBDaG9vc2VzIG1ldGhvZCBnZW5lcmF0ZSBtb2RlcyBmb3IgYSBwYXJ0aWN1
bGFyIHR5cGUuIEEgcGFydGljdWxhciBzZXR0ZXIKKyMgY2FuIGJlIGdlbmVyYXRlZCBhcyBvbmUg
bWV0aG9kIHdpdGggYSBzaW1wbGUgcGFyYW1ldGVyIHR5cGUsCisjIGFzIG9uZSBtZXRob2Qgd2l0
aCBhIHJhdyB0eXBlIG5hbWUgYW5kIGNvbW1lbnRlZCBhbm5vdGF0aW9uIGFib3V0IGV4cGVjdGVk
CisjIHNwZWNpYWxpemVkIHR5cGUgbmFtZSBvciBhcyBvdmVybG9hZGVkIG1ldGhvZCB3aGVuIHJh
dyBhbmQgc3BlY2lhbGl6ZWQKKyMgcGFyYW1ldGVyIHR5cGVzIHJlcXVpcmUgZGlmZmVyZW50IGJl
aGF2aW9yLgorY2xhc3MgTWV0aG9kR2VuZXJhdGVNb2RlczoKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgZ2V0X21vZGVzKGNscywgdHlwZV9iaW5kaW5nKToKKyAgICAgICAgaWYgdHlwZV9iaW5k
aW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAj
IEluIHJhdyBhbmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIGFjdHVhbGx5IGRpZmZlcmVu
dC4KKyAgICAgICAgICAgIHJldHVybiBbY2xzLlN0cmljdFBhcmFtZXRlck1vZGUsIGNscy5SYXdQ
YXJhbWV0ZXJNb2RlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJbiByYXcgYW5kIHN0
cmljdCBtb2RlcyBtZXRob2QgY29kZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgICAgICMgT25seSBw
dXQgc3RyaWN0IHBhcmFtZXRlciB0eXBlIGluIGNvbW1lbnRzLgorICAgICAgICAgICAgcmV0dXJu
IFtjbHMuQ29tYmluZWRNb2RlXQorCisgICAgY2xhc3MgU3RyaWN0UGFyYW1ldGVyTW9kZToKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5
cGVfYmluZGluZyk6CisgICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5
cGVfdGV4dChGYWxzZSkKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgor
ICAgICAgICAgICAgcGF0dGVybiA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVl
X2V4cHJlc3Npb25fcGF0dGVybigpCisgICAgICAgICAgICBpZiBwYXR0ZXJuOgorICAgICAgICAg
ICAgICAgIHJldHVybiBwYXR0ZXJuICUgdmFsdWVfcmVmCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNzIFJhd1BhcmFtZXRlck1v
ZGU6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGVf
dGV4dCh0eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGVfYmluZGluZy5yZWR1
Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJf
T1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZh
bHVlX3JlZik6CisgICAgICAgICAgICByZXR1cm4gdmFsdWVfcmVmCisKKyAgICBjbGFzcyBDb21i
aW5lZE1vZGU6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFt
X3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcpOgorICAgICAgICAgICAgcmV0dXJuIGdldF9hbm5vdGF0
ZWRfdHlwZV90ZXh0KHR5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJh
bV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VUUFVULCBGYWxzZSkuZ2V0X3RleHQoKSwK
KyAgICAgICAgICAgICAgICB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKSkK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgorICAgICAgICAgICAgcGF0
dGVybiA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpCisgICAgICAgICAgICBpZiBwYXR0ZXJuOgorICAgICAgICAgICAgICAgIHJldHVybiBw
YXR0ZXJuICUgdmFsdWVfcmVmCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZV9yZWYKKwogY2xhc3MgR2VuZXJhdG9yOgogICAgIGZyb250ZW5kX2NsYXNzX2Zp
ZWxkX2xpbmVzID0gW10KICAgICBmcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMgPSBbXQpAQCAt
MTk1Miw3ICsyMDc2LDggQEAgYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRf
aC5zdWJzdGl0dXRlKE5vbmUsCiAKIGZyb250ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5m
cm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAogICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdl
bmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsICIiKSwKLSAgICBtZXRob2Rz
PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSkpCisgICAgbWV0aG9k
cz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIiksCisgICAgZW51bUNv
bnN0YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRfY29kZSgpKSkKIAog
YmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShO
b25lLAogICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9t
ZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120595</attachid>
            <date>2011-12-27 09:41:48 -0800</date>
            <delta_ts>2011-12-27 10:23:50 -0800</delta_ts>
            <desc>For trybots</desc>
            <filename>bug-74954-20111227214146.patch</filename>
            <type>text/plain</type>
            <size>20059</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi4zYzU3NWEwYzliNTAzY2E5
Y2YxZTZkNDU1N2RjZWU4YTJjYjkxNzRlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsNiArNTEsNyBAQCBET01BSU5f
REVGSU5FX05BTUVfTUFQID0gewogIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSBy
ZXBsYWNlbWVudHMuCiBUWVBFX05BTUVfRklYX01BUCA9IHsKICAgICAiUkdCQSI6ICJSZ2JhIiwg
ICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUg
aW4gV2luZG93cyBDRS4KKyAgICAiIjogIkVtcHR5IiwKIH0KIAogCkBAIC01MTksNiArNTIwLDI4
IEBAIGNsYXNzIFdyaXRlcjoKICAgICAgICAgcmV0dXJuIFdyaXRlcihuZXdfb3V0cHV0LCBzZWxm
LmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQogCiAKK2NsYXNzIEVudW1Db25zdGFudHM6Cisg
ICAgbWFwXyA9IHt9CisgICAgY29uc3RhbnRzXyA9IFtdCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgorICAgICAgICBpZiB2YWx1ZSBpbiBjbHMu
bWFwXzoKKyAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1ZV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKKyAgICAgICAgICAgIGNscy5tYXBfW3Zh
bHVlXSA9IHBvcworICAgICAgICAgICAgY2xzLmNvbnN0YW50c18uYXBwZW5kKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHBvcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9lbnVt
X2NvbnN0YW50X2NvZGUoY2xzKToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZm9yIGl0
ZW0gaW4gY2xzLmNvbnN0YW50c186CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgXCIi
ICsgaXRlbSArICJcIiIpCisgICAgICAgIHJldHVybiBqb2luKG91dHB1dCwgIixcbiIpICsgIlxu
IgorCisKIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNy
ZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5f
bmFtZSwgdHlwZV9kYXRhKToKQEAgLTUyNiw2ICs1NDksNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UK
KyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0
X2RvbWFpbl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAg
ICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NDYsNiArNTcwLDcgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAg
ICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQorICAgICAgICAg
ICAgZnVsbF9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAgLTU3MSwyMyArNTk2LDI4IEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5l
cmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBm
b3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29t
bWVudF9vdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3
cml0ZXIuZ2V0X2luZGVudGVkKCIvLyAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1l
c3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
InN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgZW51bSBFbnVtIHtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5y
ZXBsYWNlKCctJywgJ18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2Vf
dG9fbG93ZXIoaXRlbV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05BTUVf
RklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgICAgICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVjdCAi
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIp
CiAKQEAgLTU5OSw3ICs2MjksMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVO
VCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6
RW51bSIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykiCiAKICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYg
cmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC02MzMsNiArNjY3LDEwIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgI0ZJWE1FOiByZXR1cm4gYSB0eXBlZGVmIG5hbWUgaW5zdGVhZC4K
QEAgLTY2OSwxNCArNzA3LDE0IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoCiAiIiIgICAgZW51
bSB7Ci0gICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAorICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAiIiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVt
cyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihtYWluX3Byb3Bl
cnRpZXMpID4gMDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIG1haW5fcHJvcGVy
dGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWUg
PSBDYXBpdGFsaXplci5jYW1lbF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMo
cFsibmFtZSJdKSArICJfU0VUIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGl0ZW1fbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocFsi
bmFtZSJdKSArICJTZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gMSA8PCAlcyxc
biIgJSAoaXRlbV9uYW1lLCBwb3MpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcyArPSAxCkBAIC02ODUsNyArNzIzLDcgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUg
PSAiMCIKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9t
dWx0aWxpbmUoCi0iIiIgICAgICAgIEFMTF9GSUVMRFNfU0VUID0gJXMKKyIiIiAgICAgICAgQWxs
RmllbGRzU2V0ID0gJXMKICAgICB9OwogCiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgpAQCAtNzAw
LDcgKzczOCw3IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8JXM+IHB0cikKICAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgIH0KICAgICAgICAgZnJpZW5kIGNsYXNzICVzOwpAQCAtNzE1LDMyICs3NTMsMzYg
QEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29udGV4
dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVj
ZV90b19yYXdfdHlwZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5v
dGF0ZWRfdHlwZSA9IGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHBhcmFtX3Jhd190eXBlLmdldF9j
X3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVf
YmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKCIiIgorIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90
eXBlX3RleHQocGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9C
VUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCisjICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQo
RmFsc2UpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1f
dHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9kZXMocGFyYW1fdHlwZV9iaW5k
aW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZV9tdWx0aWxpbmUoIiIiCiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlcz4mIHNldCVzKCVz
IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
JXMpLCBwcm9wZXJ0eV8lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
JXMoIiVzIiwgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKCIlcyIsICVzKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JXM+KCk7CiAgICAgICAgIH0KICIiIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhdGVfZW51bV9pdGVtc1twb3Nd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sIHByb3BfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0
ZXJfbmFtZSgpLCBwcm9wX25hbWUsIHN0YXRlX2VudW1faXRlbXNbcG9zXSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhdGVfZW51bV9pdGVtc1twb3NdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcGl0YWxpemVyLmxv
d2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX29wdC5nZXRfY19wYXJhbV90eXBlX3Rl
eHQocGFyYW1fdHlwZV9iaW5kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sIHByb3BfbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVy
X25hbWUoKSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90
eXBlX2JpbmRpbmcsICJ2YWx1ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSkpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmluZGluZy5n
ZXRfY29kZV9nZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcikK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBwYXJhbV90eXBl
X2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVy
KQotCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRp
bGluZSgiIiIKICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPCVzPiYgKCkKICAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgfQogCkBAIC03NjEs
OSArODAzLDkgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiO1xuICAgICAqL1xuIikKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoCi0iIiIg
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKKyIiIiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyAlcygpKSk7CisgICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgJXMoKSkpOwogICAgIH0KICIiIiAlIGNs
YXNzX25hbWUpCiAKQEAgLTc3MywxMyArODE1LDE1IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0g
cmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBl
X2NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfbmFt
ZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3Bf
bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRf
bXVsdGlsaW5lKCJcbiAgICB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVf
dGV4dChwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1f
dHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5n
LmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgYW5ub3RhdGVkX3R5cGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHtc
biIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
ICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsIHZhbHVlKTtcbiIgJSAocGFyYW1fdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0p
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICB9XG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1f
dHlwZV9vcHQgaW4gTWV0aG9kR2VuZXJhdGVNb2Rlcy5nZXRfbW9kZXMocGFyYW1fdHlwZV9iaW5k
aW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4i
ICUgcGFyYW1fdHlwZV9vcHQuZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHBhcmFtX3R5cGVfYmluZGlu
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNldCVzKFwiJXNcIiwgJXMpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJhbV90eXBlX2JpbmRp
bmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BbIm5hbWUiXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlw
ZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZh
bHVlIikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgpA
QCAtODI1LDcgKzg2OSwxMSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBl
X3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFpbl9uYW1lICsgIjo6IiArIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIj4iCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIlBhc3NSZWZQdHI8IiArIGhlbHBlci5mdWxsX25hbWVfcHJlZml4ICsgZml4ZWRfdHlw
ZV9uYW1lLmNsYXNzX25hbWUgKyAiPiIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25f
cGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1
Y2VfdG9fcmF3X3R5cGUoKToKQEAgLTg0NCw2ICs4OTIsMTAgQEAgY2xhc3MgVHlwZUJpbmRpbmdz
OgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUo
KS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkK
IAogICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCiAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKIApAQCAtODk1LDYgKzk0
NywxMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5y
ZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0
aW9uYWwpLmdldF90ZXh0KCkKIAogICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAg
ICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAgICAgICAgICAgICAgIHJldHVybiByYXdf
dHlwZQogCkBAIC0xMDk5LDYgKzExNTUsOSBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
IAogbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKICR7Zm9yd2FyZHN9CisKK2NvbnN0IFN0cmluZyYg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCiAke3R5cGVCdWlsZGVyc30KIH0gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKQEAgLTE1NDEsNiArMTYwMCwxNyBAQCAkY29uc3RydWN0
b3JJbml0ewogCiAkbWV0aG9kcwogCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitjb25zdCBT
dHJpbmcgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyRlbnVtQ29uc3RhbnRWYWx1ZXN9Owor
Citjb25zdCBTdHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0
dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzWzBdOworfQorCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVp
bGRlcgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQpAQCAtMTU2OCw2ICsxNjM4LDU5IEBAIGRlZiBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChy
YXdfdHlwZSwgYW5ub3RhdGVkX3R5cGUpOgogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiByYXdf
dHlwZQogCisKKyMgQ2hvb3NlcyBtZXRob2QgZ2VuZXJhdGUgbW9kZXMgZm9yIGEgcGFydGljdWxh
ciB0eXBlLiBBIHBhcnRpY3VsYXIgc2V0dGVyCisjIGNhbiBiZSBnZW5lcmF0ZWQgYXMgb25lIG1l
dGhvZCB3aXRoIGEgc2ltcGxlIHBhcmFtZXRlciB0eXBlLAorIyBhcyBvbmUgbWV0aG9kIHdpdGgg
YSByYXcgdHlwZSBuYW1lIGFuZCBjb21tZW50ZWQgYW5ub3RhdGlvbiBhYm91dCBleHBlY3RlZAor
IyBzcGVjaWFsaXplZCB0eXBlIG5hbWUgb3IgYXMgb3ZlcmxvYWRlZCBtZXRob2Qgd2hlbiByYXcg
YW5kIHNwZWNpYWxpemVkCisjIHBhcmFtZXRlciB0eXBlcyByZXF1aXJlIGRpZmZlcmVudCBiZWhh
dmlvci4KK2NsYXNzIE1ldGhvZEdlbmVyYXRlTW9kZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIGdldF9tb2RlcyhjbHMsIHR5cGVfYmluZGluZyk6CisgICAgICAgIGlmIHR5cGVfYmluZGlu
Zy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgIyBJ
biByYXcgYW5kIHN0cmljdCBtb2RlcyBtZXRob2QgY29kZSBpcyBhY3R1YWxseSBkaWZmZXJlbnQu
CisgICAgICAgICAgICByZXR1cm4gW2Nscy5TdHJpY3RQYXJhbWV0ZXJNb2RlLCBjbHMuUmF3UGFy
YW1ldGVyTW9kZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSW4gcmF3IGFuZCBzdHJp
Y3QgbW9kZXMgbWV0aG9kIGNvZGUgaXMgdGhlIHNhbWUuCisgICAgICAgICAgICAjIE9ubHkgcHV0
IHN0cmljdCBwYXJhbWV0ZXIgdHlwZSBpbiBjb21tZW50cy4KKyAgICAgICAgICAgIHJldHVybiBb
Y2xzLkNvbWJpbmVkTW9kZV0KKworICAgIGNsYXNzIFN0cmljdFBhcmFtZXRlck1vZGU6CisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGVfdGV4dCh0eXBl
X2JpbmRpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGVfYmluZGluZy5nZXRfaW5fY190eXBl
X3RleHQoRmFsc2UpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAg
ICAgICAgICAgIHBhdHRlcm4gPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKQorICAgICAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGF0dGVybiAlIHZhbHVlX3JlZgorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWVfcmVmCisKKyAgICBjbGFzcyBSYXdQYXJhbWV0ZXJNb2Rl
OgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3Rl
eHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcucmVkdWNl
X3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09V
VFBVVCwgRmFsc2UpLmdldF90ZXh0KCkKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCB2YWx1
ZV9yZWYpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCisgICAgY2xhc3MgQ29tYmlu
ZWRNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90
eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJldHVybiBnZXRfYW5ub3RhdGVk
X3R5cGVfdGV4dCh0eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1f
dHlwZShQYXJhbVR5cGUuVFlQRV9CVUlMREVSX09VVFBVVCwgRmFsc2UpLmdldF90ZXh0KCksCisg
ICAgICAgICAgICAgICAgdHlwZV9iaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dChGYWxzZSkpCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHBhdHRl
cm4gPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRl
cm4oKQorICAgICAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0
dGVybiAlIHZhbHVlX3JlZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWVfcmVmCisKIGNsYXNzIEdlbmVyYXRvcjoKICAgICBmcm9udGVuZF9jbGFzc19maWVs
ZF9saW5lcyA9IFtdCiAgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KQEAgLTE2
OTAsNyArMTgxMyw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgYmFja2VuZF9qc19ldmVu
dF9wYXJhbV9saXN0ID0gW10KICAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KICAgICAg
ICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChhZF9ob2NfdHlwZV9v
dXRwdXQpCi0gICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlwZV9v
dXRwdXQsICIgICAgIikKKyAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gV3JpdGVyKGFkX2hv
Y190eXBlX291dHB1dCwgIiAgICAgICAgIikKICAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpz
b25fZXZlbnQ6CiAgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7XG4iKQogICAgICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fZXZlbnRbInBh
cmFtZXRlcnMiXToKQEAgLTE5NTIsNyArMjA3NSw4IEBAIGJhY2tlbmRfaF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAogCiBmcm9udGVuZF9jcHBfZmlsZS53
cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKICAgICBjb25zdHJ1
Y3RvckluaXQ9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAi
IiksCi0gICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxu
IikpKQorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJc
biIpLAorICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdldF9lbnVtX2NvbnN0
YW50X2NvZGUoKSkpCiAKIGJhY2tlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRf
Y3BwLnN1YnN0aXR1dGUoTm9uZSwKICAgICBtZXRob2ROYW1lRGVjbGFyYXRpb25zPWpvaW4oR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCwgIlxuIiksCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120599</attachid>
            <date>2011-12-27 10:03:20 -0800</date>
            <delta_ts>2011-12-27 10:03:20 -0800</delta_ts>
            <desc>InspectorFrontend.h base version</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>142049</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKbmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRo
IGdpdmVuIG5hbWUuICovCmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBO
T0RFX05BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIENPVU5UX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChOT0RFX05BTUVfU0VUIHwgQ09VTlRfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZUNvdW50
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19G
SUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3Vu
dDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBz
ZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09VTlRfU0VUPiYgc2V0Q291bnQoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENP
VU5UX1NFVCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Q09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGVD
b3VudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5v
ZGVDb3VudD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2Rl
TmFtZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKSk7CiAgICB9Cn07Cgpj
bGFzcyBET01Hcm91cCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBUSVRMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgTk9ERV9DT1VOVF9TRVQgPSAxIDw8
IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU0laRV9TRVQgfCBUSVRMRV9TRVQgfCBOT0RF
X0NPVU5UX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIERPTUdyb3VwOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU0laRV9TRVQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRJVExFX1NFVD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VU
KSwgcHJvcGVydHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRM
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9DT1VOVF9T
RVQ+JiBzZXROb2RlQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9DT1VOVF9TRVQp
LCBwcm9wZXJ0eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoIm5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOT0RFX0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxE
T01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERP
TUdyb3VwPiByZXN1bHQgPSBET01Hcm91cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSgu
Li4pCiAgICAgKiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IERP
TUdyb3VwKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSSSIsIHZhbHVl
KTsKICAgIH0KfTsKCn0gLy8gTWVtb3J5CgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFJlc291cmNlIHR5
cGUgYXMgaXQgd2FzIHBlcmNlaXZlZCBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gKi8KbmFtZXNw
YWNlIFJlc291cmNlVHlwZSB7CmNvbnN0IGNoYXIqIGNvbnN0IGRvY3VtZW50ID0gIkRvY3VtZW50
IjsKY29uc3QgY2hhciogY29uc3Qgc3R5bGVzaGVldCA9ICJTdHlsZXNoZWV0IjsKY29uc3QgY2hh
ciogY29uc3QgaW1hZ2UgPSAiSW1hZ2UiOwpjb25zdCBjaGFyKiBjb25zdCBmb250ID0gIkZvbnQi
Owpjb25zdCBjaGFyKiBjb25zdCBzY3JpcHQgPSAiU2NyaXB0IjsKY29uc3QgY2hhciogY29uc3Qg
eGhyID0gIlhIUiI7CmNvbnN0IGNoYXIqIGNvbnN0IHdlYlNvY2tldCA9ICJXZWJTb2NrZXQiOwpj
b25zdCBjaGFyKiBjb25zdCBvdGhlciA9ICJPdGhlciI7Cn0gLy8gbmFtZXNwYWNlIFJlc291cmNl
VHlwZQoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIG9uIHRoZSBwYWdlLiAqLwpjbGFz
cyBGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBJRF9TRVQgPSAxIDw8IDAsCiAgICAgICAg
TE9BREVSX0lEX1NFVCA9IDEgPDwgMSwKICAgICAgICBVUkxfU0VUID0gMSA8PCAyLAogICAgICAg
IE1JTUVfVFlQRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VU
IHwgTE9BREVSX0lEX1NFVCB8IFVSTF9TRVQgfCBNSU1FX1RZUEVfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWU+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWU7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElE
X1NFVCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExPQURFUl9JRF9TRVQ+JiBz
ZXRMb2FkZXJJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIExPQURFUl9JRF9TRVQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExPQURFUl9JRF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZ
UEVfU0VUPiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVfU0VUKSwgcHJvcGVydHlf
bWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
aW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxGcmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8RnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWU+IHJlc3VsdCA9IEZyYW1lOjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgKiAgICAgLnNldExvYWRlcklkKC4uLikK
ICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRnJhbWUoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0UGFyZW50SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBhcmVudElkIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygibmFtZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBG
cmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiAqLwpjbGFz
cyBGcmFtZVJlc291cmNlVHJlZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRp
bmcgRnJhbWVSZXNvdXJjZVRyZWUuCiAgICAvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5Lgog
ICAgY2xhc3MgUmVzb3VyY2VzSXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgcHVi
bGljOgogICAgICAgIGVudW0gewogICAgICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFVSTF9TRVQgfCBUWVBFX1NFVCB8IE1JTUVfVFlQRV9TRVQpCiAgICAgICAgfTsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgICAgIGNsYXNzIEJ1aWxkZXIgewogICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcHRyKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlc0l0ZW07CiAgICAgICAgcHVibGljOgogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlf
dXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVy
bCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsK
ICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4m
IHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFs
dWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAg
ICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVfU0VUPiYg
c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9t
aW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUlN
RV9UWVBFX1NFVD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxSZXNvdXJjZXNJdGVtPiYgKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJj
ZXNJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gKCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZXNJdGVtPigqdGhpcyk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9OwoKICAgICAgICAvKgogICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAgICAgKiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcmVzdWx0ID0gUmVzb3VyY2VzSXRlbTo6Y3Jl
YXRlKCkKICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICogICAgIC5zZXRUeXBl
KC4uLikKICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CiAgICAgICAgICovCiAgICAg
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZXNvdXJj
ZXNJdGVtKCkpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIEZSQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBSRVNPVVJDRVNf
U0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZSQU1FX1NFVCB8IFJFU09V
UkNFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVJlc291cmNlVHJlZTsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX1NFVD4mIHNldEZyYW1lKC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX1NF
VCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlJB
TUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFU09VUkNFU19T
RVQ+JiBzZXRSZXNvdXJjZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVTT1VSQ0VTX1NFVCks
IHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFJFU09VUkNFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJh
bWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lUmVz
b3VyY2VUcmVlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0
ID0gRnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1lKC4uLikK
ICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VUcmVlKCkpKTsKICAgIH0KCiAg
ICB2b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsKICAgIH0K
fTsKCi8qIFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1hdGNoIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMCwKICAgICAgICBM
SU5FX0NPTlRFTlRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKExJTkVf
TlVNQkVSX1NFVCB8IExJTkVfQ09OVEVOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4mIHNldExpbmVOdW1i
ZXIoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMSU5FX0NPTlRFTlRfU0VUPiYgc2V0TGluZUNvbnRl
bnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBMSU5FX0NPTlRFTlRfU0VUKSwgcHJvcGVydHlfbGluZUNvbnRlbnRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsaW5lQ29udGVudCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSU5FX0NPTlRFTlRfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaE1hdGNoPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxTZWFyY2hNYXRjaD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8U2VhcmNoTWF0Y2g+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VhcmNoTWF0
Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNoOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRMaW5lTnVt
YmVyKC4uLikKICAgICAqICAgICAuc2V0TGluZUNvbnRlbnQoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VhcmNoTWF0Y2goKSkpOwogICAg
fQp9OwoKLyogU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaFJlc3Vs
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIEZSQU1F
X0lEX1NFVCA9IDEgPDwgMSwKICAgICAgICBNQVRDSEVTX0NPVU5UX1NFVCA9IDEgPDwgMiwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgRlJBTUVfSURfU0VUIHwgTUFUQ0hFU19D
T1VOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9JRF9TRVQ+JiBzZXRGcmFtZUlkKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRlJBTUVfSURfU0VUKSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1BVENIRVNfQ09VTlRfU0VUPiYgc2V0TWF0Y2hlc0NvdW50KGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRD
SEVTX0NPVU5UX1NFVCksIHByb3BlcnR5X21hdGNoZXNDb3VudF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVTX0NPVU5UX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWFyY2hSZXN1bHQ+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNl
YXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1bHQ+IHJlc3Vs
dCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAq
ICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3VudCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBTZWFyY2hS
ZXN1bHQoKSkpOwogICAgfQp9OwoKLyogQ29va2llIG9iamVjdCAqLwpjbGFzcyBDb29raWUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgVkFMVUVfU0VU
ID0gMSA8PCAxLAogICAgICAgIERPTUFJTl9TRVQgPSAxIDw8IDIsCiAgICAgICAgUEFUSF9TRVQg
PSAxIDw8IDMsCiAgICAgICAgRVhQSVJFU19TRVQgPSAxIDw8IDQsCiAgICAgICAgU0laRV9TRVQg
PSAxIDw8IDUsCiAgICAgICAgSFRUUF9PTkxZX1NFVCA9IDEgPDwgNiwKICAgICAgICBTRUNVUkVf
U0VUID0gMSA8PCA3LAogICAgICAgIFNFU1NJT05fU0VUID0gMSA8PCA4LAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUIHwgRE9NQUlOX1NFVCB8IFBBVEhfU0VU
IHwgRVhQSVJFU19TRVQgfCBTSVpFX1NFVCB8IEhUVFBfT05MWV9TRVQgfCBTRUNVUkVfU0VUIHwg
U0VTU0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDb29raWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ29va2llOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZB
TFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERPTUFJ
Tl9TRVQ+JiBzZXREb21haW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBET01BSU5fU0VUKSwgcHJvcGVydHlfZG9tYWlu
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZG9tYWluIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERPTUFJTl9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUEFUSF9TRVQ+JiBzZXRQYXRoKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUEFUSF9TRVQpLCBwcm9wZXJ0eV9wYXRoX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygicGF0aCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxQQVRIX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFWFBJ
UkVTX1NFVD4mIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEVYUElSRVNfU0VUKSwgcHJvcGVydHlfZXhwaXJlc19hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImV4cGlyZXMiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RVhQSVJFU19TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+JiBzZXRTaXplKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSVpFX1NFVCks
IHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhUVFBfT05MWV9TRVQ+JiBz
ZXRIdHRwT25seShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEhUVFBfT05MWV9TRVQpLCBwcm9wZXJ0eV9odHRwT25seV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJodHRwT25seSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIVFRQX09OTFlfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFQ1VSRV9TRVQ+JiBzZXRTZWN1cmUoYm9vbCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRUNVUkVf
U0VUKSwgcHJvcGVydHlfc2VjdXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEJvb2xlYW4oInNlY3VyZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTRUNVUkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFU1NJ
T05fU0VUPiYgc2V0U2Vzc2lvbihib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNFU1NJT05fU0VUKSwgcHJvcGVydHlfc2Vzc2lvbl9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZXNzaW9uIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFU1NJT05fU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29v
a2llPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PENvb2tpZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29va2llPigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPENvb2tpZT4gcmVzdWx0ID0gQ29va2llOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQogICAgICogICAg
IC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXRQYXRoKC4uLikKICAgICAqICAgICAuc2V0
RXhwaXJlcyguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRIdHRw
T25seSguLi4pCiAgICAgKiAgICAgLnNldFNlY3VyZSguLi4pCiAgICAgKiAgICAgLnNldFNlc3Np
b24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8K
dHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1
bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJl
bW90ZU9iamVjdElkOwoKLyogTWlycm9yIG9iamVjdCByZWZlcmVuY2luZyBvcmlnaW5hbCBKYXZh
U2NyaXB0IG9iamVjdC4gKi8KY2xhc3MgUmVtb3RlT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUn
IHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgLy8gbmFtZXNwYWNlIFR5cGUgewog
ICAgLy8gY29uc3QgY2hhciogY29uc3Qgb2JqZWN0ID0gIm9iamVjdCI7CiAgICAvLyBjb25zdCBj
aGFyKiBjb25zdCBmdW5jdGlvbiA9ICJmdW5jdGlvbiI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25z
dCB1bmRlZmluZWQgPSAidW5kZWZpbmVkIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmlu
ZyA9ICJzdHJpbmciOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgbnVtYmVyID0gIm51bWJlciI7
CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBib29sZWFuID0gImJvb2xlYW4iOwogICAgLy8gfSAv
LyBuYW1lc3BhY2UgVHlwZQoKICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1
YnR5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgLy8gbmFtZXNwYWNlIFN1
YnR5cGUgewogICAgLy8gY29uc3QgY2hhciogY29uc3QgYXJyYXkgPSAiYXJyYXkiOwogICAgLy8g
Y29uc3QgY2hhciogY29uc3QgbnVsbCA9ICJudWxsIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0
IG5vZGUgPSAibm9kZSI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCByZWdleHAgPSAicmVnZXhw
IjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGRhdGUgPSAiZGF0ZSI7CiAgICAvLyB9IC8vIG5h
bWVzcGFjZSBTdWJ0eXBlCgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9T
RVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxSZW1vdGVPYmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgUmVtb3RlT2JqZWN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFJlbW90ZU9iamVjdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPFJlbW90ZU9iamVjdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJl
c3VsdCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZW1vdGVP
YmplY3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldENsYXNzTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2Jq
ZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZGVzY3JpcHRpb24iLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRPYmplY3RJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBP
YmplY3QgcHJvcGVydHkgZGVzY3JpcHRvci4gKi8KY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFdSSVRBQkxF
X1NFVCA9IDEgPDwgMSwKICAgICAgICBDT05GSUdVUkFCTEVfU0VUID0gMSA8PCAyLAogICAgICAg
IEVOVU1FUkFCTEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVf
U0VUIHwgV1JJVEFCTEVfU0VUIHwgQ09ORklHVVJBQkxFX1NFVCB8IEVOVU1FUkFCTEVfU0VUKQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
UHJvcGVydHlEZXNjcmlwdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVy
dHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5h
bWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV1JJVEFCTEVfU0VUPiYgc2V0V3JpdGFi
bGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBXUklUQUJMRV9TRVQpLCBwcm9wZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxXUklUQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ09ORklHVVJBQkxFX1NFVD4mIHNldENvbmZpZ3VyYWJsZShib29sIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTkZJ
R1VSQUJMRV9TRVQpLCBwcm9wZXJ0eV9jb25maWd1cmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENPTkZJR1VSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgRU5VTUVSQUJMRV9TRVQ+JiBzZXRFbnVtZXJhYmxlKGJvb2wg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRU5V
TUVSQUJMRV9TRVQpLCBwcm9wZXJ0eV9lbnVtZXJhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImVudW1lcmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RU5VTUVSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQcm9w
ZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UHJv
cGVydHlEZXNjcmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRXcml0YWJsZSguLi4pCiAgICAg
KiAgICAgLnNldENvbmZpZ3VyYWJsZSguLi4pCiAgICAgKiAgICAgLnNldEVudW1lcmFibGUoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUHJv
cGVydHlEZXNjcmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInZhbHVlIiwg
dmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAg
dm9pZCBzZXRHZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgiZ2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInNl
dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Rocm93bihib29sIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIFJlcHJlc2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4gRWl0aGVyIHJlbW90ZSBvYmpl
Y3QgaWQgPGNvZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2ZSA8Y29kZT52YWx1ZTwvY29k
ZT4gb3IgbmVpdGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBzaG91bGQgYmUgc3BlY2lmaWVk
LiAqLwpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsQXJndW1lbnQ+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEFy
Z3VtZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsQXJndW1l
bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBDYWxsQXJndW1l
bnQ6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0
UmVmKG5ldyBDYWxsQXJndW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUo
InZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1
ZTsKCgogICAgdm9pZCBzZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsK
Cn0gLy8gUnVudGltZQoKbmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xlIG1lc3NhZ2UuICov
CmNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJh
dGluZyBDb25zb2xlTWVzc2FnZS4KICAgIC8vIG5hbWVzcGFjZSBTb3VyY2UgewogICAgLy8gY29u
c3QgY2hhciogY29uc3QgaHRtbCA9ICJodG1sIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHdt
bCA9ICJ3bWwiOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgeG1sID0gInhtbCI7CiAgICAvLyBj
b25zdCBjaGFyKiBjb25zdCBqYXZhc2NyaXB0ID0gImphdmFzY3JpcHQiOwogICAgLy8gY29uc3Qg
Y2hhciogY29uc3QgbmV0d29yayA9ICJuZXR3b3JrIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0
IGNvbnNvbGVfYXBpID0gImNvbnNvbGUtYXBpIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG90
aGVyID0gIm90aGVyIjsKICAgIC8vIH0gLy8gbmFtZXNwYWNlIFNvdXJjZQoKICAgIC8vIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVN
ZXNzYWdlLgogICAgLy8gbmFtZXNwYWNlIExldmVsIHsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0
IHRpcCA9ICJ0aXAiOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgbG9nID0gImxvZyI7CiAgICAv
LyBjb25zdCBjaGFyKiBjb25zdCB3YXJuaW5nID0gIndhcm5pbmciOwogICAgLy8gY29uc3QgY2hh
ciogY29uc3QgZXJyb3IgPSAiZXJyb3IiOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgZGVidWcg
PSAiZGVidWciOwogICAgLy8gfSAvLyBuYW1lc3BhY2UgTGV2ZWwKCiAgICAvLyAvLyBOYW1lZCBh
ZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdl
LgogICAgLy8gbmFtZXNwYWNlIFR5cGUgewogICAgLy8gY29uc3QgY2hhciogY29uc3QgbG9nID0g
ImxvZyI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBkaXIgPSAiZGlyIjsKICAgIC8vIGNvbnN0
IGNoYXIqIGNvbnN0IGRpcnhtbCA9ICJkaXJ4bWwiOwogICAgLy8gY29uc3QgY2hhciogY29uc3Qg
dHJhY2UgPSAidHJhY2UiOwogICAgLy8gY29uc3QgY2hhciogY29uc3Qgc3RhcnRHcm91cCA9ICJz
dGFydEdyb3VwIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXJ0R3JvdXBDb2xsYXBzZWQg
PSAic3RhcnRHcm91cENvbGxhcHNlZCI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBlbmRHcm91
cCA9ICJlbmRHcm91cCI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBhc3NlcnQgPSAiYXNzZXJ0
IjsKICAgIC8vIH0gLy8gbmFtZXNwYWNlIFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBTT1VSQ0VfU0VUID0gMSA8PCAwLAogICAgICAgIExFVkVMX1NF
VCA9IDEgPDwgMSwKICAgICAgICBURVhUX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChTT1VSQ0VfU0VUIHwgTEVWRUxfU0VUIHwgVEVYVF9TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb25zb2xlTWVzc2Fn
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDb25zb2xl
TWVzc2FnZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9TRVQ+
JiBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBM
RVZFTF9TRVQpLCBwcm9wZXJ0eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImxldmVsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExFVkVMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBURVhU
X1NFVD4mIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBURVhUX1NFVCksIHByb3BlcnR5X3RleHRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENvbnNvbGVNZXNzYWdlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb25z
b2xlTWVzc2FnZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDb25zb2xlTWVzc2FnZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q29uc29sZU1lc3NhZ2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+
IHJlc3VsdCA9IENvbnNvbGVNZXNzYWdlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTb3VyY2Uo
Li4uKQogICAgICogICAgIC5zZXRMZXZlbCguLi4pCiAgICAgKiAgICAgLnNldFRleHQoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ29uc29s
ZU1lc3NhZ2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51
bWJlcigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFj
ZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRBcnJheSgic3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5ldHdvcmtS
ZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoIm5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTdGFjayBlbnRyeSBm
b3IgY29uc29sZSBlcnJvcnMgYW5kIGFzc2VydGlvbnMuICovCmNsYXNzIENhbGxGcmFtZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBV
UkxfU0VUID0gMSA8PCAxLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMiwKICAgICAg
ICBDT0xVTU5fTlVNQkVSX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChG
VU5DVElPTl9OQU1FX1NFVCB8IFVSTF9TRVQgfCBMSU5FX05VTUJFUl9TRVQgfCBDT0xVTU5fTlVN
QkVSX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBGVU5DVElPTl9OQU1FX1NFVD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZVTkNUSU9O
X05BTUVfU0VUKSwgcHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEZVTkNUSU9OX05BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwg
cHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0
TGluZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTFVNTl9OVU1CRVJfU0VUPiYgc2V0Q29s
dW1uTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDT0xVTU5fTlVNQkVSX1NFVCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT0xVTU5fTlVNQkVSX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3Vs
dCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikK
ICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAg
ICAgKiAgICAgLnNldENvbHVtbk51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAgfQp9OwoKfSAvLyBD
b25zb2xlCgpuYW1lc3BhY2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4g
Ki8KdHlwZWRlZiBTdHJpbmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJZDsKCi8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3Ig
dGhlIHJlcXVlc3QuICovCmNsYXNzIFJlc291cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAg
ICAgIFJFUVVFU1RfVElNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgUFJPWFlfU1RBUlRfU0VUID0g
MSA8PCAxLAogICAgICAgIFBST1hZX0VORF9TRVQgPSAxIDw8IDIsCiAgICAgICAgRE5TX1NUQVJU
X1NFVCA9IDEgPDwgMywKICAgICAgICBETlNfRU5EX1NFVCA9IDEgPDwgNCwKICAgICAgICBDT05O
RUNUX1NUQVJUX1NFVCA9IDEgPDwgNSwKICAgICAgICBDT05ORUNUX0VORF9TRVQgPSAxIDw8IDYs
CiAgICAgICAgU1NMX1NUQVJUX1NFVCA9IDEgPDwgNywKICAgICAgICBTU0xfRU5EX1NFVCA9IDEg
PDwgOCwKICAgICAgICBTRU5EX1NUQVJUX1NFVCA9IDEgPDwgOSwKICAgICAgICBTRU5EX0VORF9T
RVQgPSAxIDw8IDEwLAogICAgICAgIFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUID0gMSA8PCAxMSwK
ICAgICAgICBBTExfRklFTERTX1NFVCA9IChSRVFVRVNUX1RJTUVfU0VUIHwgUFJPWFlfU1RBUlRf
U0VUIHwgUFJPWFlfRU5EX1NFVCB8IEROU19TVEFSVF9TRVQgfCBETlNfRU5EX1NFVCB8IENPTk5F
Q1RfU1RBUlRfU0VUIHwgQ09OTkVDVF9FTkRfU0VUIHwgU1NMX1NUQVJUX1NFVCB8IFNTTF9FTkRf
U0VUIHwgU0VORF9TVEFSVF9TRVQgfCBTRU5EX0VORF9TRVQgfCBSRUNFSVZFX0hFQURFUlNfRU5E
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFJlc291cmNlVGltaW5nPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFJlc291cmNlVGltaW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUkVRVUVTVF9USU1FX1NFVD4mIHNldFJlcXVlc3RUaW1lKGRvdWJsZSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRVFVRVNUX1RJ
TUVfU0VUKSwgcHJvcGVydHlfcmVxdWVzdFRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxSRVFVRVNUX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBST1hZX1NUQVJUX1NFVD4mIHNldFByb3h5U3RhcnQoZG91YmxlIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX1NU
QVJUX1NFVCksIHByb3BlcnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFBST1hZX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBQUk9YWV9FTkRfU0VUPiYgc2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX0VORF9TRVQp
LCBwcm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInByb3h5RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFBST1hZX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE5T
X1NUQVJUX1NFVD4mIHNldERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBETlNfU1RBUlRfU0VUKSwgcHJvcGVydHlfZG5z
U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNT
dGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfU1RBUlRfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEROU19FTkRfU0VUPiYgc2V0
RG5zRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBETlNfRU5EX1NFVCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDT05ORUNUX1NUQVJUX1NFVD4mIHNldENvbm5lY3RTdGFydChkb3VibGUg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09O
TkVDVF9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVF9FTkRfU0VUPiYgc2V0Q29ubmVjdEVuZChk
b3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQ09OTkVDVF9FTkRfU0VUKSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNTTF9TVEFSVF9TRVQ+JiBzZXRTc2xTdGFydChkb3VibGUg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NM
X1NUQVJUX1NFVCksIHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U1NMX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTU0xfRU5EX1NFVD4mIHNldFNzbEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX0VORF9TRVQpLCBwcm9wZXJ0
eV9zc2xFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJz
c2xFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX0VORF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VORF9TVEFSVF9TRVQ+JiBz
ZXRTZW5kU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFNFTkRfU1RBUlRfU0VUKSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfU1RBUlRfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFTkRfRU5EX1NFVD4mIHNldFNlbmRFbmQo
ZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNFTkRfRU5EX1NFVCksIHByb3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNFTkRfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVD4mIHNldFJlY2VpdmVIZWFkZXJzRW5k
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCksIHByb3BlcnR5X3JlY2VpdmVIZWFkZXJzRW5k
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVjZWl2ZUhl
YWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVDRUlWRV9I
RUFERVJTX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVz
b3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5n
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1p
bmc6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAu
c2V0UHJveHlTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAg
ICAuc2V0RG5zU3RhcnQoLi4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAg
IC5zZXRDb25uZWN0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAg
ICAqICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAg
ICogICAgIC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAg
ICAqICAgICAuc2V0UmVjZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkpOwogICAgfQp9
OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBNRVRIT0RfU0VUID0gMSA8PCAxLAog
ICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVS
TF9TRVQgfCBNRVRIT0RfU0VUIHwgSEVBREVSU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NF
VCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1FVEhPRF9TRVQ+JiBzZXRN
ZXRob2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNRVRIT0RfU0VUKSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1FVEhPRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQgPSBSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNZXRob2QoLi4uKQogICAgICogICAgIC5zZXRI
ZWFkZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IFJlcXVlc3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFs
dWUpOwogICAgfQp9OwoKLyogSFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19T
RVQgPSAxIDw8IDEsCiAgICAgICAgU1RBVFVTX1RFWFRfU0VUID0gMSA8PCAyLAogICAgICAgIEhF
QURFUlNfU0VUID0gMSA8PCAzLAogICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8IDQsCiAgICAg
ICAgQ09OTkVDVElPTl9SRVVTRURfU0VUID0gMSA8PCA1LAogICAgICAgIENPTk5FQ1RJT05fSURf
U0VUID0gMSA8PCA2LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBTVEFUVVNf
U0VUIHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVBREVSU19TRVQgfCBNSU1FX1RZUEVfU0VUIHwgQ09O
TkVDVElPTl9SRVVTRURfU0VUIHwgQ09OTkVDVElPTl9JRF9TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZTsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1NF
VD4mIHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1NFVCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19URVhUX1NFVD4mIHNldFN0YXR1c1RleHQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTVEFUVVNfVEVYVF9TRVQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfVEVYVF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUPiYgc2V0Q29ubmVjdGlvblJldXNl
ZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENPTk5FQ1RJT05fUkVVU0VEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJl
dXNlZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX1JF
VVNFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElP
Tl9JRF9TRVQ+JiBzZXRDb25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05fSURfU0VUKSwgcHJvcGVy
dHlfY29ubmVjdGlvbklkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiY29ubmVjdGlvbklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENPTk5FQ1RJT05fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
UmVzcG9uc2U+IHJlc3VsdCA9IFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwo
Li4uKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0
KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBl
KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNl
dENvbm5lY3Rpb25JZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4
dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVh
ZGVyc1RleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2Jq
ZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RI
ZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJv
bURpc2tDYWNoZShib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZy
b21EaXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1p
bmciLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFz
cyBXZWJTb2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfS0VZM19T
RVQgPSAxIDw8IDAsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoUkVRVUVTVF9LRVkzX1NFVCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVx
dWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJT
b2NrZXRSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVT
VF9LRVkzX1NFVD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVTVF9LRVkzX1NFVCks
IHByb3BlcnR5X3JlcXVlc3RLZXkzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygicmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8UkVRVUVTVF9LRVkzX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBIRUFERVJTX1NFVD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhF
QURFUlNfU0VUKSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8V2ViU29ja2V0UmVxdWVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJT
b2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJT
b2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHJlc3Vs
dCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RLZXkz
KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAgIH0K
fTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNwb25z
ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNU
QVRVU19URVhUX1NFVCA9IDEgPDwgMSwKICAgICAgICBIRUFERVJTX1NFVCA9IDEgPDwgMiwKICAg
ICAgICBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFNUQVRVU19TRVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBIRUFERVJTX1NFVCB8IENIQUxM
RU5HRV9SRVNQT05TRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNU
QVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
VEFUVVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRfU0VU
KSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U1RBVFVTX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVB
REVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUPiYgc2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUKSwgcHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNw
b25zZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDSEFMTEVOR0VfUkVT
UE9OU0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tl
dFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNw
b25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVz
cG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdl
YlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAg
ICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAg
ICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAg
IH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNz
IENhY2hlZFJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAs
CiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgUkVTUE9OU0VfU0VUID0gMSA8PCAy
LAogICAgICAgIEJPRFlfU0laRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgUkVTUE9OU0VfU0VUIHwgQk9EWV9TSVpFX1NFVCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENh
Y2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIENhY2hlZFJlc291cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFU1BPTlNFX1NFVD4mIHNl
dFJlc3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJFU1BPTlNFX1NFVCksIHByb3BlcnR5X3Jlc3BvbnNl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgicmVzcG9uc2Ui
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVTUE9OU0VfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJPRFlfU0laRV9TRVQ+JiBzZXRCb2R5
U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQk9EWV9TSVpFX1NFVCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qk9EWV9TSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2Fj
aGVkUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhY2hlZFJlc291cmNl
PiByZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4u
LikKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFJlc3BvbnNlKC4uLikK
ICAgICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FjaGVkUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyog
SW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpjbGFzcyBJbml0aWF0
b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0b3IuCiAgICAv
LyBuYW1lc3BhY2UgVHlwZSB7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBwYXJzZXIgPSAicGFy
c2VyIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHNjcmlwdCA9ICJzY3JpcHQiOwogICAgLy8g
Y29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAib3RoZXIiOwogICAgLy8gfSAvLyBuYW1lc3BhY2Ug
VHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVf
U0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5pdGlh
dG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
T19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaXRp
YXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0
VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5pdGlhdG9yPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbml0aWF0b3I+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJh
Y2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCn0g
Ly8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7
Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIERPTUFJTl9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgVkVSU0lPTl9TRVQgPSAxIDw8IDMsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgRE9NQUlOX1NFVCB8IE5BTUVfU0VUIHwgVkVS
U0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElEX1NFVD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERPTUFJTl9TRVQp
LCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE9N
QUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZFUlNJT05fU0VUPiYgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZFUlNJT05f
U0VUKSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VkVSU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RGF0
YWJhc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFiYXNlPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxEYXRh
YmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikK
ICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
KiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgRGF0YWJhc2UoKSkpOwogICAgfQp9OwoKfSAvLyBEYXRhYmFzZQoK
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBET01TdG9yYWdlIHsKLyog
RE9NIFN0b3JhZ2UgZW50cnkuICovCmNsYXNzIEVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IEhPU1RfU0VUID0gMSA8PCAwLAogICAgICAgIElTX0xPQ0FMX1NUT1JBR0VfU0VUID0gMSA8PCAx
LAogICAgICAgIElEX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChIT1NU
X1NFVCB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUIHwgSURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RW50cnk+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIT1NUX1NFVD4mIHNldEhvc3QoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIT1NU
X1NFVCksIHByb3BlcnR5X2hvc3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJob3N0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhP
U1RfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElTX0xPQ0FMX1NU
T1JBR0VfU0VUPiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJU19MT0NBTF9TVE9SQUdFX1NFVCksIHBy
b3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPElTX0xPQ0FMX1NUT1JBR0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJRF9TRVQpLCBwcm9wZXJ0eV9pZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RW50cnk+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RW50cnk+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVudHJ5PigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SG9zdCgu
Li4pCiAgICAgKiAgICAgLnNldElzTG9jYWxTdG9yYWdlKC4uLikKICAgICAqICAgICAuc2V0SWQo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcg
RW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9yYWdlCgpuYW1lc3BhY2UgQXBwbGljYXRp
b25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIHJlc291cmNlIGluZm9ybWF0
aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBUWVBFX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwg
U0laRV9TRVQgfCBUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0
VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNJWkVfU0VUPiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0laRV9TRVQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZVJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAq
ICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyog
RGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxpY2F0
aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8
PCAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAxLAogICAgICAgIENSRUFUSU9OX1RJTUVfU0VU
ID0gMSA8PCAyLAogICAgICAgIFVQREFURV9USU1FX1NFVCA9IDEgPDwgMywKICAgICAgICBSRVNP
VVJDRVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE1BTklGRVNUX1Vf
Ul9MX1NFVCB8IFNJWkVfU0VUIHwgQ1JFQVRJT05fVElNRV9TRVQgfCBVUERBVEVfVElNRV9TRVQg
fCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYgc2V0TWFuaWZlc3RV
UkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJM
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklGRVNUX1VfUl9MX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNp
emUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q1JFQVRJT05fVElNRV9TRVQ+JiBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENSRUFUSU9OX1RJTUVfU0VU
KSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENSRUFUSU9OX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFVQREFURV9USU1FX1NFVD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVQREFURV9USU1F
X1NFVCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVQREFURV9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5z
ZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICogICAgIC5zZXRVcGRhdGVUaW1lKC4uLikKICAgICAq
ICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGUoKSkpOwogICAgfQp9OwoKLyogRnJh
bWUgaWRlbnRpZmllciAtIG1hbmlmZXN0IFVSTCBwYWlyLiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5p
ZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFNRV9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAxLAogICAgICAgIFNUQVRVU19TRVQgPSAxIDw8
IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoRlJBTUVfSURfU0VUIHwgTUFOSUZFU1RfVV9S
X0xfU0VUIHwgU1RBVFVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVfSURfU0VUPiYgc2V0RnJhbWVJZChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNQU5JRkVTVF9VX1JfTF9TRVQ+JiBzZXRNYW5pZmVzdFVSTChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1BTklGRVNUX1VfUl9MX1NFVCksIHByb3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFOSUZFU1RfVV9SX0xfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxGcmFtZVdpdGhNYW5pZmVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJh
bWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZy
YW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBy
ZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnJhbWVJ
ZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U3Rh
dHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsKICAgIH0KfTsKCn0gLy8gQXBwbGljYXRpb25DYWNo
ZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0
ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rl
cy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgTm9kZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBOT0RFX1RZ
UEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVfTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAg
TE9DQUxfTkFNRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgTk9ERV9WQUxVRV9TRVQgPSAxIDw8IDQs
CiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTk9ERV9JRF9TRVQgfCBOT0RFX1RZUEVfU0VUIHwg
Tk9ERV9OQU1FX1NFVCB8IExPQ0FMX05BTUVfU0VUIHwgTk9ERV9WQUxVRV9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX0lEX1NFVD4mIHNldE5vZGVJZChp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Tk9ERV9JRF9TRVQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Tk9ERV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTk9ERV9UWVBFX1NFVD4mIHNldE5vZGVUeXBlKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX1RZUEVfU0VUKSwgcHJvcGVydHlf
bm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJu
b2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX1RZUEVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1l
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9DQUxfTkFNRV9TRVQ+JiBzZXRM
b2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBMT0NBTF9OQU1FX1NFVCksIHByb3BlcnR5X2xvY2FsTmFtZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvY2FsTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0NBTF9OQU1FX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX1ZBTFVFX1NFVD4mIHNldE5v
ZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5PREVfVkFMVUVfU0VUKSwgcHJvcGVydHlfbm9kZVZhbHVlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZVZhbHVlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfVkFMVUVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PE5vZGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Tm9kZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXROb2RlVHlwZSguLi4pCiAgICAgKiAgICAg
LnNldE5vZGVOYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYWxOYW1lKC4uLikKICAgICAqICAg
ICAuc2V0Tm9kZVZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291
bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291
bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4i
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVz
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50ZXJuYWxT
dWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
ImludGVybmFsU3Vic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVyc2lvbihj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygieG1sVmVy
c2lvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0
ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rl
cy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBV
U0VfQ0FQVFVSRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgSVNfQVRUUklCVVRFX1NFVCA9IDEgPDwg
MiwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMywKICAgICAgICBIQU5ETEVSX0JPRFlfU0VU
ID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgVVNFX0NBUFRV
UkVfU0VUIHwgSVNfQVRUUklCVVRFX1NFVCB8IE5PREVfSURfU0VUIHwgSEFORExFUl9CT0RZX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVNFX0NBUFRVUkVfU0VUPiYgc2V0VXNlQ2FwdHVy
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFVTRV9DQVBUVVJFX1NFVCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVU0VfQ0FQVFVSRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfQVRUUklCVVRFX1NFVD4mIHNldElzQXR0cmlidXRl
KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgSVNfQVRUUklCVVRFX1NFVCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0FUVFJJQlVURV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXROb2RlSWQoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVf
SURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhB
TkRMRVJfQk9EWV9TRVQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhBTkRMRVJfQk9EWV9T
RVQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFdmVudExp
c3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJlc3VsdCA9IEV2ZW50
TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5z
ZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUoLi4uKQogICAgICog
ICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9keSguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBFdmVudExpc3Rl
bmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwog
ICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9yLiAqLwovLyBUeXBl
IG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBSX1NFVCA9IDEgPDwgMCwKICAgICAgICBHX1NFVCA9IDEgPDwgMSwKICAgICAgICBC
X1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChSX1NFVCB8IEdfU0VUIHwg
Ql9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSX1NFVD4mIHNl
dFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Ul9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgR19TRVQ+JiBzZXRHKGlu
dCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBH
X1NFVCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEdfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJfU0VUPiYgc2V0QihpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQl9TRVQp
LCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxS
Z2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJnYmE+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAgIC5zZXRCKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJnYmEoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJhdGlvbiBkYXRhIGZv
ciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNzIEhpZ2hsaWdodENv
bmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IDAKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdo
dENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBI
aWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxIaWdo
bGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxIaWdobGlnaHRDb25m
aWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hsaWdo
dENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTaG93
SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInNob3dJbmZv
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1hcmdp
bkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm1h
cmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVzcGFjZSBDU1Mgewov
KiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5pcXVlIHdheS4gKi8K
Y2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUlk
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19G
SUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxl
SWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9T
RVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9w
ZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE9SRElOQUxfU0VUPiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JESU5BTF9TRVQpLCBwcm9wZXJ0eV9vcmRp
bmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigib3JkaW5h
bCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUkRJTkFMX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJZD4gcmVz
dWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4u
LikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUlkKCkpKTsKICAgIH0KfTsKCi8qIFRo
aXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuICovCmNsYXNz
IENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAx
IDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlSWQ+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0
U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5
bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
c3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxF
X1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUkRJ
TkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVydHlfb3JkaW5hbF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxD
U1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBDU1NSdWxl
SWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAg
LnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rp
b24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRSdWxlcyA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBQU0VVRE9fSURfU0VUID0gMSA8PCAwLAogICAgICAgIFJVTEVT
X1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChQU0VVRE9fSURfU0VUIHwg
UlVMRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBQc2V1ZG9JZFJ1bGVzOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUFNFVURPX0lEX1NFVD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQU0VVRE9fSURfU0VUKSwg
cHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQ
U0VVRE9fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJVTEVT
X1NFVD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJVTEVTX1NFVCksIHByb3Bl
cnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJy
dWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSVUxFU19TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UHNldWRvSWRSdWxlcz4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBz
ZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFBzZXVkb0lkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUHNldWRvSWRSdWxlcygpKSk7
CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5
bGUuICovCmNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAg
TUFUQ0hFRF9DU1NfUlVMRVNfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KE1BVENIRURfQ1NTX1JVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRURfQ1NTX1JVTEVTX1NF
VD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRDSEVEX0NT
U19SVUxFU19TRVQpLCBwcm9wZXJ0eV9tYXRjaGVkQ1NTUnVsZXNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVEX0NTU19SVUxFU19TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0
eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBJbmhlcml0
ZWRTdHlsZUVudHJ5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldElubGluZVN0eWxlKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBET00gc3R5
bGUgYXR0cmlidXRlLiAqLwpjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBTVFlMRV9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBD
U1NTdHlsZUF0dHJpYnV0ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5B
TUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlM
RV9TRVQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNUWUxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHls
ZUF0dHJpYnV0ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRy
aWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlQXR0
cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBD
U1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
KiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IENTU1N0eWxlQXR0cmlidXRlKCkpKTsKICAgIH0KfTsKCi8qIENTUyBz
dHlsZXNoZWV0IG1ldGFpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlciA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgU09VUkNFX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAgICBUSVRMRV9TRVQgPSAxIDw8IDIs
CiAgICAgICAgRElTQUJMRURfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KFNUWUxFX1NIRUVUX0lEX1NFVCB8IFNPVVJDRV9VX1JfTF9TRVQgfCBUSVRMRV9TRVQgfCBESVNB
QkxFRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0
SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9VX1JfTF9T
RVQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfVV9SX0xfU0VUKSwgcHJvcGVydHlf
c291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
c291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9V
X1JfTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVElUTEVfU0VU
PiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBESVNBQkxFRF9TRVQ+JiBzZXREaXNhYmxlZChib29sIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERJU0FCTEVE
X1NFVCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPERJU0FCTEVEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVh
ZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0U291cmNlVVJMKC4uLikKICAg
ICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXREaXNhYmxlZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNo
ZWV0SGVhZGVyKCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IGNvbnRlbnRzLiAqLwpj
bGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVF
VF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgUlVMRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXRCb2R5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hF
RVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBSVUxFU19TRVQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UlVMRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9k
eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0Qm9keT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+
IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHls
ZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUg
cmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgLy8gLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnb3JpZ2luJyB3
aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICAvLyBuYW1lc3BhY2UgT3JpZ2luIHsKICAgIC8v
IGNvbnN0IGNoYXIqIGNvbnN0IHVzZXIgPSAidXNlciI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25z
dCB1c2VyX2FnZW50ID0gInVzZXItYWdlbnQiOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgaW5z
cGVjdG9yID0gImluc3BlY3RvciI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCAgPSAiIjsKICAg
IC8vIH0gLy8gbmFtZXNwYWNlIE9yaWdpbgoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19T
RVQgPSAwLAogICAgICAgIFNFTEVDVE9SX1RFWFRfU0VUID0gMSA8PCAwLAogICAgICAgIFNPVVJD
RV9MSU5FX1NFVCA9IDEgPDwgMSwKICAgICAgICBPUklHSU5fU0VUID0gMSA8PCAyLAogICAgICAg
IFNUWUxFX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTRUxFQ1RPUl9U
RVhUX1NFVCB8IFNPVVJDRV9MSU5FX1NFVCB8IE9SSUdJTl9TRVQgfCBTVFlMRV9TRVQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NS
dWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
T19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1J1
bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRUxFQ1RPUl9URVhUX1NF
VD4mIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTEVDVE9SX1RFWFRfU0VUKSwgcHJvcGVy
dHlfc2VsZWN0b3JUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic2VsZWN0b3JUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNFTEVDVE9SX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNPVVJDRV9MSU5FX1NFVD4mIHNldFNvdXJjZUxpbmUoaW50IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNPVVJDRV9MSU5FX1NFVCksIHByb3Bl
cnR5X3NvdXJjZUxpbmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNP
VVJDRV9MSU5FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUklH
SU5fU0VUPiYgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JJR0lOX1NFVCksIHByb3BlcnR5X29yaWdp
bl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUklHSU5fU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NFVD4mIHNldFN0eWxlKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU1RZTEVfU0VUKSwgcHJvcGVydHlfc3R5bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTVFlMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8Q1NTUnVsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NSdWxlPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NSdWxlPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENT
U1J1bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNlbGVjdG9y
VGV4dCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJjZUxpbmUoLi4uKQogICAgICogICAgIC5zZXRP
cmlnaW4oLi4uKQogICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NSdWxlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldFJ1bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZUlkPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZVVSTChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNl
VVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2VsZWN0b3JSYW5nZSgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic2VsZWN0b3JSYW5n
ZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJtZWRpYSIsIHZhbHVl
KTsKICAgIH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3VyY2UuICovCmNsYXNzIFNv
dXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNUQVJUX1NFVCA9IDEgPDwgMCwKICAg
ICAgICBFTkRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUQVJUX1NF
VCB8IEVORF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VSYW5nZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNUQVJUX1NFVD4mIHNldFN0YXJ0KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFSVF9TRVQpLCBwcm9wZXJ0eV9zdGFy
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0Iiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVJUX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFTkRfU0VUPiYgc2V0RW5kKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFTkRfU0VUKSwg
cHJvcGVydHlfZW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigiZW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVORF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U291cmNlUmFuZ2U+JiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxTb3VyY2VSYW5nZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTb3VyY2VSYW5n
ZT4gcmVzdWx0ID0gU291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0YXJ0KC4u
LikKICAgICAqICAgICAuc2V0RW5kKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4oYWRvcHRSZWYobmV3IFNvdXJjZVJhbmdlKCkpKTsKICAgIH0KfTsKCmNsYXNzIENT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9
IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRT
dHlsZVByb3BlcnR5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9T
RVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZBTFVFX1NF
VCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VkFM
VUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVQcm9wZXJ0eT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVQcm9wZXJ0eT4gcmVzdWx0ID0gQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Ojpj
cmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NT
Q29tcHV0ZWRTdHlsZVByb3BlcnR5KCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSByZXByZXNl
bnRhdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQ1NTX1BS
T1BFUlRJRVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNIT1JUSEFORF9FTlRSSUVTX1NFVCA9IDEg
PDwgMSwKICAgICAgICBXSURUSF9TRVQgPSAxIDw8IDIsCiAgICAgICAgSEVJR0hUX1NFVCA9IDEg
PDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChDU1NfUFJPUEVSVElFU19TRVQgfCBTSE9S
VEhBTkRfRU5UUklFU19TRVQgfCBXSURUSF9TRVQgfCBIRUlHSFRfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGU+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGU7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDU1NfUFJPUEVSVElFU19TRVQ+JiBz
ZXRDc3NQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENTU19QUk9QRVJUSUVTX1NF
VCksIHByb3BlcnR5X2Nzc1Byb3BlcnRpZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q1NTX1BST1BFUlRJRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNIT1JUSEFORF9FTlRSSUVTX1NFVD4mIHNldFNob3J0aGFuZEVudHJpZXMo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0hPUlRIQU5EX0VOVFJJRVNfU0VUKSwgcHJvcGVydHlf
c2hvcnRoYW5kRW50cmllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRB
cnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTSE9SVEhBTkRfRU5UUklFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgV0lEVEhfU0VUPiYgc2V0V2lkdGgoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBXSURUSF9TRVQpLCBwcm9w
ZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
IndpZHRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdJRFRIX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIRUlHSFRfU0VUPiYgc2V0SGVp
Z2h0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSEVJR0hUX1NFVCksIHByb3BlcnR5X2hlaWdodF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUlHSFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHls
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGU+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAgICAqICAgICAuc2V0U2hvcnRoYW5kRW50
cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRoKC4uLikKICAgICAqICAgICAuc2V0SGVpZ2h0
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3
IENTU1N0eWxlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0eWxlSWQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic3R5bGVJZCIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoImNzc1RleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgZWZmZWN0aXZlIHZp
c3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zmc2V0cy4gKi8KY2xhc3MgQ1NTUHJvcGVydHkg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gLy8gTmFtZWQgYWZ0ZXIg
cHJvcGVydHkgbmFtZSAnc3RhdHVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1Byb3BlcnR5LgogICAg
Ly8gbmFtZXNwYWNlIFN0YXR1cyB7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBhY3RpdmUgPSAi
YWN0aXZlIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGluYWN0aXZlID0gImluYWN0aXZlIjsK
ICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGRpc2FibGVkID0gImRpc2FibGVkIjsKICAgIC8vIGNv
bnN0IGNoYXIqIGNvbnN0IHN0eWxlID0gInN0eWxlIjsKICAgIC8vIH0gLy8gbmFtZXNwYWNlIFN0
YXR1cwoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIFZBTFVFX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1Byb3BlcnR5PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxV
RV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1Byb3BlcnR5PiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9
IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgQ1NTUHJvcGVydHkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInByaW9y
aXR5IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW1wbGljaXQoYm9vbCB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJzZWRPayhib29s
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRTaG9ydGhhbmROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmFu
Z2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3Qo
InJhbmdlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIG1lZGlhIHF1ZXJ5IGRlc2NyaXB0b3Iu
ICovCmNsYXNzIENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGlu
ZyBDU1NNZWRpYS4KICAgIC8vIG5hbWVzcGFjZSBTb3VyY2UgewogICAgLy8gY29uc3QgY2hhciog
Y29uc3QgbWVkaWFSdWxlID0gIm1lZGlhUnVsZSI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBp
bXBvcnRSdWxlID0gImltcG9ydFJ1bGUiOwogICAgLy8gY29uc3QgY2hhciogY29uc3Qgc3R5bGVz
aGVldCA9ICJzdHlsZXNoZWV0IjsKICAgIC8vIH0gLy8gbmFtZXNwYWNlIFNvdXJjZQoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRFWFRfU0VUID0gMSA8PCAw
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRFWFRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTTWVkaWE+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTTWVkaWE7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBURVhUX1NFVD4mIHNldFRleHQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBURVhUX1NFVCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU01l
ZGlhPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVk
aWE+IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU01l
ZGlhKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3Vy
Y2VMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxp
bmUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8K
Y2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNU
T1JfU0VUID0gMSA8PCAwLAogICAgICAgIFRJTUVfU0VUID0gMSA8PCAxLAogICAgICAgIEhJVF9D
T1VOVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgTUFUQ0hfQ09VTlRfU0VUID0gMSA8PCAzLAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKFNFTEVDVE9SX1NFVCB8IFRJTUVfU0VUIHwgSElUX0NPVU5U
X1NFVCB8IE1BVENIX0NPVU5UX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VMRUNUT1JfU0VUPiYgc2V0
U2VsZWN0b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTRUxFQ1RPUl9TRVQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTEVDVE9SX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUSU1FX1NFVD4mIHNldFRpbWUoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRJTUVf
U0VUKSwgcHJvcGVydHlfdGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VElN
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSElUX0NPVU5UX1NF
VD4mIHNldEhpdENvdW50KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBISVRfQ09VTlRfU0VUKSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxISVRfQ09VTlRfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIX0NPVU5UX1NFVD4mIHNldE1hdGNoQ291
bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE1BVENIX0NPVU5UX1NFVCksIHByb3BlcnR5X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BVENIX0NPVU5UX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiByZXN1bHQgPSBTZWxlY3RvclByb2Zp
bGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3IoLi4uKQogICAgICogICAg
IC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0Q291bnQoLi4uKQogICAgICogICAgIC5z
ZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNl
bGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUT1RBTF9USU1FX1NFVCA9IDEg
PDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChUT1RBTF9USU1FX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRPVEFMX1RJTUVfU0VUPiYgc2V0VG90
YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUT1RBTF9USU1FX1NFVCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUT1RBTF9USU1FX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgREFUQV9TRVQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPERBVEFfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFNlbGVjdG9yUHJvZmlsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVj
dG9yUHJvZmlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0
b3JQcm9maWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0g
U2VsZWN0b3JQcm9maWxlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQog
ICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENT
UwoKbmFtZXNwYWNlIFRpbWVsaW5lIHsKLyogVGltZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9y
bWF0aW9uIGFib3V0IHRoZSByZWNvcmRlZCBhY3Rpdml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRB
X1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFf
U0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8VGltZWxpbmVFdmVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBUaW1lbGluZUV2ZW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90
eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIERBVEFfU0VUKSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8VGltZWxpbmVFdmVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1l
bGluZUV2ZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGlu
ZUV2ZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVs
aW5lRXZlbnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5z
ZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IFRpbWVsaW5lRXZlbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJy
YXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50
IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBz
Y3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZy
YW1lIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRp
b24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBTQ1JJUFRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9
IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTQ1JJUFRfSURfU0VUIHwgTElORV9O
VU1CRVJfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgTG9jYXRpb247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTQ1JJUFRfSURfU0VUPiYgc2V0U2NyaXB0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTQ1JJUFRfSURfU0VUKSwg
cHJvcGVydHlfc2NyaXB0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzY3JpcHRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
Q1JJUFRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVf
TlVNQkVSX1NFVD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xp
bmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJs
aW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVN
QkVSX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExvY2F0aW9uPiBy
ZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQog
ICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4oYWRvcHRSZWYobmV3IExvY2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNl
dENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJj
b2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUu
IEFycmF5IG9mIGNhbGwgZnJhbWVzIGZvcm0gdGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxG
cmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBDQUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQg
PSAxIDw8IDIsCiAgICAgICAgU0NPUEVfQ0hBSU5fU0VUID0gMSA8PCAzLAogICAgICAgIFRISVNf
U0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VU
IHwgRlVOQ1RJT05fTkFNRV9TRVQgfCBMT0NBVElPTl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBU
SElTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDQUxMX0ZSQU1FX0lEX1NFVD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ0FMTF9GUkFN
RV9JRF9TRVQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPENBTExfRlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEZVTkNUSU9OX05BTUVfU0VUPiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlVOQ1RJT05fTkFNRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9DQVRJT05fU0VUPiYgc2V0TG9jYXRp
b24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIExPQ0FUSU9OX1NFVCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TE9DQVRJT05fU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNDT1BFX0NIQUlOX1NFVD4mIHNldFNjb3BlQ2hh
aW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2Nv
cGVDaGFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2Nv
cGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJ
Tl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBz
ZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1l
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENh
bGxGcmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1l
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRDYWxsRnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0
aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0
U2NvcGVDaGFpbiguLi4pCiAgICAgKiAgICAgLnNldFRoaXMoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0K
fTsKCi8qIFNjb3BlIGRlc2NyaXB0aW9uLiAqLwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0
eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgogICAgLy8gbmFtZXNwYWNlIFR5cGUgewogICAg
Ly8gY29uc3QgY2hhciogY29uc3QgZ2xvYmFsID0gImdsb2JhbCI7CiAgICAvLyBjb25zdCBjaGFy
KiBjb25zdCBsb2NhbCA9ICJsb2NhbCI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCB3aXRoID0g
IndpdGgiOwogICAgLy8gY29uc3QgY2hhciogY29uc3QgY2xvc3VyZSA9ICJjbG9zdXJlIjsKICAg
IC8vIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGNoID0gImNhdGNoIjsKICAgIC8vIH0gLy8gbmFtZXNw
YWNlIFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBU
WVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBPQkpFQ1RfU0VUID0gMSA8PCAxLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgT0JKRUNUX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNjb3BlPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQ
RV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
WVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPQkpFQ1RfU0VU
PiYgc2V0T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1RfU0VUKSwgcHJvcGVydHlfb2Jq
ZWN0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgib2JqZWN0
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9CSkVDVF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPFNjb3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTY29wZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2NvcGUoKSkpOwogICAg
fQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBET01EZWJ1Z2dlciB7
Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCm5hbWVzcGFjZSBET01CcmVha3BvaW50VHlwZSB7
CmNvbnN0IGNoYXIqIGNvbnN0IHN1YnRyZWVfbW9kaWZpZWQgPSAic3VidHJlZS1tb2RpZmllZCI7
CmNvbnN0IGNoYXIqIGNvbnN0IGF0dHJpYnV0ZV9tb2RpZmllZCA9ICJhdHRyaWJ1dGUtbW9kaWZp
ZWQiOwpjb25zdCBjaGFyKiBjb25zdCBub2RlX3JlbW92ZWQgPSAibm9kZS1yZW1vdmVkIjsKfSAv
LyBuYW1lc3BhY2UgRE9NQnJlYWtwb2ludFR5cGUKCn0gLy8gRE9NRGVidWdnZXIKCiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQpuYW1lc3BhY2UgUHJvZmlsZXIgewp9IC8vIFByb2ZpbGVyCgojZW5kaWYgLy8gRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgoKI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCgpjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CnB1YmxpYzoK
ICAgIEluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOwoKCiAgICBj
bGFzcyBJbnNwZWN0b3IgewogICAgcHVibGljOgogICAgICAgIEluc3BlY3RvcihJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQg
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5nJiBz
Y3JpcHQpOwogICAgICAgIHZvaWQgaW5zcGVjdCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHMpOwogICAgICAgIHZvaWQgZGlkQ3Jl
YXRlV29ya2VyKGludCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWQpOwogICAg
ICAgIHZvaWQgZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBJbnNwZWN0b3IqIGluc3BlY3Rvcigp
IHsgcmV0dXJuICZtX2luc3BlY3RvcjsgfQoKICAgIGNsYXNzIE1lbW9yeSB7CiAgICBwdWJsaWM6
CiAgICAgICAgTWVtb3J5KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgp
IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
CiAgICB9OwoKICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gJm1fbWVtb3J5OyB9CgogICAg
Y2xhc3MgUGFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgUGFnZShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9tQ29udGVu
dEV2ZW50RmlyZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkRXZlbnRGaXJl
ZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGZyYW1lKTsKICAgICAgICB2b2lkIGZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFt
ZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgUGFnZSogcGFnZSgpIHsgcmV0dXJuICZtX3BhZ2U7IH0KCiAgICBjbGFzcyBSdW50aW1l
IHsKICAgIHB1YmxpYzoKICAgICAgICBSdW50aW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFJ1bnRpbWUqIHJ1bnRpbWUoKSB7IHJldHVybiAm
bV9ydW50aW1lOyB9CgogICAgY2xhc3MgQ29uc29sZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQ29u
c29sZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgbWVzc2FnZUFkZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29u
c29sZTo6Q29uc29sZU1lc3NhZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpOwogICAgICAgIHZvaWQgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZChpbnQgY291bnQpOwog
ICAgICAgIHZvaWQgbWVzc2FnZXNDbGVhcmVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENvbnNvbGUqIGNvbnNvbGUoKSB7IHJldHVy
biAmbV9jb25zb2xlOyB9CgogICAgY2xhc3MgTmV0d29yayB7CiAgICBwdWJsaWM6CiAgICAgICAg
TmV0d29yayhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgcmVxdWVzdFdpbGxCZVNlbnQoY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3Qg
U3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0LCBkb3VibGUgdGlt
ZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKTsK
ICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQpOwogICAgICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBkb3VibGUg
dGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIHR5cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNl
KTsKICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAg
ICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJs
ZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0
IGJvb2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVt
b3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91Ymxl
IHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzb3VyY2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hh
a2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRp
bWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNw
b25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZv
aWQgd2ViU29ja2V0Q3JlYXRlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiB1cmwpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTmV0d29yayogbmV0d29yaygpIHsgcmV0dXJuICZtX25l
dHdvcms7IH0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRGF0YWJhc2Ugewog
ICAgcHVibGljOgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFzZSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25TdWNjZWVk
ZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5h
bWVzLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMpOwogICAgICAgIHZvaWQgc3Fs
VHJhbnNhY3Rpb25GYWlsZWQoaW50IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBzcWxFcnJvcik7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuICZtX2RhdGFi
YXNlOyB9CgojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIGNsYXNzIERPTVN0b3Jh
Z2UgewogICAgcHVibGljOgogICAgICAgIERPTVN0b3JhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERPTVN0b3Jh
Z2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQgdXBk
YXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgpIHsg
cmV0dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsKICAg
IHB1YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNh
Y2hlU3RhdHVzVXBkYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbWFu
aWZlc3RVUkwsIGludCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29ya1N0YXRlVXBkYXRlZChi
b29sIGlzTm93T25saW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25jYWNoZSgpIHsg
cmV0dXJuICZtX2FwcGxpY2F0aW9uY2FjaGU7IH0KCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAg
ICBjbGFzcyBGaWxlU3lzdGVtIHsKICAgIHB1YmxpYzoKICAgICAgICBGaWxlU3lzdGVtKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEZpbGVTeXN0
ZW0qIGZpbGVzeXN0ZW0oKSB7IHJldHVybiAmbV9maWxlc3lzdGVtOyB9CgojZW5kaWYgLy8gRU5B
QkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRE9NIHsKICAgIHB1YmxpYzoKICAgICAgICBET00o
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIGRvY3VtZW50VXBkYXRlZCgpOwogICAgICAgIHZvaWQgc2V0Q2hpbGROb2Rlcyhp
bnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsKICAgICAgICB2
b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVSZW1vdmVkKGludCBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUludmFsaWRh
dGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpOwogICAgICAgIHZvaWQgY2hh
cmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyRGF0
YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQoaW50IG5vZGVJZCwgaW50IGNo
aWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnRO
b2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006
Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG5vZGUpOwogICAgICAgIHZvaWQg
Y2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgbm9kZUlkKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NKiBkb20o
KSB7IHJldHVybiAmbV9kb207IH0KCiAgICBjbGFzcyBDU1MgewogICAgcHVibGljOgogICAgICAg
IENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKICAgICAgICB2b2lkIHNl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
Z2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ1NTKiBjc3MoKSB7IHJl
dHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAgICBwdWJsaWM6CiAgICAgICAg
VGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVjb3JkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5lKCkgeyByZXR1cm4gJm1fdGltZWxpbmU7IH0KCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERlYnVnZ2VyIHsKICAgIHB1
YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZ2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwog
ICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBp
bnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgc291cmNlTWFwVVJMKTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFyc2UoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5l
LCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgICAgdm9p
ZCBicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAvLyAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFt
ZSAncmVhc29uJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNlZC4KICAgIC8vIG5hbWVzcGFj
ZSBSZWFzb24gewogICAgLy8gY29uc3QgY2hhciogY29uc3QgeGhyID0gIlhIUiI7CiAgICAvLyBj
b25zdCBjaGFyKiBjb25zdCBkb20gPSAiRE9NIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGV2
ZW50TGlzdGVuZXIgPSAiRXZlbnRMaXN0ZW5lciI7CiAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBl
eGNlcHRpb24gPSAiZXhjZXB0aW9uIjsKICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG90aGVyID0g
Im90aGVyIjsKICAgIC8vIH0gLy8gbmFtZXNwYWNlIFJlYXNvbgoKICAgICAgICB2b2lkIHBhdXNl
ZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIHJl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAgIHZvaWQgcmVz
dW1lZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQoKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9N
RGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdnZXI7
IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAgICAg
IFByb2ZpbGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyB9CiAgICAgICAgdm9pZCBhZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoZWFkZXIpOwogICAgICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1bmsoaW50IHVp
ZCwgY29uc3QgU3RyaW5nJiBjaHVuayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFwU25hcHNob3Qo
aW50IHVpZCk7CiAgICAgICAgdm9pZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxp
bmcpOwogICAgICAgIHZvaWQgcmVzZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQgcmVwb3J0SGVh
cFNuYXBzaG90UHJvZ3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVyKiBwcm9maWxl
cigpIHsgcmV0dXJuICZtX3Byb2ZpbGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7CiAgICBwdWJs
aWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2b2lk
IHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtlciog
d29ya2VyKCkgeyByZXR1cm4gJm1fd29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
Cgpwcml2YXRlOgogICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIEluc3BlY3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9yeSBtX21lbW9y
eTsKICAgIFBhZ2UgbV9wYWdlOwogICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBDb25zb2xlIG1f
Y29uc29sZTsKICAgIE5ldHdvcmsgbV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
ICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQog
ICAgRE9NU3RvcmFnZSBtX2RvbXN0b3JhZ2U7CiAgICBBcHBsaWNhdGlvbkNhY2hlIG1fYXBwbGlj
YXRpb25jYWNoZTsKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIEZpbGVTeXN0ZW0gbV9maWxl
c3lzdGVtOwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRE9NIG1fZG9tOwogICAg
Q1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90aW1lbGluZTsKI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogICAgRGVidWdnZXIgbV9kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBET01E
ZWJ1Z2dlciBtX2RvbWRlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIFByb2ZpbGVyIG1fcHJvZmls
ZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShXT1JL
RVJTKQogICAgV29ya2VyIG1fd29ya2VyOwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCn07Cgp9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVu
ZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120600</attachid>
            <date>2011-12-27 10:04:28 -0800</date>
            <delta_ts>2011-12-27 10:04:28 -0800</delta_ts>
            <desc>InspectorFrontend.cpp base version</desc>
            <filename>InspectorFrontend.base.cpp</filename>
            <type>text/plain</type>
            <size>38606</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVt
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
ICAgICwgbV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJJbnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpJbnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBpbnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNw
ZWN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIklu
c3BlY3Rvci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwg
dXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7
CiAgICBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3Jr
ZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
c3BlY3Rvcjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNw
ZWN0b3IuZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGlt
ZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50
RmlyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZp
cmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFt
cCIsIHRpbWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0
YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBs
b2FkRXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFt
ZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZnJhbWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5h
dmlnYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFt
ZSIsIGZyYW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OlBhZ2U6OmZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZURldGFjaGVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBmcmFtZURldGFjaGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiUGFnZS5mcmFtZURldGFjaGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIGZyYW1lRGV0YWNoZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChmcmFtZURldGFjaGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpDb25zb2xlOjptZXNzYWdlQWRkZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZUFkZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdl
QWRkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3NhZ2VBZGRlZCIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJtZXNzYWdlIiwgbWVz
c2FnZSk7CiAgICBtZXNzYWdlQWRkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlQWRk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNv
bnNvbGU6Om1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImNvdW50IiwgY291
bnQpOwogICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNvbnNvbGU6Om1lc3NhZ2VzQ2xlYXJlZCgpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2FnZXNDbGVhcmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlc0NsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFdpbGxCZVNlbnQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWRpcmVjdFJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2ls
bEJlU2VudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdp
bGxCZVNlbnRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxs
QmVTZW50Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVl
c3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVy
SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRV
UkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3Rh
Y2tUcmFjZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3Rh
Y2tUcmFjZSk7CiAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVkaXJlY3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVx
dWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29y
azo6cmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZSIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCBy
ZXF1ZXN0SWQpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2Fk
ZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VSZWNl
aXZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VSZWNl
aXZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVzcG9uc2VSZWNlaXZl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQi
LCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFt
ZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiLCB0eXBlKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpkYXRhUmVjZWl2ZWQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBp
bnQgZW5jb2RlZERhdGFMZW5ndGgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFS
ZWNlaXZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YVJlY2Vp
dmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5kYXRhUmVjZWl2ZWQiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVx
dWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3Rh
bXApOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImRhdGFMZW5ndGgiLCBkYXRhTGVuZ3Ro
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGVuY29k
ZWREYXRhTGVuZ3RoKTsKICAgIGRhdGFSZWNlaXZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
IiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRh
dGFSZWNlaXZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6TmV0d29yazo6bG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBk
b3VibGUgdGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmlu
aXNoZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5p
c2hlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIs
IHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGlt
ZXN0YW1wKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRp
bmdGaW5pc2hlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6TmV0d29yazo6bG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0
IGNhbmNlbGVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmFpbGVkTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBsb2FkaW5nRmFpbGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5sb2FkaW5nRmFpbGVkIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvclRleHQiLCBlcnJvclRleHQpOwogICAgaWYg
KGNhbmNlbGVkKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiY2FuY2VsZWQiLCAq
Y2FuY2VsZWQpOwogICAgbG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwg
cGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRp
bmdGYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Ok5ldHdvcms6OnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwg
Y29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNo
ZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tTWVt
b3J5Q2FjaGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RTZXJ2
ZWRGcm9tTWVtb3J5Q2FjaGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJmcmFtZUlkIiwgZnJhbWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibG9hZGVy
SWQiLCBsb2FkZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZG9jdW1lbnRVUkwi
LCBkb2N1bWVudFVSTCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwg
dGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJpbml0aWF0b3IiLCBpbml0
aWF0b3IpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlc291cmNlIiwgcmVzb3VyY2Up
OwogICAgcmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0K
CnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldFdpbGxTZW5kSGFuZHNo
YWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0V2lsbFNlbmRIYW5k
c2hha2VSZXF1ZXN0Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGlt
ZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXF1ZXN0
IiwgcmVxdWVzdCk7CiAgICB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6Ondl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2Vi
U29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJl
Y2VpdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0
d29yay53ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHdlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgd2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdv
cmsud2ViU29ja2V0Q3JlYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInVybCIsIHVybCk7CiAgICB3ZWJTb2NrZXRDcmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJw
YXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQod2ViU29ja2V0Q3JlYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6TmV0d29yazo6d2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBkb3VibGUgdGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3
ZWJTb2NrZXRDbG9zZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdl
YlNvY2tldENsb3NlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29j
a2V0Q2xvc2VkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJl
cXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0
YW1wIiwgdGltZXN0YW1wKTsKICAgIHdlYlNvY2tldENsb3NlZE1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHdlYlNvY2tldENsb3NlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6YWRkRGF0
YWJhc2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhZGREYXRhYmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgYWRkRGF0YWJhc2VNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5hZGRE
YXRhYmFzZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRh
YmFzZSIsIGRhdGFiYXNlKTsKICAgIGFkZERhdGFiYXNlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YWRkRGF0YWJhc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRhdGFiYXNlOjpzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJh
bnNhY3Rpb25TdWNjZWVkZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0
YWJhc2Uuc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiLCBjb2x1bW5OYW1lcyk7CiAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KCJ2YWx1ZXMiLCB2YWx1ZXMpOwogICAgc3FsVHJhbnNhY3Rpb25T
dWNjZWVkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0YWJh
c2U6OnNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNx
bFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBzcWxUcmFuc2FjdGlvbkZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFi
YXNlLnNxbFRyYW5zYWN0aW9uRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXROdW1iZXIoInRyYW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciIsIHNxbEVycm9yKTsKICAgIHNxbFRyYW5zYWN0aW9u
RmFpbGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFnZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc3RvcmFnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YWRkRE9NU3RvcmFnZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRk
RE9NU3RvcmFnZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2UuYWRkRE9N
U3RvcmFnZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzdG9y
YWdlIiwgc3RvcmFnZSk7CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
YWRkRE9NU3RvcmFnZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6RE9NU3RvcmFnZTo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB1cGRhdGVET01TdG9yYWdlTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiLCAiRE9NU3RvcmFnZS51cGRhdGVET01TdG9yYWdlIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJZCk7CiAg
ICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRE9NU3RvcmFn
ZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBw
bGljYXRpb25DYWNoZTo6YXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1
c1VwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLmFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJtYW5pZmVzdFVSTCIsIG1hbmlmZXN0VVJMKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJzdGF0dXMiLCBzdGF0dXMpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGlj
YXRpb25DYWNoZTo6bmV0d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiQXBwbGljYXRpb25DYWNoZS5uZXR3b3JrU3RhdGVVcGRhdGVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc05vd09ubGluZSIs
IGlzTm93T25saW5lKTsKICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCnZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6ZG9jdW1lbnRVcGRhdGVkKCkKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZG9jdW1lbnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBkb2N1bWVudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJET00uZG9jdW1lbnRVcGRhdGVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChkb2N1bWVudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRPTTo6c2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBz
ZXRDaGlsZE5vZGVzTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRD
aGlsZE5vZGVzTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBw
YXJlbnRJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAg
IHNldENoaWxkTm9kZXNNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJp
YnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVk
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgYXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRy
aWJ1dGVSZW1vdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
Im5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5h
bWUpOwogICAgYXR0cmlidXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFy
YW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0
ZVJlbW92ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRPTTo6aW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBub2RlSWRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbmxpbmVTdHlsZUludmFs
aWRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbmxpbmVTdHls
ZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmlubGluZVN0eWxl
SW52YWxpZGF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJu
b2RlSWRzIiwgbm9kZUlkcyk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoaW5saW5lU3R5bGVJbnZhbGlkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQo
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIkRPTS5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJjaGFyYWN0ZXJEYXRhIiwgY2hhcmFjdGVyRGF0YSk7CiAgICBjaGFy
YWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGFyYWN0ZXJEYXRhTW9k
aWZpZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6Y2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3Vu
dCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlQ291bnRVcGRhdGVkTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0
ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlQ291bnRVcGRhdGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5v
ZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCBjaGls
ZE5vZGVDb3VudCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6Y2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5v
ZGVJZCwgaW50IHByZXZpb3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSkKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiRE9NLmNoaWxkTm9kZUluc2VydGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoInBhcmVudE5vZGVJZCIsIHBhcmVudE5vZGVJZCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigicHJldmlvdXNOb2RlSWQiLCBwcmV2aW91c05vZGVJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldE9iamVjdCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVSZW1v
dmVkKGludCBwYXJlbnROb2RlSWQsIGludCBub2RlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGNoaWxkTm9kZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00u
Y2hpbGROb2RlUmVtb3ZlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKCJwYXJlbnROb2RlSWQiLCBwYXJlbnROb2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY2hpbGROb2RlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Q1NTOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdl
ZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkNTUy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdl
ZCIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVkaWFRdWVyeVJlc3Vs
dENoYW5nZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OlRpbWVsaW5lOjpldmVudFJlY29yZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGlt
ZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29y
ZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXZlbnRSZWNvcmRlZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIlRpbWVsaW5lLmV2ZW50UmVjb3JkZWQiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgicmVjb3JkIiwgcmVjb3JkKTsKICAgIGV2ZW50UmVj
b3JkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAo
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudFJlY29yZGVkTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5nbG9iYWxPYmplY3RDbGVhcmVkIik7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChnbG9iYWxPYmplY3RDbGVhcmVkTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6c2NyaXB0
UGFyc2VkKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25z
dCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJM
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQYXJzZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElkKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
InN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3Rh
cnRDb2x1bW4iLCBzdGFydENvbHVtbik7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZW5k
TGluZSIsIGVuZExpbmUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuZENvbHVtbiIs
IGVuZENvbHVtbik7CiAgICBpZiAoaXNDb250ZW50U2NyaXB0KQogICAgICAgIHBhcmFtc09iamVj
dC0+c2V0Qm9vbGVhbigiaXNDb250ZW50U2NyaXB0IiwgKmlzQ29udGVudFNjcmlwdCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygic291cmNlTWFwVVJMIiwgc291cmNlTWFwVVJMKTsKICAg
IHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdFBhcnNlZE1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnNj
cmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0
U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0RmFpbGVkVG9QYXJz
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0RmFpbGVkVG9Q
YXJzZU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdEZhaWxlZFRv
UGFyc2UiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwg
dXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBzY3JpcHRT
b3VyY2UpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGlu
ZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5lIiwgZXJyb3JMaW5lKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlcnJvck1lc3NhZ2UiLCBlcnJvck1lc3NhZ2Up
OwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFy
YW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdEZh
aWxlZFRvUGFyc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRlYnVnZ2VyOjpicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbikKewogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnJlYWtwb2ludFJlc29sdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBicmVha3BvaW50UmVzb2x2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIs
ICJEZWJ1Z2dlci5icmVha3BvaW50UmVzb2x2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygiYnJlYWtwb2ludElkIiwgYnJlYWtwb2ludElkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJsb2NhdGlvbiIsIGxvY2F0aW9uKTsKICAgIGJyZWFrcG9pbnRS
ZXNvbHZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnBh
dXNlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcm
IHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhdXNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGF1c2VkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGVidWdnZXIucGF1c2Vk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY2FsbEZyYW1lcyIs
IGNhbGxGcmFtZXMpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlYXNvbiIsIHJlYXNv
bik7CiAgICBpZiAoZGF0YSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgiZGF0YSIs
IGRhdGEpOwogICAgcGF1c2VkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocGF1c2VkTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6cmVz
dW1lZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VtZWRNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3VtZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCIsICJEZWJ1Z2dlci5yZXN1bWVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXN1bWVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5kaWYgLy8gRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgojaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6YWRkUHJv
ZmlsZUhlYWRlcihQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhZGRQcm9maWxlSGVhZGVyTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBhZGRQcm9maWxlSGVhZGVyTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIuYWRkUHJvZmlsZUhlYWRlciIpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJoZWFkZXIiLCBoZWFkZXIpOwogICAgYWRkUHJvZmlsZUhl
YWRlck1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjphZGRIZWFw
U25hcHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcmIGNodW5rKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBhZGRIZWFwU25hcHNob3RDaHVua01lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkSGVhcFNuYXBzaG90Q2h1bmtNZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCIsICJQcm9maWxlci5hZGRIZWFwU25hcHNob3RDaHVuayIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ1aWQiLCB1aWQpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoImNodW5rIiwgY2h1bmspOwogICAgYWRkSGVhcFNuYXBzaG90Q2h1bmtN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChhZGRIZWFwU25hcHNob3RDaHVua01lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OmZpbmlzaEhl
YXBTbmFwc2hvdChpbnQgdWlkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmaW5pc2hI
ZWFwU25hcHNob3RNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGZpbmlz
aEhlYXBTbmFwc2hvdE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLmZpbmlz
aEhlYXBTbmFwc2hvdCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVy
KCJ1aWQiLCB1aWQpOwogICAgZmluaXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+c2V0T2JqZWN0KCJw
YXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQoZmluaXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6c2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJv
ZmlsaW5nKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRSZWNvcmRpbmdQcm9maWxl
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRSZWNvcmRpbmdQcm9m
aWxlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIuc2V0UmVjb3JkaW5nUHJv
ZmlsZSIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNQcm9m
aWxpbmciLCBpc1Byb2ZpbGluZyk7CiAgICBzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoc2V0UmVjb3JkaW5nUHJvZmlsZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OnJlc2V0UHJvZmlsZXMoKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNldFByb2ZpbGVzTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNldFByb2ZpbGVzTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIucmVzZXRQcm9maWxlcyIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzZXRQcm9maWxlc01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OnJlcG9ydEhlYXBTbmFwc2hvdFByb2dy
ZXNzKGludCBkb25lLCBpbnQgdG90YWwpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
cG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzc01lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIiwgIlByb2ZpbGVyLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImRvbmUiLCBkb25lKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0TnVtYmVyKCJ0b3RhbCIsIHRvdGFsKTsKICAgIHJlcG9ydEhlYXBTbmFwc2hvdFBy
b2dyZXNzTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiNpZiBFTkFCTEUoV09SS0VSUykKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oldv
cmtlcjo6d29ya2VyQ3JlYXRlZChpbnQgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29s
IGluc3BlY3RvckNvbm5lY3RlZCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd29ya2Vy
Q3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd29ya2VyQ3Jl
YXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci53b3JrZXJDcmVhdGVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIndvcmtlcklkIiwgd29y
a2VySWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldEJvb2xlYW4oImluc3BlY3RvckNvbm5lY3RlZCIsIGluc3BlY3RvckNvbm5l
Y3RlZCk7CiAgICB3b3JrZXJDcmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJh
bXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod29ya2VyQ3Jl
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
V29ya2VyOjp3b3JrZXJUZXJtaW5hdGVkKGludCB3b3JrZXJJZCkKewogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gd29ya2VyVGVybWluYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgd29ya2VyVGVybWluYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwg
Ildvcmtlci53b3JrZXJUZXJtaW5hdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXROdW1iZXIoIndvcmtlcklkIiwgd29ya2VySWQpOwogICAgd29ya2VyVGVybWluYXRlZE1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdvcmtlclRlcm1pbmF0ZWRNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oldvcmtlcjo6ZGlzcGF0Y2hNZXNzYWdl
RnJvbVdvcmtlcihpbnQgd29ya2VySWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkaXNwYXRjaE1lc3NhZ2VGcm9tV29y
a2VyTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBkaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiV29ya2VyLmRpc3BhdGNo
TWVzc2FnZUZyb21Xb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcigid29ya2VySWQiLCB3b3JrZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
bWVzc2FnZSIsIG1lc3NhZ2UpOwogICAgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlck1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXJNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oldvcmtlcjo6ZGlzY29ubmVjdGVk
RnJvbVdvcmtlcigpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRpc2Nvbm5lY3RlZEZy
b21Xb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRpc2Nvbm5l
Y3RlZEZyb21Xb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3JrZXIuZGlzY29u
bmVjdGVkRnJvbVdvcmtlciIpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQog
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
ZGlzY29ubmVjdGVkRnJvbVdvcmtlck1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQoKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120601</attachid>
            <date>2011-12-27 10:25:27 -0800</date>
            <delta_ts>2011-12-28 08:18:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111227222525.patch</filename>
            <type>text/plain</type>
            <size>17702</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi43Y2YxMmI3ZDgwOTgzYWQ3
NDYxZGU0ZjMwYzAzMmRmOGI3YTExMTM5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsNiArNTEsNyBAQCBET01BSU5f
REVGSU5FX05BTUVfTUFQID0gewogIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSBy
ZXBsYWNlbWVudHMuCiBUWVBFX05BTUVfRklYX01BUCA9IHsKICAgICAiUkdCQSI6ICJSZ2JhIiwg
ICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUg
aW4gV2luZG93cyBDRS4KKyAgICAiIjogIkVtcHR5IiwKIH0KIAogCkBAIC01MTksNiArNTIwLDI4
IEBAIGNsYXNzIFdyaXRlcjoKICAgICAgICAgcmV0dXJuIFdyaXRlcihuZXdfb3V0cHV0LCBzZWxm
LmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQogCiAKK2NsYXNzIEVudW1Db25zdGFudHM6Cisg
ICAgbWFwXyA9IHt9CisgICAgY29uc3RhbnRzXyA9IFtdCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgorICAgICAgICBpZiB2YWx1ZSBpbiBjbHMu
bWFwXzoKKyAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1ZV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKKyAgICAgICAgICAgIGNscy5tYXBfW3Zh
bHVlXSA9IHBvcworICAgICAgICAgICAgY2xzLmNvbnN0YW50c18uYXBwZW5kKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHBvcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9lbnVt
X2NvbnN0YW50X2NvZGUoY2xzKToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZm9yIGl0
ZW0gaW4gY2xzLmNvbnN0YW50c186CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgXCIi
ICsgaXRlbSArICJcIiIpCisgICAgICAgIHJldHVybiBqb2luKG91dHB1dCwgIixcbiIpICsgIlxu
IgorCisKIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNy
ZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5f
bmFtZSwgdHlwZV9kYXRhKToKQEAgLTUyNiw2ICs1NDksNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UK
KyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0
X2RvbWFpbl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAg
ICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NDYsNiArNTcwLDcgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAg
ICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQorICAgICAgICAg
ICAgZnVsbF9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAgLTU3MSwyMyArNTk2LDI4IEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5l
cmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBm
b3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29t
bWVudF9vdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3
cml0ZXIuZ2V0X2luZGVudGVkKCIvLyAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1l
c3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
InN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgZW51bSBFbnVtIHtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5y
ZXBsYWNlKCctJywgJ18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2Vf
dG9fbG93ZXIoaXRlbV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05BTUVf
RklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgICAgICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVjdCAi
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIp
CiAKQEAgLTU5OSw3ICs2MjksMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVO
VCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6
RW51bSIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykiCiAKICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYg
cmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC02MzMsNiArNjY3LDEwIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgI0ZJWE1FOiByZXR1cm4gYSB0eXBlZGVmIG5hbWUgaW5zdGVhZC4K
QEAgLTcxNSwyOCArNzUzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJh
bV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBhcmFt
X3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChw
YXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VU
UFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGlu
ZSgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBl
X29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
X211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyks
IHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygi
JXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9u
YW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChw
YXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFt
ZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVf
YmluZGluZywgInZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9j
b2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmlu
ZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5l
KCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMs
MTMgKzgxMiwxNSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRh
bGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9p
ZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQo
RmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMo
XCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdl
bmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAg
IHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0Lmdl
dF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAg
ICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFy
YW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs4NjYsMTEgQEAg
Y2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAog
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwp
OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3Nf
bmFtZSArICI+IgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIg
KyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsg
Ij4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBA
IC04NDQsNiArODg5LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQ
YXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICs5NDQsMTAgQEAgY2xhc3MgVHlwZUJp
bmRpbmdzOgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAK
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3Zh
bHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKICAgICAgICAgICAgICAgICByZXR1cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsx
MTUyLDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVp
bGRlciB7CiAke2ZvcndhcmRzfQorCitjb25zdCBTdHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKKwogJHt0eXBlQnVpbGRlcnN9CiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgogCkBAIC0xNTQxLDYgKzE1OTcsMTcgQEAgJGNvbnN0cnVjdG9ySW5pdHsKIAogJG1ldGhvZHMK
IAorbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworY29uc3QgU3RyaW5nIGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7CiskZW51bUNvbnN0YW50VmFsdWVzfTsKKworY29uc3QgU3RyaW5nJiBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3Zh
bHVlc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTYz
NSw1OSBAQCBkZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90
eXBlKToKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMg
bWV0aG9kIGdlbmVyYXRlIG1vZGVzIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFy
IHNldHRlcgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFzIG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBw
YXJhbWV0ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhvZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQg
Y29tbWVudGVkIGFubm90YXRpb24gYWJvdXQgZXhwZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBu
YW1lIG9yIGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdoZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBw
YXJhbWV0ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJlbnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RH
ZW5lcmF0ZU1vZGVzOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0
eXBlX2JpbmRpbmcpOgorICAgICAgICBpZiB0eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9k
ZXMgbWV0aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlmZmVyZW50LgorICAgICAgICAgICAgcmV0dXJu
IFtjbHMuU3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xzLlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAjIEluIHJhdyBhbmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2Rl
IGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgIyBPbmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5
cGUgaW4gY29tbWVudHMuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisK
KyAgICBjbGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAg
ICAgIHJldHVybiB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0g
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkK
KyAgICAgICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4g
JSB2YWx1ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlX3JlZgorCisgICAgY2xhc3MgUmF3UGFyYW1ldGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9j
X3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4
dCgpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZV9yZWYKKworICAgIGNsYXNzIENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGlu
Zyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAorICAgICAgICAgICAgICAgIHR5cGVf
YmluZGluZy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2Jp
bmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5k
aW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlm
IHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZy
b250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCkBAIC0xNjkwLDcgKzE4MTAsNyBAQCBjbGFz
cyBHZW5lcmF0b3I6CiAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCiAg
ICAgICAgIGFkX2hvY190eXBlX291dHB1dCA9IFtdCiAgICAgICAgIGZyb250ZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAgICAgICBhZF9o
b2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAgICIpCisgICAg
ICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAg
ICAgICIpCiAgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgogICAgICAgICAg
ICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKICAgICAgICAgICAg
IGZvciBqc29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CkBAIC0xOTUy
LDcgKzIwNzIsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1
YnN0aXR1dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250
ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJh
dG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1ldGhvZHM9am9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBtZXRob2RzPWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBlbnVtQ29uc3Rh
bnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkpKQogCiBiYWNr
ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUs
CiAgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhv
ZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120602</attachid>
            <date>2011-12-27 10:26:43 -0800</date>
            <delta_ts>2011-12-28 08:25:27 -0800</delta_ts>
            <desc>New InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>143883</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKCmNvbnN0IFN0cmluZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOwoKbmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5h
bWUuICovCmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX05BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIENPVU5UX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOT0RFX05BTUVfU0VUIHwgQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBzZXROb2RlTmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09VTlRfU0VUPiYgc2V0Q291bnQoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPVU5UX1NFVCks
IHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09VTlRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3VudD4g
cmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4p
CiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKSk7CiAgICB9Cn07CgpjbGFzcyBET01H
cm91cCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMCwKICAgICAgICBU
SVRMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgTk9ERV9DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoU0laRV9TRVQgfCBUSVRMRV9TRVQgfCBOT0RFX0NPVU5UX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIERPTUdyb3VwOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9T
RVQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRJVExFX1NFVD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VUKSwgcHJvcGVy
dHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRMRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9DT1VOVF9TRVQ+JiBzZXRO
b2RlQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9DT1VOVF9TRVQpLCBwcm9wZXJ0
eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
Im5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0NP
VU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERPTUdyb3VwPiBy
ZXN1bHQgPSBET01Hcm91cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAg
KiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IERPTUdyb3VwKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50VVJJKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJkb2N1bWVudFVSSSIsIHZhbHVlKTsKICAgIH0K
fTsKCn0gLy8gTWVtb3J5CgpuYW1lc3BhY2UgUGFnZSB7Ci8qIFJlc291cmNlIHR5cGUgYXMgaXQg
d2FzIHBlcmNlaXZlZCBieSB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gKi8Kc3RydWN0IFJlc291cmNl
VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIERvY3VtZW50ID0gMCwKICAgICAgICBTdHls
ZXNoZWV0ID0gMSwKICAgICAgICBJbWFnZSA9IDIsCiAgICAgICAgRm9udCA9IDMsCiAgICAgICAg
U2NyaXB0ID0gNCwKICAgICAgICBYSFIgPSA1LAogICAgICAgIFdlYlNvY2tldCA9IDYsCiAgICAg
ICAgT3RoZXIgPSA3LAogICAgfTsKfTsgLy8gc3RydWN0IFJlc291cmNlVHlwZQoKLyogSW5mb3Jt
YXRpb24gYWJvdXQgdGhlIEZyYW1lIG9uIHRoZSBwYWdlLiAqLwpjbGFzcyBGcmFtZSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBJRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgTE9BREVSX0lEX1NFVCA9
IDEgPDwgMSwKICAgICAgICBVUkxfU0VUID0gMSA8PCAyLAogICAgICAgIE1JTUVfVFlQRV9TRVQg
PSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgTE9BREVSX0lEX1NF
VCB8IFVSTF9TRVQgfCBNSU1FX1RZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWU+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5
X2lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExPQURFUl9JRF9TRVQ+JiBzZXRMb2FkZXJJZChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIExPQURFUl9JRF9TRVQpLCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPExPQURFUl9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBw
cm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVfU0VUPiYgc2V0TWlt
ZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVfU0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFt
ZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxG
cmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RnJhbWU+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8RnJhbWU+IHJlc3VsdCA9IEZyYW1lOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRJZCguLi4pCiAgICAgKiAgICAgLnNldExvYWRlcklkKC4uLikKICAgICAqICAgICAuc2V0
VXJsKC4uLikKICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRnJhbWUoKSkpOwogICAgfQoKICAgIHZv
aWQgc2V0UGFyZW50SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInBhcmVudElkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygibmFtZSIsIHZh
bHVlKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkg
YWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiAqLwpjbGFzcyBGcmFtZVJlc291cmNl
VHJlZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJj
ZVRyZWUuCiAgICAvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5LgogICAgY2xhc3MgUmVzb3Vy
Y2VzSXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewogICAgcHVibGljOgogICAgICAgIGVu
dW0gewogICAgICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICAgICAgVVJMX1NFVCA9
IDEgPDwgMCwKICAgICAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgICAgIE1JTUVf
VFlQRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQg
fCBUWVBFX1NFVCB8IE1JTUVfVFlQRV9TRVQpCiAgICAgICAgfTsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgICAgIGNsYXNzIEJ1aWxkZXIgewogICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcHRyKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlc0l0ZW07CiAgICAg
ICAgcHVibGljOgogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0
VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICAgICAgfQog
ICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1
aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlf
dHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBF
X1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTUlNRV9UWVBFX1NFVD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
SU1FX1RZUEVfU0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgICAgIH0KICAg
IAogICAgICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2VzSXRlbT4mICgpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8UmVzb3VyY2VzSXRlbT4qPigmbV9yZXN1bHQpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+ICgpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4o
KnRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLyoKICAgICAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICogUmVmUHRyPFJlc291cmNlc0l0ZW0+IHJl
c3VsdCA9IFJlc291cmNlc0l0ZW06OmNyZWF0ZSgpCiAgICAgICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgICAgICogICAgIC5zZXRNaW1lVHlw
ZSguLi4pOwogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
IGNyZWF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgUmVzb3VyY2VzSXRlbSgpKSk7CiAgICAgICAgfQogICAgfTsKCiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFNRV9TRVQgPSAx
IDw8IDAsCiAgICAgICAgUkVTT1VSQ0VTX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChGUkFNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWVSZXNvdXJj
ZVRyZWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9TRVQ+JiBz
ZXRGcmFtZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBGUkFNRV9TRVQpLCBwcm9wZXJ0eV9mcmFtZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImZyYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxGcmFtZVJlc291cmNlVHJlZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3VsdCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRGcmFtZSguLi4pCiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBGcmFtZVJl
c291cmNlVHJlZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZEZyYW1lcyhQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hp
bGRGcmFtZXMiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTZWFyY2ggbWF0Y2ggZm9yIHJlc291cmNl
LiAqLwpjbGFzcyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBMSU5FX05VTUJF
Ul9TRVQgPSAxIDw8IDAsCiAgICAgICAgTElORV9DT05URU5UX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChMSU5FX05VTUJFUl9TRVQgfCBMSU5FX0NPTlRFTlRfU0VUKQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
U2VhcmNoTWF0Y2g+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMSU5F
X05VTUJFUl9TRVQ+JiBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX05VTUJFUl9TRVQpLCBwcm9wZXJ0
eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSU5F
X05VTUJFUl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9D
T05URU5UX1NFVD4mIHNldExpbmVDb250ZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9DT05URU5UX1NFVCks
IHByb3BlcnR5X2xpbmVDb250ZW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibGluZUNvbnRlbnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TElORV9DT05URU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWFyY2hNYXRjaD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoTWF0Y2g+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoTWF0Y2g+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaE1hdGNoPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hNYXRjaDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldExpbmVDb250
ZW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IFNlYXJjaE1hdGNoKCkpKTsKICAgIH0KfTsKCi8qIFNlYXJjaCByZXN1bHQgZm9yIHJlc291
cmNlLiAqLwpjbGFzcyBTZWFyY2hSZXN1bHQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NF
VCA9IDEgPDwgMCwKICAgICAgICBGUkFNRV9JRF9TRVQgPSAxIDw8IDEsCiAgICAgICAgTUFUQ0hF
U19DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8
IEZSQU1FX0lEX1NFVCB8IE1BVENIRVNfQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VU
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlYXJjaFJlc3VsdDsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVf
SURfU0VUPiYgc2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2Zy
YW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFt
ZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQVRDSEVTX0NPVU5UX1NFVD4m
IHNldE1hdGNoZXNDb3VudChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTUFUQ0hFU19DT1VOVF9TRVQpLCBwcm9wZXJ0eV9tYXRjaGVz
Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJtYXRj
aGVzQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hFU19D
T1VOVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VhcmNoUmVz
dWx0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWFyY2hSZXN1bHQ+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWFyY2hSZXN1bHQ+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8U2VhcmNoUmVzdWx0PiByZXN1bHQgPSBTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAgICogICAg
IC5zZXRNYXRjaGVzQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgU2VhcmNoUmVzdWx0KCkpKTsKICAgIH0KfTsKCi8qIENvb2tpZSBv
YmplY3QgKi8KY2xhc3MgQ29va2llIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0g
MSA8PCAwLAogICAgICAgIFZBTFVFX1NFVCA9IDEgPDwgMSwKICAgICAgICBET01BSU5fU0VUID0g
MSA8PCAyLAogICAgICAgIFBBVEhfU0VUID0gMSA8PCAzLAogICAgICAgIEVYUElSRVNfU0VUID0g
MSA8PCA0LAogICAgICAgIFNJWkVfU0VUID0gMSA8PCA1LAogICAgICAgIEhUVFBfT05MWV9TRVQg
PSAxIDw8IDYsCiAgICAgICAgU0VDVVJFX1NFVCA9IDEgPDwgNywKICAgICAgICBTRVNTSU9OX1NF
VCA9IDEgPDwgOCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NF
VCB8IERPTUFJTl9TRVQgfCBQQVRIX1NFVCB8IEVYUElSRVNfU0VUIHwgU0laRV9TRVQgfCBIVFRQ
X09OTFlfU0VUIHwgU0VDVVJFX1NFVCB8IFNFU1NJT05fU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29va2llPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENvb2tpZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5B
TUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVkFMVUVfU0VU
PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBET01BSU5fU0VUPiYgc2V0RG9tYWluKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRE9N
QUlOX1NFVCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxET01BSU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBB
VEhfU0VUPiYgc2V0UGF0aChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBBVEhfU0VUKSwgcHJvcGVydHlfcGF0aF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UEFUSF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgRVhQSVJFU19TRVQ+JiBzZXRFeHBpcmVzKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFWFBJUkVTX1NF
VCksIHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEVYUElSRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNJWkVf
U0VUPiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU0laRV9TRVQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBIVFRQX09OTFlfU0VUPiYgc2V0SHR0cE9ubHkoYm9vbCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIVFRQX09OTFlfU0VUKSwgcHJv
cGVydHlfaHR0cE9ubHlfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9v
bGVhbigiaHR0cE9ubHkiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SFRU
UF9PTkxZX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRUNVUkVf
U0VUPiYgc2V0U2VjdXJlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU0VDVVJFX1NFVCksIHByb3BlcnR5X3NlY3VyZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0VDVVJFX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTRVNTSU9OX1NFVD4mIHNldFNlc3Npb24oYm9vbCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRVNTSU9OX1NF
VCksIHByb3BlcnR5X3Nlc3Npb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0Qm9vbGVhbigic2Vzc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTRVNTSU9OX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDb29r
aWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENvb2tpZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+IHJlc3Vs
dCA9IENvb2tpZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAg
LnNldFZhbHVlKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0
UGF0aCguLi4pCiAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5zZXRTaXpl
KC4uLikKICAgICAqICAgICAuc2V0SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRTZWN1cmUo
Li4uKQogICAgICogICAgIC5zZXRTZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENvb2tpZSgpKSk7CiAgICB9Cn07CgovKiBVbmlx
dWUgc2NyaXB0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFNjcmlwdElkZW50aWZpZXI7
Cgp9IC8vIFBhZ2UKCm5hbWVzcGFjZSBSdW50aW1lIHsKLyogVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiAqLwp0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKCi8qIE1pcnJvciBvYmplY3Qg
cmVmZXJlbmNpbmcgb3JpZ2luYWwgSmF2YVNjcmlwdCBvYmplY3QuICovCmNsYXNzIFJlbW90ZU9i
amVjdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KICAg
IHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBPYmplY3QgPSA4
LAogICAgICAgICAgICBGdW5jdGlvbiA9IDksCiAgICAgICAgICAgIFVuZGVmaW5lZCA9IDEwLAog
ICAgICAgICAgICBTdHJpbmcgPSAxMSwKICAgICAgICAgICAgTnVtYmVyID0gMTIsCiAgICAgICAg
ICAgIEJvb2xlYW4gPSAxMywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdWJ0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJl
bW90ZU9iamVjdC4KICAgIHN0cnVjdCBTdWJ0eXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAg
ICAgICAgICBBcnJheSA9IDE0LAogICAgICAgICAgICBOdWxsID0gMTUsCiAgICAgICAgICAgIE5v
ZGUgPSAxNiwKICAgICAgICAgICAgUmVnZXhwID0gMTcsCiAgICAgICAgICAgIERhdGUgPSAxOCwK
ICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKCiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IChUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZW1vdGVPYmplY3Q7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NF
VCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5
X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlbW90ZU9iamVjdD4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UmVtb3RlT2JqZWN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPFJlbW90ZU9iamVjdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8UmVtb3RlT2JqZWN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90ZU9iamVj
dD4gcmVzdWx0ID0gUmVtb3RlT2JqZWN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJl
bW90ZU9iamVjdCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKFN1YnR5cGU6OkVudW0g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDbGFzc05hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImNsYXNzTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFZhbHVlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIElu
c3BlY3Rvck9iamVjdDo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRlc2NyaXB0aW9u
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm9iamVjdElkIiwgdmFsdWUpOwogICAg
fQp9OwoKLyogT2JqZWN0IHByb3BlcnR5IGRlc2NyaXB0b3IuICovCmNsYXNzIFByb3BlcnR5RGVz
Y3JpcHRvciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBXUklUQUJMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgQ09ORklHVVJBQkxFX1NFVCA9IDEgPDwg
MiwKICAgICAgICBFTlVNRVJBQkxFX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NF
VCA9IChOQU1FX1NFVCB8IFdSSVRBQkxFX1NFVCB8IENPTkZJR1VSQUJMRV9TRVQgfCBFTlVNRVJB
QkxFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NF
VCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFdSSVRBQkxFX1NFVD4m
IHNldFdyaXRhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgV1JJVEFCTEVfU0VUKSwgcHJvcGVydHlfd3JpdGFibGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigid3JpdGFibGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V1JJVEFCTEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTkZJR1VSQUJMRV9TRVQ+JiBzZXRDb25maWd1cmFi
bGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDT05GSUdVUkFCTEVfU0VUKSwgcHJvcGVydHlfY29uZmlndXJhYmxlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbmZpZ3VyYWJsZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05GSUdVUkFCTEVfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVOVU1FUkFCTEVfU0VUPiYgc2V0RW51bWVy
YWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEVOVU1FUkFCTEVfU0VUKSwgcHJvcGVydHlfZW51bWVyYWJsZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJlbnVtZXJhYmxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVOVU1FUkFCTEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gUHJvcGVydHlEZXNjcmlwdG9yOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0V3JpdGFibGUo
Li4uKQogICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICogICAgIC5zZXRFbnVt
ZXJhYmxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IFByb3BlcnR5RGVzY3JpcHRvcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZSgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0
KCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6c2V0VmFs
dWU7CgoKICAgIHZvaWQgc2V0R2V0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoImdldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dFNldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
T2JqZWN0KCJzZXQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXYXNUaHJvd24oYm9vbCB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJ3YXNUaHJvd24iLCB2YWx1ZSk7
CiAgICB9Cn07CgovKiBSZXByZXNlbnRzIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnQuIEVpdGhlciBy
ZW1vdGUgb2JqZWN0IGlkIDxjb2RlPm9iamVjdElkPC9jb2RlPiBvciBwcmltaXRpdmUgPGNvZGU+
dmFsdWU8L2NvZGU+IG9yIG5laXRoZXIgb2YgKGZvciB1bmRlZmluZWQpIHRoZW0gc2hvdWxkIGJl
IHNwZWNpZmllZC4gKi8KY2xhc3MgQ2FsbEFyZ3VtZW50IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IEFMTF9GSUVMRFNfU0VUID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEFyZ3VtZW50PiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxBcmd1bWVudDsKICAgIHB1YmxpYzoKCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENhbGxBcmd1bWVudD4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEFy
Z3VtZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENhbGxBcmd1bWVudD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q2FsbEFyZ3VtZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxBcmd1bWVudD4gcmVzdWx0ID0g
Q2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgQ2FsbEFyZ3VtZW50KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZh
bHVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFZhbHVlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVj
dDo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0T2JqZWN0SWQoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgib2JqZWN0SWQiLCB2YWx1ZSk7
CiAgICB9Cn07Cgp9IC8vIFJ1bnRpbWUKCm5hbWVzcGFjZSBDb25zb2xlIHsKLyogQ29uc29sZSBt
ZXNzYWdlLiAqLwpjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxl
IGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgU291cmNlIHsKICAgICAgICBl
bnVtIEVudW0gewogICAgICAgICAgICBIdG1sID0gMTksCiAgICAgICAgICAgIFdtbCA9IDIwLAog
ICAgICAgICAgICBYbWwgPSAyMSwKICAgICAgICAgICAgSmF2YXNjcmlwdCA9IDIyLAogICAgICAg
ICAgICBOZXR3b3JrID0gMjMsCiAgICAgICAgICAgIENvbnNvbGVfYXBpID0gMjQsCiAgICAgICAg
ICAgIE90aGVyID0gMjUsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdsZXZlbCcgd2hpbGUgZ2VuZXJhdGluZyBDb25z
b2xlTWVzc2FnZS4KICAgIHN0cnVjdCBMZXZlbCB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgVGlwID0gMjYsCiAgICAgICAgICAgIExvZyA9IDI3LAogICAgICAgICAgICBXYXJuaW5n
ID0gMjgsCiAgICAgICAgICAgIEVycm9yID0gMjksCiAgICAgICAgICAgIERlYnVnID0gMzAsCiAg
ICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBMZXZlbAoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1
Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgTG9nID0gMjcsCiAgICAg
ICAgICAgIERpciA9IDMxLAogICAgICAgICAgICBEaXJ4bWwgPSAzMiwKICAgICAgICAgICAgVHJh
Y2UgPSAzMywKICAgICAgICAgICAgU3RhcnRHcm91cCA9IDM0LAogICAgICAgICAgICBTdGFydEdy
b3VwQ29sbGFwc2VkID0gMzUsCiAgICAgICAgICAgIEVuZEdyb3VwID0gMzYsCiAgICAgICAgICAg
IEFzc2VydCA9IDM3LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNPVVJDRV9TRVQgPSAxIDw8IDAs
CiAgICAgICAgTEVWRUxfU0VUID0gMSA8PCAxLAogICAgICAgIFRFWFRfU0VUID0gMSA8PCAyLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNPVVJDRV9TRVQgfCBMRVZFTF9TRVQgfCBURVhUX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENvbnNvbGVNZXNzYWdlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIENvbnNvbGVNZXNzYWdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU09VUkNFX1NFVD4mIHNldFNvdXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1NFVCksIHByb3Bl
cnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U09VUkNFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTT1VSQ0VfU0VUPiYgc2V0U291cmNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1NFVCksIHByb3Bl
cnR5X3NvdXJjZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InNvdXJjZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0VfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExFVkVMX1NFVD4mIHNldExl
dmVsKExldmVsOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIExFVkVMX1NFVCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibGV2ZWwiLCBnZXRFbnVtQ29uc3RhbnRWYWx1
ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExFVkVMX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMRVZFTF9TRVQ+JiBzZXRMZXZlbChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIExFVkVMX1NFVCksIHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibGV2ZWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TEVWRUxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRFWFRfU0VUPiYgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRFWFRfU0VUKSwgcHJvcGVydHlfdGV4
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VEVYVF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPENvbnNvbGVNZXNzYWdlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPENvbnNvbGVNZXNzYWdlPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb25zb2xl
TWVzc2FnZT4gcmVzdWx0ID0gQ29uc29sZU1lc3NhZ2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFNvdXJjZSguLi4pCiAgICAgKiAgICAgLnNldExldmVsKC4uLikKICAgICAqICAgICAuc2V0VGV4
dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBDb25zb2xlTWVzc2FnZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUeXBlKFR5cGU6OkVudW0g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmUoaW50IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFJlcGVhdENvdW50KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UGFyYW1l
dGVycyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRBcnJheSgicGFyYW1ldGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNr
VHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROZXR3
b3JrUmVxdWVzdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJuZXR3b3JrUmVxdWVzdElkIiwgdmFsdWUpOwogICAgfQp9OwoKLyogU3RhY2sgZW50
cnkgZm9yIGNvbnNvbGUgZXJyb3JzIGFuZCBhc3NlcnRpb25zLiAqLwpjbGFzcyBDYWxsRnJhbWUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9f
RklFTERTX1NFVCA9IDAsCiAgICAgICAgRlVOQ1RJT05fTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgVVJMX1NFVCA9IDEgPDwgMSwKICAgICAgICBMSU5FX05VTUJFUl9TRVQgPSAxIDw8IDIsCiAg
ICAgICAgQ09MVU1OX05VTUJFUl9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAoRlVOQ1RJT05fTkFNRV9TRVQgfCBVUkxfU0VUIHwgTElORV9OVU1CRVJfU0VUIHwgQ09MVU1O
X05VTUJFUl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgQ2FsbEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRlVOQ1RJT05fTkFNRV9TRVQ+JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGVU5D
VElPTl9OQU1FX1NFVCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGVU5DVElPTl9OQU1FX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NF
VCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4m
IHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT0xVTU5fTlVNQkVSX1NFVD4mIHNl
dENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQ09MVU1OX05VTUJFUl9TRVQpLCBwcm9wZXJ0eV9jb2x1bW5OdW1iZXJf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb2x1bW5OdW1i
ZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09MVU1OX05VTUJFUl9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEZyYW1lPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiBy
ZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4u
KQogICAgICogICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCn0g
Ly8gQ29uc29sZQoKbmFtZXNwYWNlIE5ldHdvcmsgewovKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZp
ZXIuICovCnR5cGVkZWYgU3RyaW5nIExvYWRlcklkOwoKLyogVW5pcXVlIGZyYW1lIGlkZW50aWZp
ZXIuICovCnR5cGVkZWYgU3RyaW5nIEZyYW1lSWQ7CgovKiBVbmlxdWUgcmVxdWVzdCBpZGVudGlm
aWVyLiAqLwp0eXBlZGVmIFN0cmluZyBSZXF1ZXN0SWQ7CgovKiBUaW1pbmcgaW5mb3JtYXRpb24g
Zm9yIHRoZSByZXF1ZXN0LiAqLwpjbGFzcyBSZXNvdXJjZVRpbWluZyA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBSRVFVRVNUX1RJTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFBST1hZX1NUQVJUX1NF
VCA9IDEgPDwgMSwKICAgICAgICBQUk9YWV9FTkRfU0VUID0gMSA8PCAyLAogICAgICAgIEROU19T
VEFSVF9TRVQgPSAxIDw8IDMsCiAgICAgICAgRE5TX0VORF9TRVQgPSAxIDw8IDQsCiAgICAgICAg
Q09OTkVDVF9TVEFSVF9TRVQgPSAxIDw8IDUsCiAgICAgICAgQ09OTkVDVF9FTkRfU0VUID0gMSA8
PCA2LAogICAgICAgIFNTTF9TVEFSVF9TRVQgPSAxIDw8IDcsCiAgICAgICAgU1NMX0VORF9TRVQg
PSAxIDw8IDgsCiAgICAgICAgU0VORF9TVEFSVF9TRVQgPSAxIDw8IDksCiAgICAgICAgU0VORF9F
TkRfU0VUID0gMSA8PCAxMCwKICAgICAgICBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCA9IDEgPDwg
MTEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoUkVRVUVTVF9USU1FX1NFVCB8IFBST1hZX1NU
QVJUX1NFVCB8IFBST1hZX0VORF9TRVQgfCBETlNfU1RBUlRfU0VUIHwgRE5TX0VORF9TRVQgfCBD
T05ORUNUX1NUQVJUX1NFVCB8IENPTk5FQ1RfRU5EX1NFVCB8IFNTTF9TVEFSVF9TRVQgfCBTU0xf
RU5EX1NFVCB8IFNFTkRfU1RBUlRfU0VUIHwgU0VORF9FTkRfU0VUIHwgUkVDRUlWRV9IRUFERVJT
X0VORF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxSZXNvdXJjZVRpbWluZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVRpbWluZzsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFJFUVVFU1RfVElNRV9TRVQ+JiBzZXRSZXF1ZXN0VGltZShkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVT
VF9USU1FX1NFVCksIHByb3BlcnR5X3JlcXVlc3RUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVxdWVzdFRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UkVRVUVTVF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBQUk9YWV9TVEFSVF9TRVQ+JiBzZXRQcm94eVN0YXJ0KGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQUk9Y
WV9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9wcm94eVN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQUk9YWV9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUFJPWFlfRU5EX1NFVD4mIHNldFByb3h5RW5kKGRvdWJsZSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQUk9YWV9FTkRf
U0VUKSwgcHJvcGVydHlfcHJveHlFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJwcm94eUVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxQUk9YWV9FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEROU19TVEFSVF9TRVQ+JiBzZXREbnNTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRE5TX1NUQVJUX1NFVCksIHByb3BlcnR5
X2Ruc1N0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
ZG5zU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE5TX1NUQVJU
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBETlNfRU5EX1NFVD4m
IHNldERuc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRE5TX0VORF9TRVQpLCBwcm9wZXJ0eV9kbnNFbmRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNFbmQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE5TX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVF9TVEFSVF9TRVQ+JiBzZXRDb25uZWN0U3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENPTk5FQ1RfU1RBUlRfU0VUKSwgcHJvcGVydHlfY29ubmVjdFN0YXJ0X2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdFN0YXJ0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTk5FQ1RfU1RBUlRfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTk5FQ1RfRU5EX1NFVD4mIHNldENvbm5lY3RF
bmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENPTk5FQ1RfRU5EX1NFVCksIHByb3BlcnR5X2Nvbm5lY3RFbmRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0RW5kIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTk5FQ1RfRU5EX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTU0xfU1RBUlRfU0VUPiYgc2V0U3NsU3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNTTF9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9zc2xTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNTTF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU1NMX0VORF9TRVQ+JiBzZXRTc2xFbmQoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNTTF9FTkRfU0VUKSwgcHJv
cGVydHlfc3NsRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigic3NsRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNTTF9FTkRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFTkRfU1RBUlRfU0VU
PiYgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTRU5EX1NUQVJUX1NFVCksIHByb3BlcnR5X3NlbmRTdGFydF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNlbmRTdGFydCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTRU5EX1NUQVJUX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRU5EX0VORF9TRVQ+JiBzZXRTZW5k
RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTRU5EX0VORF9TRVQpLCBwcm9wZXJ0eV9zZW5kRW5kX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZEVuZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTRU5EX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUkVDRUlWRV9IRUFERVJTX0VORF9TRVQ+JiBzZXRSZWNlaXZlSGVhZGVy
c0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUkVDRUlWRV9IRUFERVJTX0VORF9TRVQpLCBwcm9wZXJ0eV9yZWNlaXZlSGVhZGVy
c0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlY2Vp
dmVIZWFkZXJzRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFQ0VJ
VkVfSEVBREVSU19FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFJlc291cmNlVGltaW5nPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRpbWluZz4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNvdXJjZVRp
bWluZz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzb3VyY2VUaW1p
bmc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+IHJlc3VsdCA9IFJlc291cmNl
VGltaW5nOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0VGltZSguLi4pCiAgICAgKiAg
ICAgLnNldFByb3h5U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRQcm94eUVuZCguLi4pCiAgICAg
KiAgICAgLnNldERuc1N0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RG5zRW5kKC4uLikKICAgICAq
ICAgICAuc2V0Q29ubmVjdFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdEVuZCguLi4p
CiAgICAgKiAgICAgLnNldFNzbFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U3NsRW5kKC4uLikK
ICAgICAqICAgICAuc2V0U2VuZFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U2VuZEVuZCguLi4p
CiAgICAgKiAgICAgLnNldFJlY2VpdmVIZWFkZXJzRW5kKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJlc291cmNlVGltaW5nKCkpKTsKICAg
IH0KfTsKCi8qIEhUVFAgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBSZXF1ZXN0IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQg
PSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgTUVUSE9EX1NFVCA9IDEgPDwg
MSwKICAgICAgICBIRUFERVJTX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChVUkxfU0VUIHwgTUVUSE9EX1NFVCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVxdWVzdD4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXF1ZXN0OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVS
TF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJM
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNRVRIT0RfU0VUPiYg
c2V0TWV0aG9kKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTUVUSE9EX1NFVCksIHByb3BlcnR5X21ldGhvZF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNRVRIT0RfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSEVBREVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+
KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlcXVl
c3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlcXVlc3Q+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8UmVxdWVzdD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAu
c2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBSZXF1ZXN0KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBvc3REYXRhKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIEhUVFAgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgUmVzcG9u
c2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVEFU
VVNfU0VUID0gMSA8PCAxLAogICAgICAgIFNUQVRVU19URVhUX1NFVCA9IDEgPDwgMiwKICAgICAg
ICBIRUFERVJTX1NFVCA9IDEgPDwgMywKICAgICAgICBNSU1FX1RZUEVfU0VUID0gMSA8PCA0LAog
ICAgICAgIENPTk5FQ1RJT05fUkVVU0VEX1NFVCA9IDEgPDwgNSwKICAgICAgICBDT05ORUNUSU9O
X0lEX1NFVCA9IDEgPDwgNiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgU1RB
VFVTX1NFVCB8IFNUQVRVU19URVhUX1NFVCB8IEhFQURFUlNfU0VUIHwgTUlNRV9UWVBFX1NFVCB8
IENPTk5FQ1RJT05fUkVVU0VEX1NFVCB8IENPTk5FQ1RJT05fSURfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzcG9uc2U+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzcG9uc2U7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRV
U19TRVQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNUZXh0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU1RBVFVTX1RFWFRfU0VUKSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1RFWFRfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVfU0VUPiYgc2V0TWltZVR5cGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBNSU1FX1RZUEVfU0VUKSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENPTk5FQ1RJT05fUkVVU0VEX1NFVD4mIHNldENvbm5lY3Rpb25S
ZXVzZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDT05ORUNUSU9OX1JFVVNFRF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uUmV1c2Vk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbm5lY3Rp
b25SZXVzZWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVElP
Tl9SRVVTRURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTk5F
Q1RJT05fSURfU0VUPiYgc2V0Q29ubmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT05ORUNUSU9OX0lEX1NFVCksIHBy
b3BlcnR5X2Nvbm5lY3Rpb25JZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoImNvbm5lY3Rpb25JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDT05ORUNUSU9OX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxSZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVzcG9uc2U+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPFJlc3BvbnNlPiByZXN1bHQgPSBSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
VXJsKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVz
VGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRNaW1l
VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25SZXVzZWQoLi4uKQogICAgICogICAg
IC5zZXRDb25uZWN0aW9uSWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgUmVzcG9uc2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0SGVhZGVy
c1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
ImhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnMo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgicmVxdWVzdEhlYWRlcnMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1
ZXN0SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInJlcXVlc3RIZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dEZyb21EaXNrQ2FjaGUoYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFu
KCJmcm9tRGlza0NhY2hlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGltaW5nKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgi
dGltaW5nIiwgdmFsdWUpOwogICAgfQp9OwoKLyogV2ViU29ja2V0IHJlcXVlc3QgZGF0YS4gKi8K
Y2xhc3MgV2ViU29ja2V0UmVxdWVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBSRVFVRVNUX0tF
WTNfU0VUID0gMSA8PCAwLAogICAgICAgIEhFQURFUlNfU0VUID0gMSA8PCAxLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFJFUVVFU1RfS0VZM19TRVQgfCBIRUFERVJTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFdlYlNvY2tl
dFJlcXVlc3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
V2ViU29ja2V0UmVxdWVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJF
UVVFU1RfS0VZM19TRVQ+JiBzZXRSZXF1ZXN0S2V5Myhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJFUVVFU1RfS0VZM19T
RVQpLCBwcm9wZXJ0eV9yZXF1ZXN0S2V5M19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFJFUVVFU1RfS0VZM19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
V2ViU29ja2V0UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
V2ViU29ja2V0UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiBy
ZXN1bHQgPSBXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0
S2V5MyguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgV2ViU29ja2V0UmVxdWVzdCgpKSk7CiAg
ICB9Cn07CgovKiBXZWJTb2NrZXQgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgV2ViU29ja2V0UmVz
cG9uc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RBVFVTX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBTVEFUVVNfVEVYVF9TRVQgPSAxIDw8IDEsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDIs
CiAgICAgICAgQ0hBTExFTkdFX1JFU1BPTlNFX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChTVEFUVVNfU0VUIHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVBREVSU19TRVQgfCBD
SEFMTEVOR0VfUkVTUE9OU0VfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0UmVzcG9uc2U7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfU0VUPiYgc2V0U3RhdHVzKGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTVEFUVVNfU0VUKSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNUQVRVU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU1RBVFVTX1RFWFRfU0VUPiYgc2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19URVhU
X1NFVCksIHByb3BlcnR5X3N0YXR1c1RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNUQVRVU19URVhUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBIRUFERVJTX1NFVD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEhFQURFUlNfU0VUKSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ0hBTExFTkdFX1JFU1BPTlNFX1NFVD4mIHNldENoYWxsZW5nZVJlc3BvbnNlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ0hBTExFTkdFX1JFU1BPTlNFX1NFVCksIHByb3BlcnR5X2NoYWxsZW5nZVJlc3BvbnNl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiY2hhbGxlbmdl
UmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q0hBTExFTkdF
X1JFU1BPTlNFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxXZWJT
b2NrZXRSZXNwb25zZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0
UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tl
dFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiByZXN1bHQg
PSBXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikK
ICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4u
KQogICAgICogICAgIC5zZXRDaGFsbGVuZ2VSZXNwb25zZSguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXNwb25zZSgpKSk7
CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FjaGVkIHJlc291cmNlLiAqLwpj
bGFzcyBDYWNoZWRSZXNvdXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8
PCAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAxLAogICAgICAgIFJFU1BPTlNFX1NFVCA9IDEg
PDwgMiwKICAgICAgICBCT0RZX1NJWkVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFVSTF9TRVQgfCBUWVBFX1NFVCB8IFJFU1BPTlNFX1NFVCB8IEJPRFlfU0laRV9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDYWNoZWRSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGVCdWlsZGVyOjpQYWdl
OjpSZXNvdXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBS
RVNQT05TRV9TRVQ+JiBzZXRSZXNwb25zZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRVNQT05TRV9TRVQpLCBw
cm9wZXJ0eV9yZXNwb25zZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRP
YmplY3QoInJlc3BvbnNlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJF
U1BPTlNFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCT0RZX1NJ
WkVfU0VUPiYgc2V0Qm9keVNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJPRFlfU0laRV9TRVQpLCBwcm9wZXJ0eV9ib2R5U2l6
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImJvZHlTaXpl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJPRFlfU0laRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPENhY2hlZFJlc291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDYWNoZWRSZXNvdXJjZT4gcmVzdWx0ID0gQ2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5z
ZXRSZXNwb25zZSguLi4pCiAgICAgKiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENhY2hlZFJlc291cmNlKCkp
KTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGluaXRpYXRvci4g
Ki8KY2xhc3MgSW5pdGlhdG9yIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgSW5p
dGlhdG9yLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
IFBhcnNlciA9IDM4LAogICAgICAgICAgICBTY3JpcHQgPSAzOSwKICAgICAgICAgICAgT3RoZXIg
PSAyNSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBB
TExfRklFTERTX1NFVCA9IChUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaXRpYXRvcj4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBJbml0aWF0b3I7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5
cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaXRpYXRvcj4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
SW5pdGlhdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPEluaXRpYXRvcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
SW5pdGlhdG9yPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaXRpYXRvcj4gcmVzdWx0ID0gSW5pdGlh
dG9yOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEluaXRpYXRvcigpKSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRMaW5lTnVtYmVyKGRv
dWJsZSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2
YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE5ldHdvcmsKCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQpu
YW1lc3BhY2UgRGF0YWJhc2UgewovKiBEYXRhYmFzZSBvYmplY3QuICovCmNsYXNzIERhdGFiYXNl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIElEX1NFVCA9IDEgPDwgMCwKICAgICAgICBET01BSU5f
U0VUID0gMSA8PCAxLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAyLAogICAgICAgIFZFUlNJT05f
U0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKElEX1NFVCB8IERPTUFJTl9T
RVQgfCBOQU1FX1NFVCB8IFZFUlNJT05fU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RGF0YWJhc2U+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHBy
b3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
aWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERPTUFJTl9TRVQ+JiBzZXREb21haW4oY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBET01BSU5fU0VUKSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPERPTUFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0
eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWRVJTSU9OX1NFVD4mIHNldFZlcnNpb24o
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBWRVJTSU9OX1NFVCksIHByb3BlcnR5X3ZlcnNpb25fYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2ZXJzaW9uIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFZFUlNJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPERhdGFiYXNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxEYXRhYmFzZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RGF0YWJhc2U+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8RGF0YWJhc2U+IHJlc3VsdCA9IERhdGFiYXNlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRJZCguLi4pCiAgICAgKiAgICAgLnNldERvbWFpbiguLi4pCiAgICAgKiAgICAg
LnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWZXJzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0K
fTsKCn0gLy8gRGF0YWJhc2UKCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3Bh
Y2UgRE9NU3RvcmFnZSB7Ci8qIERPTSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBIT1NUX1NFVCA9IDEgPDwgMCwKICAgICAgICBJU19MT0NBTF9T
VE9SQUdFX1NFVCA9IDEgPDwgMSwKICAgICAgICBJRF9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxM
X0ZJRUxEU19TRVQgPSAoSE9TVF9TRVQgfCBJU19MT0NBTF9TVE9SQUdFX1NFVCB8IElEX1NFVCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PEVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEVu
dHJ5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSE9TVF9TRVQ+JiBzZXRI
b3N0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSE9TVF9TRVQpLCBwcm9wZXJ0eV9ob3N0X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxIT1NUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBJU19MT0NBTF9TVE9SQUdFX1NFVD4mIHNldElzTG9jYWxTdG9yYWdlKGJvb2wgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSVNfTE9D
QUxfU1RPUkFHRV9TRVQpLCBwcm9wZXJ0eV9pc0xvY2FsU3RvcmFnZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJU19MT0NBTF9TVE9SQUdFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJRF9TRVQ+JiBzZXRJZChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VU
KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RW50cnk+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPEVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFbnRy
eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5zZXRJc0xvY2FsU3RvcmFnZSguLi4p
CiAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IEVudHJ5KCkpKTsKICAgIH0KfTsKCn0gLy8gRE9NU3RvcmFnZQoK
bmFtZXNwYWNlIEFwcGxpY2F0aW9uQ2FjaGUgewovKiBEZXRhaWxlZCBhcHBsaWNhdGlvbiBjYWNo
ZSByZXNvdXJjZSBpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU0laRV9T
RVQgPSAxIDw8IDEsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoVVJMX1NFVCB8IFNJWkVfU0VUIHwgVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJv
cGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAu
c2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KCkpKTsKICAgIH0KfTsKCi8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIGluZm9ybWF0aW9u
LiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE1BTklG
RVNUX1VfUl9MX1NFVCA9IDEgPDwgMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBDUkVBVElPTl9USU1FX1NFVCA9IDEgPDwgMiwKICAgICAgICBVUERBVEVfVElNRV9TRVQgPSAx
IDw8IDMsCiAgICAgICAgUkVTT1VSQ0VTX1NFVCA9IDEgPDwgNCwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChNQU5JRkVTVF9VX1JfTF9TRVQgfCBTSVpFX1NFVCB8IENSRUFUSU9OX1RJTUVfU0VU
IHwgVVBEQVRFX1RJTUVfU0VUIHwgUkVTT1VSQ0VTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25D
YWNoZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BTklGRVNUX1VfUl9M
X1NFVD4mIHNldE1hbmlmZXN0VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTUFOSUZFU1RfVV9SX0xfU0VUKSwgcHJv
cGVydHlfbWFuaWZlc3RVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxNQU5JRkVTVF9VX1JfTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU0laRV9TRVQ+JiBzZXRTaXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENSRUFUSU9OX1RJTUVfU0VUPiYgc2V0Q3JlYXRpb25UaW1lKGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDUkVBVElPTl9USU1FX1NFVCksIHByb3BlcnR5X2NyZWF0aW9uVGltZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNyZWF0aW9uVGltZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDUkVBVElPTl9USU1FX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUERBVEVfVElNRV9TRVQ+JiBzZXRVcGRhdGVU
aW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBVUERBVEVfVElNRV9TRVQpLCBwcm9wZXJ0eV91cGRhdGVUaW1lX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidXBkYXRlVGltZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUERBVEVfVElNRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRVNPVVJDRVNfU0VUKSwgcHJvcGVydHlfcmVzb3VyY2Vz
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVTT1VSQ0VTX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZTo6Y3Jl
YXRlKCkKICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5zZXRTaXpl
KC4uLikKICAgICAqICAgICAuc2V0Q3JlYXRpb25UaW1lKC4uLikKICAgICAqICAgICAuc2V0VXBk
YXRlVGltZSguLi4pCiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlKCkp
KTsKICAgIH0KfTsKCi8qIEZyYW1lIGlkZW50aWZpZXIgLSBtYW5pZmVzdCBVUkwgcGFpci4gKi8K
Y2xhc3MgRnJhbWVXaXRoTWFuaWZlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgRlJBTUVfSURf
U0VUID0gMSA8PCAwLAogICAgICAgIE1BTklGRVNUX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBTVEFUVVNfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZSQU1FX0lE
X1NFVCB8IE1BTklGRVNUX1VfUl9MX1NFVCB8IFNUQVRVU19TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVdpdGhNYW5pZmVz
dD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVdp
dGhNYW5pZmVzdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX0lE
X1NFVD4mIHNldEZyYW1lSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9mcmFt
ZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGUkFNRV9JRF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYg
c2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9t
YW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklG
RVNUX1VfUl9MX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFU
VVNfU0VUPiYgc2V0U3RhdHVzKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFUVVNfU0VUKSwgcHJvcGVydHlfc3RhdHVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhdHVzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVRVU19TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PEZyYW1lV2l0aE1hbmlmZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxG
cmFtZVdpdGhNYW5pZmVzdD4gcmVzdWx0ID0gRnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4p
CiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBGcmFtZVdpdGhNYW5pZmVzdCgpKSk7CiAgICB9Cn07Cgp9
IC8vIEFwcGxpY2F0aW9uQ2FjaGUKCm5hbWVzcGFjZSBET00gewovKiBET00gaW50ZXJhY3Rpb24g
aXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQg
dGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUu
ICovCmNsYXNzIE5vZGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTk9ERV9JRF9TRVQgPSAxIDw8
IDAsCiAgICAgICAgTk9ERV9UWVBFX1NFVCA9IDEgPDwgMSwKICAgICAgICBOT0RFX05BTUVfU0VU
ID0gMSA8PCAyLAogICAgICAgIExPQ0FMX05BTUVfU0VUID0gMSA8PCAzLAogICAgICAgIE5PREVf
VkFMVUVfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5PREVfSURfU0VU
IHwgTk9ERV9UWVBFX1NFVCB8IE5PREVfTkFNRV9TRVQgfCBMT0NBTF9OQU1FX1NFVCB8IE5PREVf
VkFMVUVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8Tm9kZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBOb2RlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9J
RF9TRVQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5PREVfSURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfVFlQRV9TRVQ+JiBzZXROb2RlVHlwZShpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9U
WVBFX1NFVCksIHByb3BlcnR5X25vZGVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigibm9kZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Tk9ERV9UWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBOT0RFX05BTUVfU0VUPiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX05BTUVfU0VU
KSwgcHJvcGVydHlfbm9kZU5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJub2RlTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOT0RFX05BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExP
Q0FMX05BTUVfU0VUPiYgc2V0TG9jYWxOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTE9DQUxfTkFNRV9TRVQpLCBw
cm9wZXJ0eV9sb2NhbE5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJsb2NhbE5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TE9DQUxfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9E
RV9WQUxVRV9TRVQ+JiBzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX1ZBTFVFX1NFVCksIHBy
b3BlcnR5X25vZGVWYWx1ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm5vZGVWYWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
T0RFX1ZBTFVFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxOb2Rl
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9G
SUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxOb2RlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPE5vZGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVR5
cGUoLi4uKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2Fs
TmFtZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBOb2RlKCkpKTsKICAgIH0KCiAgICB2
b2lkIHNldENoaWxkTm9kZUNvdW50KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRO
dW1iZXIoImNoaWxkTm9kZUNvdW50IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRy
ZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0QXR0cmlidXRl
cyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRBcnJheSgiYXR0cmlidXRlcyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldERvY3VtZW50
VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJk
b2N1bWVudFVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFB1YmxpY0lkKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwdWJsaWNJZCIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN5c3RlbUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldEludGVybmFsU3Vic2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJpbnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFhtbFZlcnNpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1l
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAg
dXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCn07CgovKiBET00gaW50ZXJhY3Rpb24g
aXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXByZXNlbnQg
dGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9yIHR5cGUu
ICovCmNsYXNzIEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQg
PSAxIDw8IDAsCiAgICAgICAgVVNFX0NBUFRVUkVfU0VUID0gMSA8PCAxLAogICAgICAgIElTX0FU
VFJJQlVURV9TRVQgPSAxIDw8IDIsCiAgICAgICAgTk9ERV9JRF9TRVQgPSAxIDw8IDMsCiAgICAg
ICAgSEFORExFUl9CT0RZX1NFVCA9IDEgPDwgNCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChU
WVBFX1NFVCB8IFVTRV9DQVBUVVJFX1NFVCB8IElTX0FUVFJJQlVURV9TRVQgfCBOT0RFX0lEX1NF
VCB8IEhBTkRMRVJfQk9EWV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBF
X1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZ
UEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVTRV9DQVBUVVJF
X1NFVD4mIHNldFVzZUNhcHR1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVU0VfQ0FQVFVSRV9TRVQpLCBwcm9wZXJ0eV91c2VDYXB0
dXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInVzZUNh
cHR1cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVNFX0NBUFRVUkVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElTX0FUVFJJQlVURV9T
RVQ+JiBzZXRJc0F0dHJpYnV0ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIElTX0FUVFJJQlVURV9TRVQpLCBwcm9wZXJ0eV9pc0F0dHJp
YnV0ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJpc0F0
dHJpYnV0ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJU19BVFRSSUJV
VEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfSURfU0VU
PiYgc2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOT0RFX0lEX1NFVCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBIQU5ETEVSX0JPRFlfU0VUPiYgc2V0SGFuZGxlckJvZHkoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBIQU5ETEVSX0JPRFlfU0VUKSwgcHJvcGVydHlfaGFuZGxlckJvZHlfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGVyQm9keSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIQU5ETEVSX0JPRFlfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPEV2ZW50TGlzdGVuZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiByZXN1bHQgPSBFdmVudExpc3RlbmVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBl
KC4uLikKICAgICAqICAgICAuc2V0VXNlQ2FwdHVyZSguLi4pCiAgICAgKiAgICAgLnNldElzQXR0
cmlidXRlKC4uLikKICAgICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0SGFu
ZGxlckJvZHkoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgRXZlbnRMaXN0ZW5lcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRMb2NhdGlvbigv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJs
b2NhdGlvbiIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEEgc3RydWN0dXJlIGhvbGRpbmcgYW4gUkdC
QSBjb2xvci4gKi8KLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnUkdCQScuCmNsYXNzIFJn
YmEgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgUl9TRVQgPSAxIDw8IDAsCiAgICAgICAgR19TRVQg
PSAxIDw8IDEsCiAgICAgICAgQl9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAoUl9TRVQgfCBHX1NFVCB8IEJfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmdiYT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBSZ2JhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUl9TRVQ+JiBzZXRSKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSX1NFVCksIHByb3BlcnR5X3JfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEdfU0VUPiYgc2V0RyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgR19TRVQpLCBwcm9wZXJ0eV9nX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxHX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBC
X1NFVD4mIHNldEIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEJfU0VUKSwgcHJvcGVydHlfYl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Ql9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmdiYT4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8UmdiYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxSZ2JhPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxSZ2JhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJnYmE+IHJlc3VsdCA9IFJnYmE6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldFIoLi4uKQogICAgICogICAgIC5zZXRHKC4uLikKICAgICAq
ICAgICAuc2V0QiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBSZ2JhKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENv
bmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIGhpZ2hsaWdodGluZyBvZiBwYWdlIGVsZW1lbnRzLiAq
LwpjbGFzcyBIaWdobGlnaHRDb25maWcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxIaWdobGlnaHRDb25maWc+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgSGlnaGxpZ2h0Q29uZmlnOwogICAgcHVibGljOgoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGln
aHRDb25maWc+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxIaWdobGlnaHRDb25maWc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmln
PiByZXN1bHQgPSBIaWdobGlnaHRDb25maWc6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBIaWdobGlnaHRDb25maWcoKSkpOwogICAg
fQoKICAgIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRCb29sZWFuKCJzaG93SW5mbyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENvbnRlbnRD
b2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJjb250
ZW50Q29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYWRkaW5nQ29sb3IoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicGFkZGluZ0NvbG9yIiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Qm9yZGVyQ29sb3IoLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiYm9yZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRNYXJnaW5Db2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJtYXJnaW5Db2xvciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gRE9N
CgpuYW1lc3BhY2UgQ1NTIHsKLyogVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBzdHlsZSBp
biBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1N0eWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAg
ICAgU1RZTEVfU0hFRVRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIE9SRElOQUxfU0VUID0gMSA8
PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IE9SRElO
QUxfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Q1NTU3R5bGVJZD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NTdHlsZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVf
U0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxf
U0VUKSwgcHJvcGVydHlfb3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8T1JESU5BTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NT
U3R5bGVJZD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVJZD4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZUlkPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPENTU1N0eWxlSWQ+IHJlc3VsdCA9IENTU1N0eWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGVJZCgp
KSk7CiAgICB9Cn07CgovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHJ1bGUgaW4gYSB1
bmlxdWUgd2F5LiAqLwpjbGFzcyBDU1NSdWxlSWQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZ
TEVfU0hFRVRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIE9SRElOQUxfU0VUID0gMSA8PCAxLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IE9SRElOQUxfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Q1NTUnVsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIENTU1J1bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxF
X1NIRUVUX0lEX1NFVD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUWUxFX1NIRUVUX0lE
X1NFVCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTVFlMRV9TSEVFVF9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgT1JESU5BTF9TRVQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPUkRJTkFMX1NFVCksIHBy
b3BlcnR5X29yZGluYWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJvcmRpbmFsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SRElO
QUxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGVJZD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGVJZD4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Q1NTUnVsZUlkPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1J1bGVJ
ZD4gcmVzdWx0ID0gQ1NTUnVsZUlkOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0
SWQoLi4uKQogICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1J1bGVJZCgpKSk7CiAgICB9Cn07Cgov
KiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNz
IFBzZXVkb0lkUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgUFNFVURPX0lEX1NFVCA9IDEg
PDwgMCwKICAgICAgICBSVUxFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAoUFNFVURPX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUHNldWRvSWRSdWxlczsKICAgIHB1
YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBTRVVET19JRF9TRVQ+JiBzZXRQc2V1ZG9J
ZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUFNFVURPX0lEX1NFVCksIHByb3BlcnR5X3BzZXVkb0lkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHNldWRvSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UFNFVURPX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBSVUxFU19TRVQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8UlVMRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBz
ZXVkb0lkUnVsZXM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBzZXVkb0lkUnVsZXM+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UHNldWRvSWRSdWxlcz4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiByZXN1bHQgPSBQc2V1ZG9JZFJ1bGVzOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXRQc2V1ZG9JZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVz
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3
IFBzZXVkb0lkUnVsZXMoKSkpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVjdGlvbiBmb3Ig
YSBzaW5nbGUgcHNldWRvIHN0eWxlLiAqLwpjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIE1BVENIRURfQ1NTX1JVTEVTX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChNQVRDSEVEX0NTU19SVUxFU19TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHls
ZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIElu
aGVyaXRlZFN0eWxlRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
QVRDSEVEX0NTU19SVUxFU19TRVQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTUFUQ0hFRF9DU1NfUlVMRVNfU0VUKSwgcHJvcGVydHlfbWF0Y2hlZENTU1J1bGVz
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJtYXRjaGVkQ1NT
UnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hFRF9DU1Nf
UlVMRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEluaGVyaXRl
ZFN0eWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5oZXJpdGVk
U3R5bGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SW5oZXJp
dGVkU3R5bGVFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiBy
ZXN1bHQgPSBJbmhlcml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRNYXRj
aGVkQ1NTUnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgSW5oZXJpdGVkU3R5bGVFbnRyeSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRJ
bmxpbmVTdHlsZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgiaW5saW5lU3R5bGUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgaW5mb3Jt
YXRpb24gZm9yIGEgRE9NIHN0eWxlIGF0dHJpYnV0ZS4gKi8KY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1
dGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgU1RZ
TEVfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgU1RZ
TEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCks
IHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NFVD4mIHNldFN0
eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RZTEVfU0VUKSwgcHJvcGVydHlfc3R5bGVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxl
QXR0cmlidXRlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4gcmVzdWx0ID0gQ1NTU3R5bGVBdHRyaWJ1dGU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUF0dHJpYnV0ZSgpKSk7
CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBtZXRhaW5mb3JtYXRpb24uICovCmNsYXNzIENT
U1N0eWxlU2hlZXRIZWFkZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
ZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RZTEVfU0hFRVRfSURf
U0VUID0gMSA8PCAwLAogICAgICAgIFNPVVJDRV9VX1JfTF9TRVQgPSAxIDw8IDEsCiAgICAgICAg
VElUTEVfU0VUID0gMSA8PCAyLAogICAgICAgIERJU0FCTEVEX1NFVCA9IDEgPDwgMywKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChTVFlMRV9TSEVFVF9JRF9TRVQgfCBTT1VSQ0VfVV9SX0xfU0VU
IHwgVElUTEVfU0VUIHwgRElTQUJMRURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0SGVh
ZGVyOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURf
U0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJv
cGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTT1VSQ0VfVV9SX0xfU0VUPiYgc2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1Vf
Ul9MX1NFVCksIHByb3BlcnR5X3NvdXJjZVVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTT1VSQ0VfVV9SX0xfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFRJVExFX1NFVD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElUTEVfU0VUKSwgcHJv
cGVydHlfdGl0bGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ0aXRsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSVRMRV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRElTQUJMRURfU0VUPiYgc2V0
RGlzYWJsZWQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBESVNBQkxFRF9TRVQpLCBwcm9wZXJ0eV9kaXNhYmxlZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxESVNBQkxFRF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRIZWFkZXI6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNl
dFNvdXJjZVVSTCguLi4pCiAgICAgKiAgICAgLnNldFRpdGxlKC4uLikKICAgICAqICAgICAuc2V0
RGlzYWJsZWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgQ1NTU3R5bGVTaGVldEhlYWRlcigpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVz
aGVldCBjb250ZW50cy4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVldEJvZHkgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgU1RZTEVfU0hFRVRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIFJVTEVTX1NFVCA9
IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTVFlMRV9TSEVFVF9JRF9TRVQgfCBS
VUxFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0Qm9keTsKICAgIHB1YmxpYzoKCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NIRUVUX0lEX1NFVD4mIHNldFN0eWxlU2hlZXRJZChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFNUWUxFX1NIRUVUX0lEX1NFVCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TSEVFVF9JRF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUlVMRVNfU0VUPiYgc2V0UnVs
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUlVMRVNfU0VUKSwgcHJvcGVydHlfcnVsZXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJVTEVTX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q1NTU3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PENTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NT
U3R5bGVTaGVldEJvZHkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIENTUyBydWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NSdWxlIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ29yaWdpbicgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgogICAgc3RydWN0IE9yaWdp
biB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgVXNlciA9IDQwLAogICAgICAgICAg
ICBVc2VyX2FnZW50ID0gNDEsCiAgICAgICAgICAgIEluc3BlY3RvciA9IDQyLAogICAgICAgICAg
ICBFbXB0eSA9IDQzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgT3JpZ2luCgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNUT1JfVEVYVF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgU09VUkNFX0xJTkVfU0VUID0gMSA8PCAxLAogICAgICAgIE9SSUdJ
Tl9TRVQgPSAxIDw8IDIsCiAgICAgICAgU1RZTEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKFNFTEVDVE9SX1RFWFRfU0VUIHwgU09VUkNFX0xJTkVfU0VUIHwgT1JJR0lO
X1NFVCB8IFNUWUxFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPENTU1J1bGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNFTEVDVE9SX1RFWFRfU0VUPiYgc2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0VM
RUNUT1JfVEVYVF9TRVQpLCBwcm9wZXJ0eV9zZWxlY3RvclRleHRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRleHQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0VMRUNUT1JfVEVYVF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU09VUkNFX0xJTkVfU0VUPiYgc2V0U291cmNlTGluZShp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U09VUkNFX0xJTkVfU0VUKSwgcHJvcGVydHlfc291cmNlTGluZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U09VUkNFX0xJTkVfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE9SSUdJTl9TRVQ+JiBzZXRPcmlnaW4oT3JpZ2luOjpFbnVtIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SSUdJ
Tl9TRVQpLCBwcm9wZXJ0eV9vcmlnaW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SSUdJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT1JJR0lOX1NFVD4mIHNldE9yaWdpbihjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SSUdJ
Tl9TRVQpLCBwcm9wZXJ0eV9vcmlnaW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJvcmlnaW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8T1JJR0lOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlM
RV9TRVQ+JiBzZXRTdHlsZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUWUxFX1NFVCksIHByb3BlcnR5X3N0eWxlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1J1
bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
Q1NTUnVsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUnVsZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NSdWxlPiByZXN1bHQgPSBDU1NSdWxlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRTZWxlY3RvclRleHQoLi4uKQogICAgICogICAgIC5zZXRTb3VyY2VMaW5l
KC4uLikKICAgICAqICAgICAuc2V0T3JpZ2luKC4uLikKICAgICAqICAgICAuc2V0U3R5bGUoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NT
UnVsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSdWxlSWQoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1J1bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJydWxlSWQiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNl
bGVjdG9yUmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoInNlbGVjdG9yUmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRNZWRp
YShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRBcnJheSgibWVkaWEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBUZXh0IHJhbmdlIHdpdGhpbiBh
IHJlc291cmNlLiAqLwpjbGFzcyBTb3VyY2VSYW5nZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBT
VEFSVF9TRVQgPSAxIDw8IDAsCiAgICAgICAgRU5EX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IChTVEFSVF9TRVQgfCBFTkRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU291cmNlUmFuZ2U7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFSVF9TRVQ+JiBzZXRTdGFydChpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RB
UlRfU0VUKSwgcHJvcGVydHlfc3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJzdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRU5EX1NF
VD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRU5EX1NFVCksIHByb3BlcnR5X2VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxFTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFNvdXJjZVJhbmdlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTb3VyY2VSYW5nZT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U291cmNlUmFuZ2U+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8U291cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJjZVJhbmdlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRTdGFydCguLi4pCiAgICAgKiAgICAgLnNldEVuZCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBTb3VyY2VSYW5nZSgp
KSk7CiAgICB9Cn07CgpjbGFzcyBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHkgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9
IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgVkFMVUVfU0VUID0gMSA8PCAx
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZVByb3BlcnR5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwg
cHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVkFMVUVfU0VUPiYgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHJlc3VsdCA9IENTU0Nv
bXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAg
ICAgKiAgICAgLnNldFZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSgpKSk7CiAgICB9Cn07
CgovKiBDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1N0eWxlIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19T
RVQgPSAwLAogICAgICAgIENTU19QUk9QRVJUSUVTX1NFVCA9IDEgPDwgMCwKICAgICAgICBTSE9S
VEhBTkRfRU5UUklFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgV0lEVEhfU0VUID0gMSA8PCAyLAog
ICAgICAgIEhFSUdIVF9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoQ1NT
X1BST1BFUlRJRVNfU0VUIHwgU0hPUlRIQU5EX0VOVFJJRVNfU0VUIHwgV0lEVEhfU0VUIHwgSEVJ
R0hUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENTU1N0eWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIENTU1N0eWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q1NTX1BST1BFUlRJRVNfU0VUPiYgc2V0Q3NzUHJvcGVydGllcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDU1NfUFJPUEVSVElFU19TRVQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0aWVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENTU19QUk9QRVJUSUVTX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQ+
JiBzZXRTaG9ydGhhbmRFbnRyaWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNIT1JUSEFORF9F
TlRSSUVTX1NFVCksIHByb3BlcnR5X3Nob3J0aGFuZEVudHJpZXNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInNob3J0aGFuZEVudHJpZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0hPUlRIQU5EX0VOVFJJRVNfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFdJRFRIX1NFVD4mIHNldFdpZHRoKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgV0lEVEhfU0VUKSwgcHJvcGVydHlfd2lkdGhfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxXSURUSF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSEVJR0hUX1NFVD4mIHNldEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhFSUdIVF9TRVQpLCBwcm9wZXJ0
eV9oZWlnaHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJo
ZWlnaHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SEVJR0hUX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTU3R5bGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENTU1N0eWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlPiByZXN1bHQgPSBD
U1NTdHlsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Q3NzUHJvcGVydGllcyguLi4pCiAgICAg
KiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKQogICAgICogICAgIC5zZXRXaWR0aCguLi4p
CiAgICAgKiAgICAgLnNldEhlaWdodCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRT
dHlsZUlkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZUlkPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmpl
Y3QoInN0eWxlSWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJjc3NUZXh0IiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
Q1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5zaW9ucyBhbmQgc291cmNlIG9mZnNldHMu
ICovCmNsYXNzIENTU1Byb3BlcnR5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N0YXR1cycgd2hpbGUgZ2VuZXJhdGlu
ZyBDU1NQcm9wZXJ0eS4KICAgIHN0cnVjdCBTdGF0dXMgewogICAgICAgIGVudW0gRW51bSB7CiAg
ICAgICAgICAgIEFjdGl2ZSA9IDQ0LAogICAgICAgICAgICBJbmFjdGl2ZSA9IDQ1LAogICAgICAg
ICAgICBEaXNhYmxlZCA9IDQ2LAogICAgICAgICAgICBTdHlsZSA9IDQ3LAogICAgICAgIH07CiAg
ICB9OyAvLyBzdHJ1Y3QgU3RhdHVzCgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9
IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgVkFMVUVfU0VUID0gMSA8PCAx
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUHJv
cGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NT
UHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZBTFVFX1NFVD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VUKSwg
cHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPENTU1Byb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1Byb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxDU1NQcm9wZXJ0eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NQ
cm9wZXJ0eT4gcmVzdWx0ID0gQ1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5h
bWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygicHJpb3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNp
dChib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0Iiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigi
cGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVt
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U2hvcnRoYW5kTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3Vy
Y2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBtZWRp
YSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2Un
IHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVkaWEuCiAgICBzdHJ1Y3QgU291cmNlIHsKICAgICAgICBl
bnVtIEVudW0gewogICAgICAgICAgICBNZWRpYVJ1bGUgPSA0OCwKICAgICAgICAgICAgSW1wb3J0
UnVsZSA9IDQ5LAogICAgICAgICAgICBTdHlsZXNoZWV0ID0gNTAsCiAgICAgICAgfTsKICAgIH07
IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBURVhUX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChURVhU
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIENTU01lZGlhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEVY
VF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NNZWRpYT4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTTWVkaWE+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NT
TWVkaWE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU01lZGlhPigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPENTU01lZGlhPiByZXN1bHQgPSBDU1NNZWRpYTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19G
SUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NNZWRpYSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3Vy
Y2UoU291cmNlOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291
cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFNv
dXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlVVJMKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mg
c2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnkgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNUT1JfU0VUID0gMSA8PCAwLAogICAgICAgIFRJTUVf
U0VUID0gMSA8PCAxLAogICAgICAgIEhJVF9DT1VOVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgTUFU
Q0hfQ09VTlRfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNFTEVDVE9S
X1NFVCB8IFRJTUVfU0VUIHwgSElUX0NPVU5UX1NFVCB8IE1BVENIX0NPVU5UX1NFVCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlbGVj
dG9yUHJvZmlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU0VMRUNUT1JfU0VUPiYgc2V0U2VsZWN0b3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRUxFQ1RPUl9T
RVQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNFTEVDVE9SX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
SU1FX1NFVD4mIHNldFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFRJTUVfU0VUKSwgcHJvcGVydHlfdGltZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRpbWUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VElNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgSElUX0NPVU5UX1NFVD4mIHNldEhpdENvdW50KGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBISVRfQ09VTlRfU0VU
KSwgcHJvcGVydHlfaGl0Q291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJoaXRDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxISVRfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1B
VENIX0NPVU5UX1NFVD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1BVENIX0NPVU5UX1NFVCksIHByb3BlcnR5
X21hdGNoQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJtYXRjaENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BVENI
X0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWxlY3Rv
clByb2ZpbGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0
b3JQcm9maWxlRW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNl
bGVjdG9yUHJvZmlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVu
dHJ5PiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0U2VsZWN0b3IoLi4uKQogICAgICogICAgIC5zZXRUaW1lKC4uLikKICAgICAqICAgICAuc2V0
SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRjaENvdW50KC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVu
dHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNlbGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUT1RBTF9USU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwg
MSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUT1RBTF9USU1FX1NFVCB8IERBVEFfU0VUKQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRPVEFMX1RJTUVfU0VUPiYgc2V0VG90YWxUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUT1RBTF9USU1FX1NFVCksIHBy
b3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
T1RBTF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRB
X1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgREFUQV9TRVQpLCBwcm9wZXJ0
eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJkYXRh
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERBVEFfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0gU2VsZWN0b3JQcm9maWxlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJv
ZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENTUwoKbmFtZXNwYWNlIFRpbWVsaW5lIHsKLyogVGlt
ZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNvcmRlZCBhY3Rp
dml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBF
X1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVudD4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZUV2ZW50OwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBE
QVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERBVEFfU0VUKSwgcHJv
cGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
ImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8REFUQV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8VGltZWxpbmVFdmVudD4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFRp
bWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFRpbWVsaW5lRXZlbnQoKSkpOwogICAg
fQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwgdmFsdWUpOwogICAgfQp9
OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpuYW1lc3Bh
Y2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5n
IEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBT
dHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFz
cyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTQ1JJUFRfSURfU0VUID0gMSA8PCAw
LAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NF
VCA9IChTQ1JJUFRfSURfU0VUIHwgTElORV9OVU1CRVJfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTG9jYXRpb247CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTQ1JJUFRfSURfU0VUPiYgc2V0U2NyaXB0SWQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTQ1JJUFRfSURfU0VUKSwgcHJvcGVydHlfc2NyaXB0SWRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ1JJUFRfSURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4mIHNldExpbmVOdW1iZXIoaW50
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExJ
TkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRp
b24+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExvY2F0aW9uPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQgPSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IExvY2F0
aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07
CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5IG9mIGNhbGwgZnJhbWVzIGZvcm0gdGhl
IGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBD
QUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEg
PDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8IDIsCiAgICAgICAgU0NPUEVfQ0hBSU5f
U0VUID0gMSA8PCAzLAogICAgICAgIFRISVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVOQ1RJT05fTkFNRV9TRVQgfCBMT0NBVElP
Tl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDQUxMX0ZSQU1FX0lEX1NFVD4mIHNldENhbGxG
cmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJ
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFt
ZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENBTExfRlJBTUVfSURf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZVTkNUSU9OX05BTUVf
U0VUPiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9w
ZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RlVOQ1RJT05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTE9DQVRJT05fU0VUPiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExPQ0FUSU9OX1NF
VCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TE9DQVRJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFND
T1BFX0NIQUlOX1NFVD4mIHNldFNjb3BlQ2hhaW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0NP
UEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSElT
X1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRI
SVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENhbGxGcmFtZT4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklF
TERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxGcmFtZT4gKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhbGxGcmFt
ZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDYWxsRnJhbWVJ
ZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExv
Y2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0U2NvcGVDaGFpbiguLi4pCiAgICAgKiAgICAgLnNl
dFRoaXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJl
ZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIFNjb3BlIGRlc2NyaXB0aW9uLiAqLwpj
bGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgogICAg
c3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEdsb2JhbCA9IDUx
LAogICAgICAgICAgICBMb2NhbCA9IDUyLAogICAgICAgICAgICBXaXRoID0gNTMsCiAgICAgICAg
ICAgIENsb3N1cmUgPSA1NCwKICAgICAgICAgICAgQ2F0Y2ggPSA1NSwKICAgICAgICB9OwogICAg
fTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBPQkpFQ1RfU0VUID0gMSA8PCAxLAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgT0JKRUNUX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNjb3BlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGU6
OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPQkpFQ1RfU0VUPiYgc2V0
T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1RfU0VUKSwgcHJvcGVydHlfb2JqZWN0X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgib2JqZWN0IiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9CSkVDVF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3Bl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNj
b3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2NvcGUoKSkpOwogICAgfQp9OwoK
fSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBET01EZWJ1Z2dlciB7Ci8qIERP
TSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01CcmVha3BvaW50VHlwZSB7CiAgICBlbnVt
IEVudW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZpZWQgPSA1NiwKICAgICAgICBBdHRyaWJ1dGVf
bW9kaWZpZWQgPSA1NywKICAgICAgICBOb2RlX3JlbW92ZWQgPSA1OCwKICAgIH07Cn07IC8vIHN0
cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5h
bWVzcGFjZSBQcm9maWxlciB7Cn0gLy8gUHJvZmlsZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCgojZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKcHVibGljOgogICAgSW5z
cGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNsYXNzIElu
c3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmFsdWF0
ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7
CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3Jr
ZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZCk7CiAgICAgICAgdm9p
ZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3BlY3RvciogaW5zcGVjdG9yKCkgeyByZXR1
cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVtb3J5IHsKICAgIHB1YmxpYzoKICAgICAg
ICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAmbV9tZW1vcnk7IH0KCiAgICBjbGFzcyBQ
YWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50RXZlbnRG
aXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJs
ZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJh
bWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQ
YWdlKiBwYWdlKCkgeyByZXR1cm4gJm1fcGFnZTsgfQoKICAgIGNsYXNzIFJ1bnRpbWUgewogICAg
cHVibGljOgogICAgICAgIFJ1bnRpbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgUnVudGltZSogcnVudGltZSgpIHsgcmV0dXJuICZtX3J1bnRp
bWU7IH0KCiAgICBjbGFzcyBDb25zb2xlIHsKICAgIHB1YmxpYzoKICAgICAgICBDb25zb2xlKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBtZXNzYWdlQWRkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpD
b25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAg
ICAgICAgdm9pZCBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkKGludCBjb3VudCk7CiAgICAgICAg
dm9pZCBtZXNzYWdlc0NsZWFyZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ29uc29sZSogY29uc29sZSgpIHsgcmV0dXJuICZtX2Nv
bnNvbGU7IH0KCiAgICBjbGFzcyBOZXR3b3JrIHsKICAgIHB1YmxpYzoKICAgICAgICBOZXR3b3Jr
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCByZXF1ZXN0V2lsbEJlU2VudChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcm
IGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3Q+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRvdWJsZSB0aW1lc3RhbXAs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAg
IHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAg
ICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZvaWQgZGF0YVJl
Y2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBpbnQgZGF0
YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKTsKICAgICAgICB2b2lkIGxvYWRpbmdGaW5p
c2hlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAg
dm9pZCBsb2FkaW5nRmFpbGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0
YW1wLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCwgY29uc3QgYm9vbCogY29uc3QgY2FuY2VsZWQp
OwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklk
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkNh
Y2hlZFJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZSk7CiAg
ICAgICAgdm9pZCB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3QoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVxdWVzdCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVk
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDcmVhdGVkKGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgICAgdm9pZCB3
ZWJTb2NrZXRDbG9zZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAp
OwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1cm4gJm1fbmV0d29yazsgfQoKI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCiAgICBjbGFzcyBEYXRhYmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRGF0
YWJhc2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IH0KICAgICAgICB2b2lkIGFkZERhdGFiYXNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkRhdGFiYXNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhYmFzZSk7
CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvbkZhaWxlZChpbnQg
dHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbEVycm9yKTsKICAg
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRGF0
YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0YWJhc2U7IH0KCiNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRE9NU3RvcmFnZSB7CiAgICBwdWJsaWM6CiAgICAg
ICAgRE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gc3RvcmFnZSk7CiAgICAgICAgdm9pZCB1cGRhdGVET01TdG9yYWdlKGludCBzdG9y
YWdlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBET01TdG9yYWdlKiBkb21zdG9yYWdlKCkgeyByZXR1cm4gJm1fZG9tc3RvcmFnZTsg
fQoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgewogICAgcHVibGljOgogICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkKGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50IHN0YXR1cyk7
CiAgICAgICAgdm9pZCBuZXR3b3JrU3RhdGVVcGRhdGVkKGJvb2wgaXNOb3dPbmxpbmUpOwogICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBBcHBs
aWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbmNhY2hlKCkgeyByZXR1cm4gJm1fYXBwbGljYXRpb25j
YWNoZTsgfQoKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIEZpbGVTeXN0ZW0gewog
ICAgcHVibGljOgogICAgICAgIEZpbGVTeXN0ZW0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIHsgcmV0
dXJuICZtX2ZpbGVzeXN0ZW07IH0KCiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBj
bGFzcyBET00gewogICAgcHVibGljOgogICAgICAgIERPTShJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZG9jdW1lbnRVcGRh
dGVkKCk7CiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gbm9kZXMpOwogICAgICAgIHZvaWQgYXR0cmlidXRlTW9kaWZpZWQo
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAg
ICAgICB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKICAgICAgICB2b2lkIGlubGluZVN0eWxlSW52YWxpZGF0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gbm9kZUlkcyk7CiAgICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50
IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKTsKICAgICAgICB2b2lkIGNoaWxk
Tm9kZUNvdW50VXBkYXRlZChpbnQgbm9kZUlkLCBpbnQgY2hpbGROb2RlQ291bnQpOwogICAgICAg
IHZvaWQgY2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZpb3VzTm9k
ZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbm9kZSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVSZW1vdmVkKGludCBw
YXJlbnROb2RlSWQsIGludCBub2RlSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET00qIGRvbSgpIHsgcmV0dXJuICZtX2RvbTsgfQoK
ICAgIGNsYXNzIENTUyB7CiAgICBwdWJsaWM6CiAgICAgICAgQ1NTKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZWRpYVF1
ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0
ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOwogICAgfTsKCiAgICBDU1MqIGNzcygpIHsgcmV0dXJuICZtX2NzczsgfQoKICAgIGNs
YXNzIFRpbWVsaW5lIHsKICAgIHB1YmxpYzoKICAgICAgICBUaW1lbGluZShJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZXZl
bnRSZWNvcmRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWNvcmQpOwogICAgICAgIHZvaWQg
c2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBUaW1lbGluZSogdGlt
ZWxpbmUoKSB7IHJldHVybiAmbV90aW1lbGluZTsgfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQogICAgY2xhc3MgRGVidWdnZXIgewogICAgcHVibGljOgogICAgICAgIERlYnVnZ2Vy
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCBnbG9iYWxPYmplY3RDbGVhcmVkKCk7CiAgICAgICAgdm9pZCBzY3JpcHRQYXJz
ZWQoY29uc3QgU3RyaW5nJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBzdGFydExp
bmUsIGludCBzdGFydENvbHVtbiwgaW50IGVuZExpbmUsIGludCBlbmRDb2x1bW4sIGNvbnN0IGJv
b2wqIGNvbnN0IGlzQ29udGVudFNjcmlwdCwgY29uc3QgU3RyaW5nJiBzb3VyY2VNYXBVUkwpOwog
ICAgICAgIHZvaWQgc2NyaXB0RmFpbGVkVG9QYXJzZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBzY3JpcHRTb3VyY2UsIGludCBzdGFydExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICAgICB2b2lkIGJyZWFrcG9pbnRSZXNvbHZlZChj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uKTsK
ICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAncmVhc29uJyB3aGlsZSBnZW5l
cmF0aW5nIGV2ZW50IHBhdXNlZC4KICAgICAgICBzdHJ1Y3QgUmVhc29uIHsKICAgICAgICAgICAg
ZW51bSBFbnVtIHsKICAgICAgICAgICAgICAgIFhIUiA9IDUsCiAgICAgICAgICAgICAgICBET00g
PSA1OSwKICAgICAgICAgICAgICAgIEV2ZW50TGlzdGVuZXIgPSA2MCwKICAgICAgICAgICAgICAg
IEV4Y2VwdGlvbiA9IDYxLAogICAgICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICAgICAg
fTsKICAgICAgICB9OyAvLyBzdHJ1Y3QgUmVhc29uCgogICAgICAgIHZvaWQgcGF1c2VkKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3Qg
U3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICAg
ICB2b2lkIHJlc3VtZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgRGVidWdnZXIqIGRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZGVidWdn
ZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgRE9NRGVidWdnZXIgewogICAgcHVibGljOgog
ICAgICAgIERPTURlYnVnZ2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIERPTURlYnVnZ2VyKiBkb21kZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2Rv
bWRlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIFByb2ZpbGVyIHsKICAgIHB1Ymxp
YzoKICAgICAgICBQcm9maWxlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkUHJvZmlsZUhlYWRlcihQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gaGVhZGVyKTsKICAgICAgICB2b2lkIGFkZEhlYXBTbmFwc2hvdENo
dW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspOwogICAgICAgIHZvaWQgZmluaXNoSGVh
cFNuYXBzaG90KGludCB1aWQpOwogICAgICAgIHZvaWQgc2V0UmVjb3JkaW5nUHJvZmlsZShib29s
IGlzUHJvZmlsaW5nKTsKICAgICAgICB2b2lkIHJlc2V0UHJvZmlsZXMoKTsKICAgICAgICB2b2lk
IHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKGludCBkb25lLCBpbnQgdG90YWwpOwogICAgICAg
IHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
ID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQcm9maWxl
ciogcHJvZmlsZXIoKSB7IHJldHVybiAmbV9wcm9maWxlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBjbGFzcyBXb3JrZXIg
ewogICAgcHVibGljOgogICAgICAgIFdvcmtlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgd29ya2VyQ3JlYXRlZChpbnQg
d29ya2VySWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGluc3BlY3RvckNvbm5lY3RlZCk7CiAg
ICAgICAgdm9pZCB3b3JrZXJUZXJtaW5hdGVkKGludCB3b3JrZXJJZCk7CiAgICAgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpOwogICAgICAgIHZvaWQgZGlzY29ubmVjdGVkRnJvbVdvcmtlcigp
OwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAg
ICBXb3JrZXIqIHdvcmtlcigpIHsgcmV0dXJuICZtX3dvcmtlcjsgfQoKI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQoKcHJpdmF0ZToKICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICBJbnNwZWN0b3IgbV9pbnNwZWN0b3I7CiAgICBNZW1v
cnkgbV9tZW1vcnk7CiAgICBQYWdlIG1fcGFnZTsKICAgIFJ1bnRpbWUgbV9ydW50aW1lOwogICAg
Q29uc29sZSBtX2NvbnNvbGU7CiAgICBOZXR3b3JrIG1fbmV0d29yazsKI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAgICBEYXRhYmFzZSBtX2RhdGFiYXNlOwojZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKICAgIERPTVN0b3JhZ2UgbV9kb21zdG9yYWdlOwogICAgQXBwbGljYXRpb25DYWNo
ZSBtX2FwcGxpY2F0aW9uY2FjaGU7CiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBGaWxlU3lz
dGVtIG1fZmlsZXN5c3RlbTsKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIERPTSBt
X2RvbTsKICAgIENTUyBtX2NzczsKICAgIFRpbWVsaW5lIG1fdGltZWxpbmU7CiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERlYnVnZ2VyIG1fZGVidWdnZXI7CiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgRE9NRGVidWdnZXIgbV9kb21kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBQcm9maWxl
ciBtX3Byb2ZpbGVyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBF
TkFCTEUoV09SS0VSUykKICAgIFdvcmtlciBtX3dvcmtlcjsKI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQp9OwoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQojZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yRnJvbnRlbmRfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120603</attachid>
            <date>2011-12-27 10:28:19 -0800</date>
            <delta_ts>2011-12-28 08:26:03 -0800</delta_ts>
            <desc>New InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>39770</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVt
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
ICAgICwgbV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJJbnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpJbnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBpbnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNw
ZWN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIklu
c3BlY3Rvci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwg
dXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7
CiAgICBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3Jr
ZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
c3BlY3Rvcjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNw
ZWN0b3IuZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGlt
ZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50
RmlyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZp
cmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFt
cCIsIHRpbWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0
YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBs
b2FkRXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFt
ZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZnJhbWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5h
dmlnYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFt
ZSIsIGZyYW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OlBhZ2U6OmZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZURldGFjaGVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBmcmFtZURldGFjaGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiUGFnZS5mcmFtZURldGFjaGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIGZyYW1lRGV0YWNoZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChmcmFtZURldGFjaGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpDb25zb2xlOjptZXNzYWdlQWRkZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZUFkZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdl
QWRkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3NhZ2VBZGRlZCIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJtZXNzYWdlIiwgbWVz
c2FnZSk7CiAgICBtZXNzYWdlQWRkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlQWRk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNv
bnNvbGU6Om1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImNvdW50IiwgY291
bnQpOwogICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNvbnNvbGU6Om1lc3NhZ2VzQ2xlYXJlZCgpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2FnZXNDbGVhcmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlc0NsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFdpbGxCZVNlbnQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWRpcmVjdFJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2ls
bEJlU2VudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdp
bGxCZVNlbnRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxs
QmVTZW50Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVl
c3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVy
SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRV
UkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3Rh
Y2tUcmFjZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3Rh
Y2tUcmFjZSk7CiAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVkaXJlY3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVx
dWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29y
azo6cmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZSIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCBy
ZXF1ZXN0SWQpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2Fk
ZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiLCB0eXBlKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNw
b25zZSIsIHJlc3BvbnNlKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpkYXRhUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFSZWNlaXZlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5kYXRhUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoImRhdGFMZW5ndGgiLCBkYXRhTGVuZ3RoKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0TnVtYmVyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGVuY29kZWREYXRhTGVuZ3RoKTsK
ICAgIGRhdGFSZWNlaXZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0
KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRhdGFSZWNlaXZlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1w
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIGxv
YWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5pc2hlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwg
Y29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmFpbGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBsb2FkaW5nRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiTmV0d29yay5sb2FkaW5nRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlcnJvclRleHQiLCBlcnJvclRleHQpOwogICAgaWYgKGNhbmNlbGVkKQogICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiY2FuY2VsZWQiLCAqY2FuY2VsZWQpOwogICAg
bG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGYWlsZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRv
ciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2Fj
aGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJh
bWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBkb2N1bWVudFVSTCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJpbml0aWF0b3IiLCBpbml0aWF0b3IpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInJlc291cmNlIiwgcmVzb3VyY2UpOwogICAgcmVxdWVzdFNl
cnZlZEZyb21NZW1vcnlDYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXF1ZXN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRX
aWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0Iik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJl
cXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0
YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXF1ZXN0IiwgcmVxdWVzdCk7CiAg
ICB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCh3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIHVybCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q3Jl
YXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7
CiAgICB3ZWJTb2NrZXRDcmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNP
YmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2ViU29ja2V0Q3Jl
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6d2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRDbG9zZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldENsb3NlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q2xvc2VkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIHdlYlNvY2tldENsb3NlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldENs
b3NlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6YWRkRGF0YWJhc2UoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGFiYXNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGREYXRh
YmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRGF0YWJhc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5hZGREYXRhYmFzZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRhYmFzZSIsIGRhdGFiYXNl
KTsKICAgIGFkZERhdGFiYXNlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRGF0YWJhc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNl
OjpzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25TdWNjZWVk
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0aW9u
U3VjY2VlZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25TdWNjZWVkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiLCBjb2x1bW5OYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJ2YWx1ZXMiLCB2YWx1ZXMpOwogICAgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0YWJhc2U6OnNxbFRyYW5zYWN0
aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3FsRXJyb3IpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbFRyYW5zYWN0aW9uRmFp
bGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzcWxUcmFuc2FjdGlv
bkZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLnNxbFRyYW5zYWN0
aW9uRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRy
YW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciIsIHNxbEVycm9yKTsKICAgIHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3RvcmFnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWRkRE9NU3RvcmFnZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRE9NU3RvcmFnZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2UuYWRkRE9NU3RvcmFnZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzdG9yYWdlIiwgc3RvcmFnZSk7
CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRE9NU3RvcmFnZU1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3Rv
cmFnZTo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB1cGRhdGVET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NU3RvcmFnZS51cGRhdGVET01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJZCk7CiAgICB1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6
YXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLmFwcGxpY2F0aW9uQ2FjaGVT
dGF0dXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
ImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJtYW5pZmVz
dFVSTCIsIG1hbmlmZXN0VVJMKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXMi
LCBzdGF0dXMpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6bmV0
d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiQXBwbGljYXRpb25DYWNoZS5uZXR3b3JrU3RhdGVVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc05vd09ubGluZSIsIGlzTm93T25saW5lKTsK
ICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChuZXR3b3JrU3Rh
dGVVcGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRPTTo6ZG9jdW1lbnRVcGRhdGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
b2N1bWVudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uZG9jdW1lbnRV
cGRhdGVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkb2N1bWVudFVw
ZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6c2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRDaGlsZE5vZGVzTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRDaGlsZE5vZGVzTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMiKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAgIHNldENoaWxkTm9kZXNN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZU1vZGlmaWVkKGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRyaWJ1dGVSZW1vdmVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJ
ZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgYXR0cmli
dXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZVJlbW92ZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6aW5saW5l
U3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmlubGluZVN0eWxlSW52YWxpZGF0ZWQiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlSWRzIiwgbm9kZUlk
cyk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5s
aW5lU3R5bGVJbnZhbGlkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6RE9NOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
aGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRP
TS5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJjaGFyYWN0ZXJEYXRhIiwgY2hhcmFjdGVyRGF0YSk7CiAgICBjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6Y2hpbGROb2Rl
Q291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlQ291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlQ291bnRVcGRhdGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCBjaGlsZE5vZGVDb3VudCk7CiAg
ICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVD
b3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRPTTo6Y2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZp
b3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Y2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoaWxk
Tm9kZUluc2VydGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
InBhcmVudE5vZGVJZCIsIHBhcmVudE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigicHJldmlvdXNOb2RlSWQiLCBwcmV2aW91c05vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnRO
b2RlSWQsIGludCBub2RlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlUmVtb3Zl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJlbnROb2Rl
SWQiLCBwYXJlbnROb2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIs
IG5vZGVJZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY2hp
bGROb2RlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Q1NTOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIkNTUy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlRpbWVsaW5lOjpl
dmVudFJlY29yZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5l
RXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXZlbnRSZWNvcmRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwg
IlRpbWVsaW5lLmV2ZW50UmVjb3JkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVjb3JkIiwgcmVjb3JkKTsKICAgIGV2ZW50UmVjb3JkZWRNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChldmVudFJlY29yZGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlcjo6Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJE
ZWJ1Z2dlci5nbG9iYWxPYmplY3RDbGVhcmVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChnbG9iYWxPYmplY3RDbGVhcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6c2NyaXB0UGFyc2VkKGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3Rh
cnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBp
c0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRl
YnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0
YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFy
dENvbHVtbik7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAg
ICBpZiAoaXNDb250ZW50U2NyaXB0KQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigi
aXNDb250ZW50U2NyaXB0IiwgKmlzQ29udGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygic291cmNlTWFwVVJMIiwgc291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFy
c2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlcnJvck1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFp
bGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
OjpicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBsb2NhdGlvbikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludFJlc29sdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBicmVh
a3BvaW50UmVzb2x2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5icmVh
a3BvaW50UmVzb2x2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZygiYnJlYWtwb2ludElkIiwgYnJlYWtwb2ludElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIGxvY2F0aW9uKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnBhdXNlZChQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGF1c2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5wYXVz
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjYWxsRnJhbWVz
IiwgY2FsbEZyYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVhc29uIiwgcmVh
c29uKTsKICAgIGlmIChkYXRhKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRh
IiwgZGF0YSk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChwYXVzZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpy
ZXN1bWVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdW1lZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzdW1lZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLnJlc3VtZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHJlc3VtZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjphZGRQ
cm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5hZGRQcm9maWxlSGVhZGVyIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImhlYWRlciIsIGhlYWRlcik7CiAgICBhZGRQcm9maWxl
SGVhZGVyTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OmFkZEhl
YXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVua01lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLmFkZEhlYXBTbmFwc2hvdENodW5rIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInVpZCIsIHVpZCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygiY2h1bmsiLCBjaHVuayk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVu
a01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6ZmluaXNo
SGVhcFNuYXBzaG90KGludCB1aWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZpbmlz
aEhlYXBTbmFwc2hvdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZmlu
aXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIuZmlu
aXNoSGVhcFNuYXBzaG90Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1i
ZXIoInVpZCIsIHVpZCk7CiAgICBmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQ
cm9maWxpbmcpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNldFJlY29yZGluZ1Byb2Zp
bGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNldFJlY29yZGluZ1By
b2ZpbGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQcm9maWxlci5zZXRSZWNvcmRpbmdQ
cm9maWxlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc1By
b2ZpbGluZyIsIGlzUHJvZmlsaW5nKTsKICAgIHNldFJlY29yZGluZ1Byb2ZpbGVNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVzZXRQcm9maWxlcygpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc2V0UHJvZmlsZXNNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc2V0UHJvZmlsZXNNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5yZXNldFByb2ZpbGVzIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNldFByb2ZpbGVzTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVwb3J0SGVhcFNuYXBzaG90UHJv
Z3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIucmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZG9uZSIsIGRvbmUpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInRvdGFsIiwgdG90YWwpOwogICAgcmVwb3J0SGVhcFNuYXBzaG90
UHJvZ3Jlc3NNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
c01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
V29ya2VyOjp3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaW5zcGVjdG9yQ29ubmVjdGVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3b3Jr
ZXJDcmVhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiV29ya2VyLndvcmtlckNyZWF0ZWQi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigid29ya2VySWQiLCB3
b3JrZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaW5zcGVjdG9yQ29ubmVjdGVkIiwgaW5zcGVjdG9yQ29u
bmVjdGVkKTsKICAgIHdvcmtlckNyZWF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpXb3JrZXI6OndvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiV29ya2VyLndvcmtlclRlcm1pbmF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigid29ya2VySWQiLCB3b3JrZXJJZCk7CiAgICB3b3JrZXJUZXJtaW5hdGVk
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod29ya2VyVGVybWluYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRpc3BhdGNoTWVzc2FnZUZyb21X
b3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3JrZXIuZGlzcGF0
Y2hNZXNzYWdlRnJvbVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ3b3JrZXJJZCIsIHdvcmtlcklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlck1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNjb25uZWN0
ZWRGcm9tV29ya2VyKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGlzY29ubmVjdGVk
RnJvbVdvcmtlck1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGlzY29u
bmVjdGVkRnJvbVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci5kaXNj
b25uZWN0ZWRGcm9tV29ya2VyIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChkaXNjb25uZWN0ZWRGcm9tV29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKCmNvbnN0IFN0
cmluZyBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewogICAgIkRvY3VtZW50IiwKICAgICJTdHls
ZXNoZWV0IiwKICAgICJJbWFnZSIsCiAgICAiRm9udCIsCiAgICAiU2NyaXB0IiwKICAgICJYSFIi
LAogICAgIldlYlNvY2tldCIsCiAgICAiT3RoZXIiLAogICAgIm9iamVjdCIsCiAgICAiZnVuY3Rp
b24iLAogICAgInVuZGVmaW5lZCIsCiAgICAic3RyaW5nIiwKICAgICJudW1iZXIiLAogICAgImJv
b2xlYW4iLAogICAgImFycmF5IiwKICAgICJudWxsIiwKICAgICJub2RlIiwKICAgICJyZWdleHAi
LAogICAgImRhdGUiLAogICAgImh0bWwiLAogICAgIndtbCIsCiAgICAieG1sIiwKICAgICJqYXZh
c2NyaXB0IiwKICAgICJuZXR3b3JrIiwKICAgICJjb25zb2xlLWFwaSIsCiAgICAib3RoZXIiLAog
ICAgInRpcCIsCiAgICAibG9nIiwKICAgICJ3YXJuaW5nIiwKICAgICJlcnJvciIsCiAgICAiZGVi
dWciLAogICAgImRpciIsCiAgICAiZGlyeG1sIiwKICAgICJ0cmFjZSIsCiAgICAic3RhcnRHcm91
cCIsCiAgICAic3RhcnRHcm91cENvbGxhcHNlZCIsCiAgICAiZW5kR3JvdXAiLAogICAgImFzc2Vy
dCIsCiAgICAicGFyc2VyIiwKICAgICJzY3JpcHQiLAogICAgInVzZXIiLAogICAgInVzZXItYWdl
bnQiLAogICAgImluc3BlY3RvciIsCiAgICAiIiwKICAgICJhY3RpdmUiLAogICAgImluYWN0aXZl
IiwKICAgICJkaXNhYmxlZCIsCiAgICAic3R5bGUiLAogICAgIm1lZGlhUnVsZSIsCiAgICAiaW1w
b3J0UnVsZSIsCiAgICAic3R5bGVzaGVldCIsCiAgICAiZ2xvYmFsIiwKICAgICJsb2NhbCIsCiAg
ICAid2l0aCIsCiAgICAiY2xvc3VyZSIsCiAgICAiY2F0Y2giLAogICAgInN1YnRyZWUtbW9kaWZp
ZWQiLAogICAgImF0dHJpYnV0ZS1tb2RpZmllZCIsCiAgICAibm9kZS1yZW1vdmVkIiwKICAgICJE
T00iLAogICAgIkV2ZW50TGlzdGVuZXIiLAogICAgImV4Y2VwdGlvbiIKfTsKCmNvbnN0IFN0cmlu
ZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1swXTsKfQoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCn0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120604</attachid>
            <date>2011-12-27 10:31:36 -0800</date>
            <delta_ts>2011-12-28 08:27:32 -0800</delta_ts>
            <desc>Generator output diff</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>14603</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">NDBhNDEsNDMKPiAKPiBjb25zdCBTdHJpbmcmIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KTsKPiAKMTkxLDIwMGMxOTQsMjA1CjwgbmFtZXNwYWNlIFJlc291cmNlVHlwZSB7CjwgY29uc3Qg
Y2hhciogY29uc3QgZG9jdW1lbnQgPSAiRG9jdW1lbnQiOwo8IGNvbnN0IGNoYXIqIGNvbnN0IHN0
eWxlc2hlZXQgPSAiU3R5bGVzaGVldCI7CjwgY29uc3QgY2hhciogY29uc3QgaW1hZ2UgPSAiSW1h
Z2UiOwo8IGNvbnN0IGNoYXIqIGNvbnN0IGZvbnQgPSAiRm9udCI7CjwgY29uc3QgY2hhciogY29u
c3Qgc2NyaXB0ID0gIlNjcmlwdCI7CjwgY29uc3QgY2hhciogY29uc3QgeGhyID0gIlhIUiI7Cjwg
Y29uc3QgY2hhciogY29uc3Qgd2ViU29ja2V0ID0gIldlYlNvY2tldCI7CjwgY29uc3QgY2hhciog
Y29uc3Qgb3RoZXIgPSAiT3RoZXIiOwo8IH0gLy8gbmFtZXNwYWNlIFJlc291cmNlVHlwZQotLS0K
PiBzdHJ1Y3QgUmVzb3VyY2VUeXBlIHsKPiAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgIERvY3Vt
ZW50ID0gMCwKPiAgICAgICAgIFN0eWxlc2hlZXQgPSAxLAo+ICAgICAgICAgSW1hZ2UgPSAyLAo+
ICAgICAgICAgRm9udCA9IDMsCj4gICAgICAgICBTY3JpcHQgPSA0LAo+ICAgICAgICAgWEhSID0g
NSwKPiAgICAgICAgIFdlYlNvY2tldCA9IDYsCj4gICAgICAgICBPdGhlciA9IDcsCj4gICAgIH07
Cj4gfTsgLy8gc3RydWN0IFJlc291cmNlVHlwZQozMzVhMzQxLDM0Nwo+ICAgICAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291
cmNlVHlwZTo6RW51bSB2YWx1ZSkKPiAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9z
ZXQpOwo+ICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUWVBFX1NFVD4oKTsKPiAgICAgICAgICAgICB9Cj4gICAgIAo3MjUsNzQyYzczNyw3NTgKPCAg
ICAgLy8gLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBSZW1vdGVPYmplY3QuCjwgICAgIC8vIG5hbWVzcGFjZSBUeXBlIHsKPCAgICAgLy8gY29uc3Qg
Y2hhciogY29uc3Qgb2JqZWN0ID0gIm9iamVjdCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0
IGZ1bmN0aW9uID0gImZ1bmN0aW9uIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgdW5kZWZp
bmVkID0gInVuZGVmaW5lZCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZyA9ICJz
dHJpbmciOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBudW1iZXIgPSAibnVtYmVyIjsKPCAg
ICAgLy8gY29uc3QgY2hhciogY29uc3QgYm9vbGVhbiA9ICJib29sZWFuIjsKPCAgICAgLy8gfSAv
LyBuYW1lc3BhY2UgVHlwZQo8IAo8ICAgICAvLyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICdzdWJ0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KPCAgICAgLy8gbmFtZXNw
YWNlIFN1YnR5cGUgewo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBhcnJheSA9ICJhcnJheSI7
CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG51bGwgPSAibnVsbCI7CjwgICAgIC8vIGNvbnN0
IGNoYXIqIGNvbnN0IG5vZGUgPSAibm9kZSI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHJl
Z2V4cCA9ICJyZWdleHAiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBkYXRlID0gImRhdGUi
Owo8ICAgICAvLyB9IC8vIG5hbWVzcGFjZSBTdWJ0eXBlCi0tLQo+ICAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KPiAg
ICAgc3RydWN0IFR5cGUgewo+ICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgICAgICBPYmpl
Y3QgPSA4LAo+ICAgICAgICAgICAgIEZ1bmN0aW9uID0gOSwKPiAgICAgICAgICAgICBVbmRlZmlu
ZWQgPSAxMCwKPiAgICAgICAgICAgICBTdHJpbmcgPSAxMSwKPiAgICAgICAgICAgICBOdW1iZXIg
PSAxMiwKPiAgICAgICAgICAgICBCb29sZWFuID0gMTMsCj4gICAgICAgICB9Owo+ICAgICB9OyAv
LyBzdHJ1Y3QgVHlwZQo+IAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdWJ0
eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KPiAgICAgc3RydWN0IFN1YnR5cGUg
ewo+ICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgICAgICBBcnJheSA9IDE0LAo+ICAgICAg
ICAgICAgIE51bGwgPSAxNSwKPiAgICAgICAgICAgICBOb2RlID0gMTYsCj4gICAgICAgICAgICAg
UmVnZXhwID0gMTcsCj4gICAgICAgICAgICAgRGF0ZSA9IDE4LAo+ICAgICAgICAgfTsKPiAgICAg
fTsgLy8gc3RydWN0IFN1YnR5cGUKNzY3YTc4NCw3OTAKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwg
Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRZUEVfU0VUPigpOwo+ICAgICAgICAgfQo+IAo3OTZhODIwLDgyNAo+ICAgICB2b2lkIHNl
dFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkKPiAgICAgewo+ICAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJzdWJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgfQo+
IAo5OTcsMTAyN2MxMDI1LDEwNjEKPCAgICAgLy8gLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgo8ICAgICAvLyBuYW1l
c3BhY2UgU291cmNlIHsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgaHRtbCA9ICJodG1sIjsK
PCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qgd21sID0gIndtbCI7CjwgICAgIC8vIGNvbnN0IGNo
YXIqIGNvbnN0IHhtbCA9ICJ4bWwiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBqYXZhc2Ny
aXB0ID0gImphdmFzY3JpcHQiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBuZXR3b3JrID0g
Im5ldHdvcmsiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBjb25zb2xlX2FwaSA9ICJjb25z
b2xlLWFwaSI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG90aGVyID0gIm90aGVyIjsKPCAg
ICAgLy8gfSAvLyBuYW1lc3BhY2UgU291cmNlCjwgCjwgICAgIC8vIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgo8ICAg
ICAvLyBuYW1lc3BhY2UgTGV2ZWwgewo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCB0aXAgPSAi
dGlwIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgbG9nID0gImxvZyI7CjwgICAgIC8vIGNv
bnN0IGNoYXIqIGNvbnN0IHdhcm5pbmcgPSAid2FybmluZyI7CjwgICAgIC8vIGNvbnN0IGNoYXIq
IGNvbnN0IGVycm9yID0gImVycm9yIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgZGVidWcg
PSAiZGVidWciOwo8ICAgICAvLyB9IC8vIG5hbWVzcGFjZSBMZXZlbAo8IAo8ICAgICAvLyAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVN
ZXNzYWdlLgo8ICAgICAvLyBuYW1lc3BhY2UgVHlwZSB7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNv
bnN0IGxvZyA9ICJsb2ciOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBkaXIgPSAiZGlyIjsK
PCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgZGlyeG1sID0gImRpcnhtbCI7CjwgICAgIC8vIGNv
bnN0IGNoYXIqIGNvbnN0IHRyYWNlID0gInRyYWNlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29u
c3Qgc3RhcnRHcm91cCA9ICJzdGFydEdyb3VwIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qg
c3RhcnRHcm91cENvbGxhcHNlZCA9ICJzdGFydEdyb3VwQ29sbGFwc2VkIjsKPCAgICAgLy8gY29u
c3QgY2hhciogY29uc3QgZW5kR3JvdXAgPSAiZW5kR3JvdXAiOwo8ICAgICAvLyBjb25zdCBjaGFy
KiBjb25zdCBhc3NlcnQgPSAiYXNzZXJ0IjsKPCAgICAgLy8gfSAvLyBuYW1lc3BhY2UgVHlwZQot
LS0KPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5l
cmF0aW5nIENvbnNvbGVNZXNzYWdlLgo+ICAgICBzdHJ1Y3QgU291cmNlIHsKPiAgICAgICAgIGVu
dW0gRW51bSB7Cj4gICAgICAgICAgICAgSHRtbCA9IDE5LAo+ICAgICAgICAgICAgIFdtbCA9IDIw
LAo+ICAgICAgICAgICAgIFhtbCA9IDIxLAo+ICAgICAgICAgICAgIEphdmFzY3JpcHQgPSAyMiwK
PiAgICAgICAgICAgICBOZXR3b3JrID0gMjMsCj4gICAgICAgICAgICAgQ29uc29sZV9hcGkgPSAy
NCwKPiAgICAgICAgICAgICBPdGhlciA9IDI1LAo+ICAgICAgICAgfTsKPiAgICAgfTsgLy8gc3Ry
dWN0IFNvdXJjZQo+IAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdsZXZlbCcg
d2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KPiAgICAgc3RydWN0IExldmVsIHsKPiAg
ICAgICAgIGVudW0gRW51bSB7Cj4gICAgICAgICAgICAgVGlwID0gMjYsCj4gICAgICAgICAgICAg
TG9nID0gMjcsCj4gICAgICAgICAgICAgV2FybmluZyA9IDI4LAo+ICAgICAgICAgICAgIEVycm9y
ID0gMjksCj4gICAgICAgICAgICAgRGVidWcgPSAzMCwKPiAgICAgICAgIH07Cj4gICAgIH07IC8v
IHN0cnVjdCBMZXZlbAo+IAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBl
JyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgo+ICAgICBzdHJ1Y3QgVHlwZSB7Cj4g
ICAgICAgICBlbnVtIEVudW0gewo+ICAgICAgICAgICAgIExvZyA9IDI3LAo+ICAgICAgICAgICAg
IERpciA9IDMxLAo+ICAgICAgICAgICAgIERpcnhtbCA9IDMyLAo+ICAgICAgICAgICAgIFRyYWNl
ID0gMzMsCj4gICAgICAgICAgICAgU3RhcnRHcm91cCA9IDM0LAo+ICAgICAgICAgICAgIFN0YXJ0
R3JvdXBDb2xsYXBzZWQgPSAzNSwKPiAgICAgICAgICAgICBFbmRHcm91cCA9IDM2LAo+ICAgICAg
ICAgICAgIEFzc2VydCA9IDM3LAo+ICAgICAgICAgfTsKPiAgICAgfTsgLy8gc3RydWN0IFR5cGUK
MTA1NGExMDg5LDEwOTUKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfU0VUPiYgc2V0
U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU09VUkNFX1NFVCksIHByb3BlcnR5X3NvdXJjZV9hbHJlYWR5
X3NldCk7Cj4gICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNP
VVJDRV9TRVQ+KCk7Cj4gICAgICAgICB9Cj4gCjEwNjFhMTEwMywxMTA5Cj4gICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoTGV2ZWw6OkVudW0gdmFsdWUpCj4gICAg
ICAgICB7Cj4gICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExFVkVMX1NFVCks
IHByb3BlcnR5X2xldmVsX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cj4gICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxMRVZFTF9TRVQ+KCk7Cj4gICAgICAgICB9Cj4gCjEwOTlhMTE0
OCwxMTUyCj4gICAgIHZvaWQgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQo+ICAgICB7Cj4gICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkp
Owo+ICAgICB9Cj4gCjE3OTBhMTg0NCwxODUwCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQ
RV9TRVQ+JiBzZXRUeXBlKFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gdmFs
dWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZ
UEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cj4gICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKPiAgICAgICAgIH0KPiAKMTg0
MSwxODQ2YzE5MDEsMTkwOAo8ICAgICAvLyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0
eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEluaXRpYXRvci4KPCAgICAgLy8gbmFtZXNwYWNlIFR5cGUg
ewo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBwYXJzZXIgPSAicGFyc2VyIjsKPCAgICAgLy8g
Y29uc3QgY2hhciogY29uc3Qgc2NyaXB0ID0gInNjcmlwdCI7CjwgICAgIC8vIGNvbnN0IGNoYXIq
IGNvbnN0IG90aGVyID0gIm90aGVyIjsKPCAgICAgLy8gfSAvLyBuYW1lc3BhY2UgVHlwZQotLS0K
PiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBJbml0aWF0b3IuCj4gICAgIHN0cnVjdCBUeXBlIHsKPiAgICAgICAgIGVudW0gRW51bSB7Cj4g
ICAgICAgICAgICAgUGFyc2VyID0gMzgsCj4gICAgICAgICAgICAgU2NyaXB0ID0gMzksCj4gICAg
ICAgICAgICAgT3RoZXIgPSAyNSwKPiAgICAgICAgIH07Cj4gICAgIH07IC8vIHN0cnVjdCBUeXBl
CjE4NzFhMTkzNCwxOTQwCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRU
eXBlKFR5cGU6OkVudW0gdmFsdWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cj4g
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7Cj4gICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsK
PiAgICAgICAgIH0KPiAKMzIxNywzMjIzYzMyODYsMzI5NAo8ICAgICAvLyAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdvcmlnaW4nIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUnVsZS4KPCAgICAg
Ly8gbmFtZXNwYWNlIE9yaWdpbiB7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHVzZXIgPSAi
dXNlciI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHVzZXJfYWdlbnQgPSAidXNlci1hZ2Vu
dCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvciA9ICJpbnNwZWN0b3IiOwo8
ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCAgPSAiIjsKPCAgICAgLy8gfSAvLyBuYW1lc3BhY2Ug
T3JpZ2luCi0tLQo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdvcmlnaW4nIHdo
aWxlIGdlbmVyYXRpbmcgQ1NTUnVsZS4KPiAgICAgc3RydWN0IE9yaWdpbiB7Cj4gICAgICAgICBl
bnVtIEVudW0gewo+ICAgICAgICAgICAgIFVzZXIgPSA0MCwKPiAgICAgICAgICAgICBVc2VyX2Fn
ZW50ID0gNDEsCj4gICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIsCj4gICAgICAgICAgICAgRW1w
dHkgPSA0MywKPiAgICAgICAgIH07Cj4gICAgIH07IC8vIHN0cnVjdCBPcmlnaW4KMzI2NWEzMzM3
LDMzNDMKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKE9y
aWdpbjo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgT1JJR0lOX1NFVCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7Cj4g
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgZ2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SSUdJTl9TRVQ+
KCk7Cj4gICAgICAgICB9Cj4gCjM1NTksMzU2NWMzNjM3LDM2NDUKPCAgICAgLy8gLy8gTmFtZWQg
YWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3RhdHVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1Byb3BlcnR5
Lgo8ICAgICAvLyBuYW1lc3BhY2UgU3RhdHVzIHsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qg
YWN0aXZlID0gImFjdGl2ZSI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGluYWN0aXZlID0g
ImluYWN0aXZlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgZGlzYWJsZWQgPSAiZGlzYWJs
ZWQiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBzdHlsZSA9ICJzdHlsZSI7CjwgICAgIC8v
IH0gLy8gbmFtZXNwYWNlIFN0YXR1cwotLS0KPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnc3RhdHVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1Byb3BlcnR5Lgo+ICAgICBzdHJ1Y3Qg
U3RhdHVzIHsKPiAgICAgICAgIGVudW0gRW51bSB7Cj4gICAgICAgICAgICAgQWN0aXZlID0gNDQs
Cj4gICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwKPiAgICAgICAgICAgICBEaXNhYmxlZCA9IDQ2
LAo+ICAgICAgICAgICAgIFN0eWxlID0gNDcsCj4gICAgICAgICB9Owo+ICAgICB9OyAvLyBzdHJ1
Y3QgU3RhdHVzCjM2NDhhMzcyOSwzNzMzCj4gICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1czo6RW51
bSB2YWx1ZSkKPiAgICAgewo+ICAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCBnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICB9Cj4gCjM2NjgsMzY3M2MzNzUzLDM3NjAK
PCAgICAgLy8gLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5l
cmF0aW5nIENTU01lZGlhLgo8ICAgICAvLyBuYW1lc3BhY2UgU291cmNlIHsKPCAgICAgLy8gY29u
c3QgY2hhciogY29uc3QgbWVkaWFSdWxlID0gIm1lZGlhUnVsZSI7CjwgICAgIC8vIGNvbnN0IGNo
YXIqIGNvbnN0IGltcG9ydFJ1bGUgPSAiaW1wb3J0UnVsZSI7CjwgICAgIC8vIGNvbnN0IGNoYXIq
IGNvbnN0IHN0eWxlc2hlZXQgPSAic3R5bGVzaGVldCI7CjwgICAgIC8vIH0gLy8gbmFtZXNwYWNl
IFNvdXJjZQotLS0KPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3
aGlsZSBnZW5lcmF0aW5nIENTU01lZGlhLgo+ICAgICBzdHJ1Y3QgU291cmNlIHsKPiAgICAgICAg
IGVudW0gRW51bSB7Cj4gICAgICAgICAgICAgTWVkaWFSdWxlID0gNDgsCj4gICAgICAgICAgICAg
SW1wb3J0UnVsZSA9IDQ5LAo+ICAgICAgICAgICAgIFN0eWxlc2hlZXQgPSA1MCwKPiAgICAgICAg
IH07Cj4gICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKMzcyN2EzODE1LDM4MTkKPiAgICAgdm9pZCBz
ZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVlKQo+ICAgICB7Cj4gICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cj4gICAgIH0KPiAK
NDE0Nyw0MTU0YzQyMzksNDI0OAo8ICAgICAvLyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgo8ICAgICAvLyBuYW1lc3BhY2UgVHlwZSB7
CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGdsb2JhbCA9ICJnbG9iYWwiOwo8ICAgICAvLyBj
b25zdCBjaGFyKiBjb25zdCBsb2NhbCA9ICJsb2NhbCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNv
bnN0IHdpdGggPSAid2l0aCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGNsb3N1cmUgPSAi
Y2xvc3VyZSI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGNoID0gImNhdGNoIjsKPCAg
ICAgLy8gfSAvLyBuYW1lc3BhY2UgVHlwZQotLS0KPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBTY29wZS4KPiAgICAgc3RydWN0IFR5cGUg
ewo+ICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgICAgICBHbG9iYWwgPSA1MSwKPiAgICAg
ICAgICAgICBMb2NhbCA9IDUyLAo+ICAgICAgICAgICAgIFdpdGggPSA1MywKPiAgICAgICAgICAg
ICBDbG9zdXJlID0gNTQsCj4gICAgICAgICAgICAgQ2F0Y2ggPSA1NSwKPiAgICAgICAgIH07Cj4g
ICAgIH07IC8vIHN0cnVjdCBUeXBlCjQxODBhNDI3NSw0MjgxCj4gICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCj4gICAgICAgICB7Cj4g
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlf
dHlwZV9hbHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlw
ZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cj4gICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUWVBFX1NFVD4oKTsKPiAgICAgICAgIH0KPiAKNDIyNSw0MjI5YzQzMjYsNDMzMgo8
IG5hbWVzcGFjZSBET01CcmVha3BvaW50VHlwZSB7CjwgY29uc3QgY2hhciogY29uc3Qgc3VidHJl
ZV9tb2RpZmllZCA9ICJzdWJ0cmVlLW1vZGlmaWVkIjsKPCBjb25zdCBjaGFyKiBjb25zdCBhdHRy
aWJ1dGVfbW9kaWZpZWQgPSAiYXR0cmlidXRlLW1vZGlmaWVkIjsKPCBjb25zdCBjaGFyKiBjb25z
dCBub2RlX3JlbW92ZWQgPSAibm9kZS1yZW1vdmVkIjsKPCB9IC8vIG5hbWVzcGFjZSBET01CcmVh
a3BvaW50VHlwZQotLS0KPiBzdHJ1Y3QgRE9NQnJlYWtwb2ludFR5cGUgewo+ICAgICBlbnVtIEVu
dW0gewo+ICAgICAgICAgU3VidHJlZV9tb2RpZmllZCA9IDU2LAo+ICAgICAgICAgQXR0cmlidXRl
X21vZGlmaWVkID0gNTcsCj4gICAgICAgICBOb2RlX3JlbW92ZWQgPSA1OCwKPiAgICAgfTsKPiB9
OyAvLyBzdHJ1Y3QgRE9NQnJlYWtwb2ludFR5cGUKNDMyMGM0NDIzCjwgICAgICAgICB2b2lkIHJl
c3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3Ry
aW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7Ci0tLQo+ICAgICAgICAgdm9p
ZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qVHlw
ZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSovIGNvbnN0IFN0cmluZyYgdHlwZSwg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwo0NDQ0LDQ0NTFjNDU0Nyw0NTU2CjwgICAgIC8v
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFzb24nIHdoaWxlIGdlbmVyYXRpbmcg
ZXZlbnQgcGF1c2VkLgo8ICAgICAvLyBuYW1lc3BhY2UgUmVhc29uIHsKPCAgICAgLy8gY29uc3Qg
Y2hhciogY29uc3QgeGhyID0gIlhIUiI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGRvbSA9
ICJET00iOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBldmVudExpc3RlbmVyID0gIkV2ZW50
TGlzdGVuZXIiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb24gPSAiZXhjZXB0
aW9uIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAib3RoZXIiOwo8ICAgICAv
LyB9IC8vIG5hbWVzcGFjZSBSZWFzb24KLS0tCj4gICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgbmFtZSAncmVhc29uJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNlZC4KPiAgICAg
ICAgIHN0cnVjdCBSZWFzb24gewo+ICAgICAgICAgICAgIGVudW0gRW51bSB7Cj4gICAgICAgICAg
ICAgICAgIFhIUiA9IDUsCj4gICAgICAgICAgICAgICAgIERPTSA9IDU5LAo+ICAgICAgICAgICAg
ICAgICBFdmVudExpc3RlbmVyID0gNjAsCj4gICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiA9IDYx
LAo+ICAgICAgICAgICAgICAgICBPdGhlciA9IDI1LAo+ICAgICAgICAgICAgIH07Cj4gICAgICAg
ICB9OyAvLyBzdHJ1Y3QgUmVhc29uCjQ0NTNjNDU1OAo8ICAgICAgICAgdm9pZCBwYXVzZWQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiByZWFzb24s
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKLS0tCj4gICAgICAgICB2b2lkIHBh
dXNlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51
bSovIGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSk7CjIwOWMyMDkKPCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpyZXNwb25zZVJl
Y2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgbG9hZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpCi0tLQo+IHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVz
dGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3Ry
aW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSkKNjAzYzYwMwo8IHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpwYXVzZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBkYXRhKQotLS0KPiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6cGF1
c2VkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVt
Ki8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
KQo3NDhhNzQ5LDgyMQo+IG5hbWVzcGFjZSBUeXBlQnVpbGRlciB7Cj4gCj4gY29uc3QgU3RyaW5n
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cj4gICAgICJEb2N1bWVudCIsCj4gICAgICJTdHls
ZXNoZWV0IiwKPiAgICAgIkltYWdlIiwKPiAgICAgIkZvbnQiLAo+ICAgICAiU2NyaXB0IiwKPiAg
ICAgIlhIUiIsCj4gICAgICJXZWJTb2NrZXQiLAo+ICAgICAiT3RoZXIiLAo+ICAgICAib2JqZWN0
IiwKPiAgICAgImZ1bmN0aW9uIiwKPiAgICAgInVuZGVmaW5lZCIsCj4gICAgICJzdHJpbmciLAo+
ICAgICAibnVtYmVyIiwKPiAgICAgImJvb2xlYW4iLAo+ICAgICAiYXJyYXkiLAo+ICAgICAibnVs
bCIsCj4gICAgICJub2RlIiwKPiAgICAgInJlZ2V4cCIsCj4gICAgICJkYXRlIiwKPiAgICAgImh0
bWwiLAo+ICAgICAid21sIiwKPiAgICAgInhtbCIsCj4gICAgICJqYXZhc2NyaXB0IiwKPiAgICAg
Im5ldHdvcmsiLAo+ICAgICAiY29uc29sZS1hcGkiLAo+ICAgICAib3RoZXIiLAo+ICAgICAidGlw
IiwKPiAgICAgImxvZyIsCj4gICAgICJ3YXJuaW5nIiwKPiAgICAgImVycm9yIiwKPiAgICAgImRl
YnVnIiwKPiAgICAgImRpciIsCj4gICAgICJkaXJ4bWwiLAo+ICAgICAidHJhY2UiLAo+ICAgICAi
c3RhcnRHcm91cCIsCj4gICAgICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKPiAgICAgImVuZEdyb3Vw
IiwKPiAgICAgImFzc2VydCIsCj4gICAgICJwYXJzZXIiLAo+ICAgICAic2NyaXB0IiwKPiAgICAg
InVzZXIiLAo+ICAgICAidXNlci1hZ2VudCIsCj4gICAgICJpbnNwZWN0b3IiLAo+ICAgICAiIiwK
PiAgICAgImFjdGl2ZSIsCj4gICAgICJpbmFjdGl2ZSIsCj4gICAgICJkaXNhYmxlZCIsCj4gICAg
ICJzdHlsZSIsCj4gICAgICJtZWRpYVJ1bGUiLAo+ICAgICAiaW1wb3J0UnVsZSIsCj4gICAgICJz
dHlsZXNoZWV0IiwKPiAgICAgImdsb2JhbCIsCj4gICAgICJsb2NhbCIsCj4gICAgICJ3aXRoIiwK
PiAgICAgImNsb3N1cmUiLAo+ICAgICAiY2F0Y2giLAo+ICAgICAic3VidHJlZS1tb2RpZmllZCIs
Cj4gICAgICJhdHRyaWJ1dGUtbW9kaWZpZWQiLAo+ICAgICAibm9kZS1yZW1vdmVkIiwKPiAgICAg
IkRPTSIsCj4gICAgICJFdmVudExpc3RlbmVyIiwKPiAgICAgImV4Y2VwdGlvbiIKPiB9Owo+IAo+
IGNvbnN0IFN0cmluZyYgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKPiAgICAgcmV0
dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzWzBdOwo+IH0KPiAKPiB9IC8vIG5hbWVzcGFjZSBUeXBl
QnVpbGRlcgo+IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120671</attachid>
            <date>2011-12-28 08:18:52 -0800</date>
            <delta_ts>2012-01-11 06:18:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74954-20111228201850.patch</filename>
            <type>text/plain</type>
            <size>17696</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi44NTBkOWMzM2I1YTMxMWYw
M2RhYzk0ZjZmYTJhYjQzYzdhODk2OWIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsNiArNTEsNyBAQCBET01BSU5f
REVGSU5FX05BTUVfTUFQID0gewogIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSBy
ZXBsYWNlbWVudHMuCiBUWVBFX05BTUVfRklYX01BUCA9IHsKICAgICAiUkdCQSI6ICJSZ2JhIiwg
ICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUg
aW4gV2luZG93cyBDRS4KKyAgICAiIjogIkVtcHR5IiwKIH0KIAogCkBAIC01MTksNiArNTIwLDI4
IEBAIGNsYXNzIFdyaXRlcjoKICAgICAgICAgcmV0dXJuIFdyaXRlcihuZXdfb3V0cHV0LCBzZWxm
LmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQogCiAKK2NsYXNzIEVudW1Db25zdGFudHM6Cisg
ICAgbWFwXyA9IHt9CisgICAgY29uc3RhbnRzXyA9IFtdCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgorICAgICAgICBpZiB2YWx1ZSBpbiBjbHMu
bWFwXzoKKyAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1ZV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKKyAgICAgICAgICAgIGNscy5tYXBfW3Zh
bHVlXSA9IHBvcworICAgICAgICAgICAgY2xzLmNvbnN0YW50c18uYXBwZW5kKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHBvcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9lbnVt
X2NvbnN0YW50X2NvZGUoY2xzKToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZm9yIGl0
ZW0gaW4gY2xzLmNvbnN0YW50c186CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgXCIi
ICsgaXRlbSArICJcIiIpCisgICAgICAgIHJldHVybiBqb2luKG91dHB1dCwgIixcbiIpICsgIlxu
IgorCisKIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNy
ZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5f
bmFtZSwgdHlwZV9kYXRhKToKQEAgLTUyNiw2ICs1NDksNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UK
KyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0
X2RvbWFpbl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAg
ICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NDYsNiArNTcwLDcgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAg
ICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQorICAgICAgICAg
ICAgZnVsbF9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAgLTU3MSwyMyArNTk2LDI4IEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5l
cmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBm
b3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29t
bWVudF9vdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3
cml0ZXIuZ2V0X2luZGVudGVkKCIvLyAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1l
c3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
InN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgZW51bSBFbnVtIHtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5y
ZXBsYWNlKCctJywgJ18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2Vf
dG9fbG93ZXIoaXRlbV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05BTUVf
RklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgICAgICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVjdCAi
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIp
CiAKQEAgLTU5OSw3ICs2MjksMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVO
VCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6
RW51bSIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykiCiAKICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYg
cmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC02MzMsNiArNjY3LDEwIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgI0ZJWE1FOiByZXR1cm4gYSB0eXBlZGVmIG5hbWUgaW5zdGVhZC4K
QEAgLTcxNSwyOCArNzUzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJh
bV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBhcmFt
X3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChw
YXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VU
UFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGlu
ZSgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBl
X29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
X211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyks
IHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygi
JXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9u
YW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChw
YXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFt
ZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVf
YmluZGluZywgInZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9j
b2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmlu
ZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5l
KCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMs
MTMgKzgxMiwxNSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRh
bGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9p
ZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQo
RmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMo
XCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdl
bmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAg
IHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0Lmdl
dF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAg
ICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFy
YW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs4NjYsMTEgQEAg
Y2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAog
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwp
OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3Nf
bmFtZSArICI+IgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIg
KyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsg
Ij4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBA
IC04NDQsNiArODg5LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQ
YXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICs5NDQsMTAgQEAgY2xhc3MgVHlwZUJp
bmRpbmdzOgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAK
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3Zh
bHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKICAgICAgICAgICAgICAgICByZXR1cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsx
MTUyLDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVp
bGRlciB7CiAke2ZvcndhcmRzfQorCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCiAke3R5cGVCdWlsZGVyc30KIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKQEAg
LTE1NDEsNiArMTU5NywxNyBAQCAkY29uc3RydWN0b3JJbml0ewogCiAkbWV0aG9kcwogCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCitjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0geworJGVudW1Db25zdGFudFZhbHVlc307CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTYzNSw1OSBA
QCBkZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToK
ICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMgbWV0aG9k
IGdlbmVyYXRlIG1vZGVzIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFyIHNldHRl
cgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFzIG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBwYXJhbWV0
ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhvZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQgY29tbWVu
dGVkIGFubm90YXRpb24gYWJvdXQgZXhwZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBuYW1lIG9y
IGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdoZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBwYXJhbWV0
ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJlbnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RHZW5lcmF0
ZU1vZGVzOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0eXBlX2Jp
bmRpbmcpOgorICAgICAgICBpZiB0eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0
aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlmZmVyZW50LgorICAgICAgICAgICAgcmV0dXJuIFtjbHMu
U3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xzLlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAjIEluIHJhdyBhbmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIHRo
ZSBzYW1lLgorICAgICAgICAgICAgIyBPbmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5cGUgaW4g
Y29tbWVudHMuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisKKyAgICBj
bGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJh
bV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1f
dHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAg
ICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1
ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3Jl
ZgorCisgICAgY2xhc3MgUmF3UGFyYW1ldGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAg
ICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFt
X3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZV9yZWYKKworICAgIGNsYXNzIENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJl
ZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERF
Ul9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAorICAgICAgICAgICAgICAgIHR5cGVfYmluZGlu
Zy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcs
IHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRl
cm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZyb250ZW5k
X2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCkBAIC0xNjkwLDcgKzE4MTAsNyBAQCBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCiAgICAgICAg
IGFkX2hvY190eXBlX291dHB1dCA9IFtdCiAgICAgICAgIGZyb250ZW5kX21ldGhvZF9kZWNsYXJh
dGlvbl9saW5lcy5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAgICAgICBhZF9ob2NfdHlw
ZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAgICIpCisgICAgICAgIGFk
X2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAgICAgICIp
CiAgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgogICAgICAgICAgICAgbWV0
aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKICAgICAgICAgICAgIGZvciBq
c29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CkBAIC0xOTUyLDcgKzIw
NzIsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1
dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2Nw
cC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZy
b250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1ldGhvZHM9am9pbihHZW5l
cmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBtZXRob2RzPWpvaW4oR2Vu
ZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBlbnVtQ29uc3RhbnRWYWx1
ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkpKQogCiBiYWNrZW5kX2Nw
cF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAg
bWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1l
X2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120673</attachid>
            <date>2011-12-28 08:25:27 -0800</date>
            <delta_ts>2011-12-28 08:25:27 -0800</delta_ts>
            <desc>New InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>143876</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKClN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Cgpu
YW1lc3BhY2UgTWVtb3J5IHsKLyogTnVtYmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8K
Y2xhc3MgTm9kZUNvdW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5PREVfTkFNRV9TRVQgPSAx
IDw8IDAsCiAgICAgICAgQ09VTlRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKE5PREVfTkFNRV9TRVQgfCBDT1VOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlQ291bnQ+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9kZUNvdW50OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9OQU1FX1NFVD4mIHNldE5vZGVOYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTk9ERV9OQU1FX1NFVCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9OQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDT1VOVF9TRVQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09VTlRfU0VUKSwgcHJvcGVy
dHlfY291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJj
b3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT1VOVF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxOb2RlQ291bnQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Tm9kZUNvdW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxOb2RlQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZUNvdW50PiByZXN1bHQg
PSBOb2RlQ291bnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikKICAgICAq
ICAgICAuc2V0Q291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCmNsYXNzIERPTUdyb3VwIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAwLAogICAgICAgIFRJVExFX1NF
VCA9IDEgPDwgMSwKICAgICAgICBOT0RFX0NPVU5UX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExf
RklFTERTX1NFVCA9IChTSVpFX1NFVCB8IFRJVExFX1NFVCB8IE5PREVfQ09VTlRfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RE9N
R3JvdXA+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRE9N
R3JvdXA7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNl
dFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VElUTEVfU0VUPiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRs
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX0NPVU5UX1NFVD4mIHNldE5vZGVDb3Vu
dChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX0NPVU5UX1NFVCksIHByb3BlcnR5X25vZGVD
b3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibm9kZUNv
dW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfQ09VTlRfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPERPTUdyb3VwPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxET01Hcm91cD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxET01Hcm91cD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8RE9NR3JvdXA+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RE9NR3JvdXA+IHJlc3VsdCA9
IERPTUdyb3VwOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAu
c2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXROb2RlQ291bnQoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRE9NR3JvdXAoKSkpOwogICAg
fQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJJIiwgdmFsdWUpOwogICAgfQp9OwoKfSAv
LyBNZW1vcnkKCm5hbWVzcGFjZSBQYWdlIHsKLyogUmVzb3VyY2UgdHlwZSBhcyBpdCB3YXMgcGVy
Y2VpdmVkIGJ5IHRoZSByZW5kZXJpbmcgZW5naW5lLiAqLwpzdHJ1Y3QgUmVzb3VyY2VUeXBlIHsK
ICAgIGVudW0gRW51bSB7CiAgICAgICAgRG9jdW1lbnQgPSAwLAogICAgICAgIFN0eWxlc2hlZXQg
PSAxLAogICAgICAgIEltYWdlID0gMiwKICAgICAgICBGb250ID0gMywKICAgICAgICBTY3JpcHQg
PSA0LAogICAgICAgIFhIUiA9IDUsCiAgICAgICAgV2ViU29ja2V0ID0gNiwKICAgICAgICBPdGhl
ciA9IDcsCiAgICB9Owp9OyAvLyBzdHJ1Y3QgUmVzb3VyY2VUeXBlCgovKiBJbmZvcm1hdGlvbiBh
Ym91dCB0aGUgRnJhbWUgb24gdGhlIHBhZ2UuICovCmNsYXNzIEZyYW1lIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAw
LAogICAgICAgIElEX1NFVCA9IDEgPDwgMCwKICAgICAgICBMT0FERVJfSURfU0VUID0gMSA8PCAx
LAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDIsCiAgICAgICAgTUlNRV9UWVBFX1NFVCA9IDEgPDwg
MywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChJRF9TRVQgfCBMT0FERVJfSURfU0VUIHwgVVJM
X1NFVCB8IE1JTUVfVFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IElEX1NFVD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTE9BREVSX0lEX1NFVD4mIHNldExvYWRlcklkKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TE9BREVSX0lEX1NFVCksIHByb3BlcnR5X2xvYWRlcklkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibG9hZGVySWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TE9BREVSX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5
X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0gRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElk
KC4uLikKICAgICAqICAgICAuc2V0TG9hZGVySWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBGcmFtZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQ
YXJlbnRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygicGFyZW50SWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwog
ICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9uZyB3
aXRoIHRoZWlyIGNhY2hlZCByZXNvdXJjZXMuICovCmNsYXNzIEZyYW1lUmVzb3VyY2VUcmVlIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3Jlc291cmNlcycgd2hpbGUgZ2VuZXJhdGluZyBGcmFtZVJlc291cmNlVHJlZS4K
ICAgIC8vIE5hbWVkIGFzIGFuIGl0ZW0gb2YgYXJyYXkuCiAgICBjbGFzcyBSZXNvdXJjZXNJdGVt
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CiAgICBwdWJsaWM6CiAgICAgICAgZW51bSB7CiAg
ICAgICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgICAgICBVUkxfU0VUID0gMSA8PCAw
LAogICAgICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMSwKICAgICAgICAgICAgTUlNRV9UWVBFX1NF
VCA9IDEgPDwgMiwKICAgICAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZUEVf
U0VUIHwgTUlNRV9UWVBFX1NFVCkKICAgICAgICB9OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxSZXNvdXJjZXNJdGVtPiBwdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VzSXRlbTsKICAgICAgICBwdWJs
aWM6CiAgICAKICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgICAgICB9CiAgICAKICAg
ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6
UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwg
cHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
WVBFX1NFVD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNSU1FX1RZUEVfU0VUPiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQ
RV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TUlNRV9UWVBFX1NFVD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAg
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNvdXJjZXNJdGVtPiYgKCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxSZXNvdXJjZXNJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gKCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZXNJdGVtPigqdGhpcyk7
CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvKgogICAgICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAgICAgKiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcmVzdWx0ID0g
UmVzb3VyY2VzSXRlbTo6Y3JlYXRlKCkKICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAg
ICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7
CiAgICAgICAgICovCiAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBSZXNvdXJjZXNJdGVtKCkpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEZSQU1FX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBSRVNPVVJDRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KEZSQU1FX1NFVCB8IFJFU09VUkNFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVJlc291cmNlVHJlZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX1NFVD4mIHNldEZyYW1l
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEZSQU1FX1NFVCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RlJBTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFJFU09VUkNFU19TRVQ+JiBzZXRSZXNvdXJjZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUkVTT1VSQ0VTX1NFVCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFJFU09VUkNFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1l
UmVzb3VyY2VUcmVlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVJl
c291cmNlVHJlZT4gcmVzdWx0ID0gRnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldEZyYW1lKC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VU
cmVlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1l
cyIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNs
YXNzIFNlYXJjaE1hdGNoIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9
IDEgPDwgMCwKICAgICAgICBMSU5FX0NPTlRFTlRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKExJTkVfTlVNQkVSX1NFVCB8IExJTkVfQ09OVEVOVF9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hN
YXRjaD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFy
Y2hNYXRjaDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVS
X1NFVD4mIHNldExpbmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVO
dW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5l
TnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVS
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMSU5FX0NPTlRFTlRf
U0VUPiYgc2V0TGluZUNvbnRlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX0NPTlRFTlRfU0VUKSwgcHJvcGVy
dHlfbGluZUNvbnRlbnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJsaW5lQ29udGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxM
SU5FX0NPTlRFTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNl
YXJjaE1hdGNoPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWFyY2hNYXRjaD4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VhcmNoTWF0Y2g+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8U2VhcmNoTWF0Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNoOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0TGluZUNvbnRlbnQoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2Vh
cmNoTWF0Y2goKSkpOwogICAgfQp9OwoKLyogU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuICov
CmNsYXNzIFNlYXJjaFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8
PCAwLAogICAgICAgIEZSQU1FX0lEX1NFVCA9IDEgPDwgMSwKICAgICAgICBNQVRDSEVTX0NPVU5U
X1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgRlJBTUVf
SURfU0VUIHwgTUFUQ0hFU19DT1VOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGlj
OgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVS
TF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJM
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9JRF9TRVQ+
JiBzZXRGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlJBTUVfSURfU0VUKSwgcHJvcGVydHlfZnJhbWVJZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlJBTUVfSURfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRVNfQ09VTlRfU0VUPiYgc2V0TWF0
Y2hlc0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNQVRDSEVTX0NPVU5UX1NFVCksIHByb3BlcnR5X21hdGNoZXNDb3VudF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3Vu
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVTX0NPVU5UX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWFyY2hSZXN1bHQ+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxT
ZWFyY2hSZXN1bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1h
dGNoZXNDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBTZWFyY2hSZXN1bHQoKSkpOwogICAgfQp9OwoKLyogQ29va2llIG9iamVjdCAq
LwpjbGFzcyBDb29raWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAs
CiAgICAgICAgVkFMVUVfU0VUID0gMSA8PCAxLAogICAgICAgIERPTUFJTl9TRVQgPSAxIDw8IDIs
CiAgICAgICAgUEFUSF9TRVQgPSAxIDw8IDMsCiAgICAgICAgRVhQSVJFU19TRVQgPSAxIDw8IDQs
CiAgICAgICAgU0laRV9TRVQgPSAxIDw8IDUsCiAgICAgICAgSFRUUF9PTkxZX1NFVCA9IDEgPDwg
NiwKICAgICAgICBTRUNVUkVfU0VUID0gMSA8PCA3LAogICAgICAgIFNFU1NJT05fU0VUID0gMSA8
PCA4LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUIHwgRE9N
QUlOX1NFVCB8IFBBVEhfU0VUIHwgRVhQSVJFU19TRVQgfCBTSVpFX1NFVCB8IEhUVFBfT05MWV9T
RVQgfCBTRUNVUkVfU0VUIHwgU0VTU0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDb29raWU+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQp
LCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IERPTUFJTl9TRVQ+JiBzZXREb21haW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBET01BSU5fU0VU
KSwgcHJvcGVydHlfZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiZG9tYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERP
TUFJTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUEFUSF9TRVQ+
JiBzZXRQYXRoKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUEFUSF9TRVQpLCBwcm9wZXJ0eV9wYXRoX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygicGF0aCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQQVRIX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFWFBJUkVTX1NFVD4mIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVYUElSRVNfU0VUKSwgcHJv
cGVydHlfZXhwaXJlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImV4cGlyZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RVhQSVJF
U19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+JiBz
ZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEhUVFBfT05MWV9TRVQ+JiBzZXRIdHRwT25seShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhUVFBfT05MWV9TRVQpLCBwcm9wZXJ0eV9o
dHRwT25seV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJo
dHRwT25seSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIVFRQX09OTFlf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFQ1VSRV9TRVQ+JiBz
ZXRTZWN1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTRUNVUkVfU0VUKSwgcHJvcGVydHlfc2VjdXJlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInNlY3VyZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTRUNVUkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNFU1NJT05fU0VUPiYgc2V0U2Vzc2lvbihib29sIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFU1NJT05fU0VUKSwgcHJv
cGVydHlfc2Vzc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29s
ZWFuKCJzZXNzaW9uIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFU1NJ
T05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Q29va2llPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPENvb2tpZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8Q29va2llPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvb2tpZT4gcmVzdWx0ID0gQ29v
a2llOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFs
dWUoLi4uKQogICAgICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXRQYXRoKC4u
LikKICAgICAqICAgICAuc2V0RXhwaXJlcyguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQog
ICAgICogICAgIC5zZXRIdHRwT25seSguLi4pCiAgICAgKiAgICAgLnNldFNlY3VyZSguLi4pCiAg
ICAgKiAgICAgLnNldFNlc3Npb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVM
RFNfU0VUPihhZG9wdFJlZihuZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCi8qIFVuaXF1ZSBzY3Jp
cHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0gLy8g
UGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKLyogTWlycm9yIG9iamVjdCByZWZlcmVu
Y2luZyBvcmlnaW5hbCBKYXZhU2NyaXB0IG9iamVjdC4gKi8KY2xhc3MgUmVtb3RlT2JqZWN0IDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0
IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE9iamVjdCA9IDgsCiAgICAg
ICAgICAgIEZ1bmN0aW9uID0gOSwKICAgICAgICAgICAgVW5kZWZpbmVkID0gMTAsCiAgICAgICAg
ICAgIFN0cmluZyA9IDExLAogICAgICAgICAgICBOdW1iZXIgPSAxMiwKICAgICAgICAgICAgQm9v
bGVhbiA9IDEzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2Jq
ZWN0LgogICAgc3RydWN0IFN1YnR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
IEFycmF5ID0gMTQsCiAgICAgICAgICAgIE51bGwgPSAxNSwKICAgICAgICAgICAgTm9kZSA9IDE2
LAogICAgICAgICAgICBSZWdleHAgPSAxNywKICAgICAgICAgICAgRGF0ZSA9IDE4LAogICAgICAg
IH07CiAgICB9OyAvLyBzdHJ1Y3QgU3VidHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFRZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8UmVtb3RlT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlbW90ZU9iamVjdDsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJv
cGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxS
ZW1vdGVPYmplY3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8UmVtb3RlT2JqZWN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxSZW1vdGVPYmplY3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1
bHQgPSBSZW1vdGVPYmplY3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVtb3RlT2Jq
ZWN0KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldENsYXNzTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0VmFsdWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9y
T2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZGVzY3JpcHRpb24iLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRPYmplY3RJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07Cgov
KiBPYmplY3QgcHJvcGVydHkgZGVzY3JpcHRvci4gKi8KY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9y
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFdSSVRB
QkxFX1NFVCA9IDEgPDwgMSwKICAgICAgICBDT05GSUdVUkFCTEVfU0VUID0gMSA8PCAyLAogICAg
ICAgIEVOVU1FUkFCTEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5B
TUVfU0VUIHwgV1JJVEFCTEVfU0VUIHwgQ09ORklHVVJBQkxFX1NFVCB8IEVOVU1FUkFCTEVfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8UHJvcGVydHlEZXNjcmlwdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJv
cGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV1JJVEFCTEVfU0VUPiYgc2V0V3Jp
dGFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBXUklUQUJMRV9TRVQpLCBwcm9wZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxXUklUQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ09ORklHVVJBQkxFX1NFVD4mIHNldENvbmZpZ3VyYWJsZShib29s
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENP
TkZJR1VSQUJMRV9TRVQpLCBwcm9wZXJ0eV9jb25maWd1cmFibGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTkZJR1VSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRU5VTUVSQUJMRV9TRVQ+JiBzZXRFbnVtZXJhYmxlKGJv
b2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RU5VTUVSQUJMRV9TRVQpLCBwcm9wZXJ0eV9lbnVtZXJhYmxlX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImVudW1lcmFibGUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RU5VTUVSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQ
cm9wZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
UHJvcGVydHlEZXNjcmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRXcml0YWJsZSguLi4pCiAg
ICAgKiAgICAgLnNldENvbmZpZ3VyYWJsZSguLi4pCiAgICAgKiAgICAgLnNldEVudW1lcmFibGUo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcg
UHJvcGVydHlEZXNjcmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInZhbHVl
IiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgog
ICAgdm9pZCBzZXRHZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE9iamVjdCgiZ2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3Qo
InNldCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Rocm93bihib29sIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAgIH0K
fTsKCi8qIFJlcHJlc2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4gRWl0aGVyIHJlbW90ZSBv
YmplY3QgaWQgPGNvZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2ZSA8Y29kZT52YWx1ZTwv
Y29kZT4gb3IgbmVpdGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBzaG91bGQgYmUgc3BlY2lm
aWVkLiAqLwpjbGFzcyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAwCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsQXJndW1lbnQ+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2Fs
bEFyZ3VtZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsQXJn
dW1lbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBDYWxsQXJn
dW1lbnQ6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBDYWxsQXJndW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFs
dWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRW
YWx1ZTsKCgogICAgdm9pZCBzZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0K
fTsKCn0gLy8gUnVudGltZQoKbmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xlIG1lc3NhZ2Uu
ICovCmNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJh
dGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51
bSB7CiAgICAgICAgICAgIEh0bWwgPSAxOSwKICAgICAgICAgICAgV21sID0gMjAsCiAgICAgICAg
ICAgIFhtbCA9IDIxLAogICAgICAgICAgICBKYXZhc2NyaXB0ID0gMjIsCiAgICAgICAgICAgIE5l
dHdvcmsgPSAyMywKICAgICAgICAgICAgQ29uc29sZV9hcGkgPSAyNCwKICAgICAgICAgICAgT3Ro
ZXIgPSAyNSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFNvdXJjZQoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNz
YWdlLgogICAgc3RydWN0IExldmVsIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBU
aXAgPSAyNiwKICAgICAgICAgICAgTG9nID0gMjcsCiAgICAgICAgICAgIFdhcm5pbmcgPSAyOCwK
ICAgICAgICAgICAgRXJyb3IgPSAyOSwKICAgICAgICAgICAgRGVidWcgPSAzMCwKICAgICAgICB9
OwogICAgfTsgLy8gc3RydWN0IExldmVsCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBUeXBl
IHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBMb2cgPSAyNywKICAgICAgICAgICAg
RGlyID0gMzEsCiAgICAgICAgICAgIERpcnhtbCA9IDMyLAogICAgICAgICAgICBUcmFjZSA9IDMz
LAogICAgICAgICAgICBTdGFydEdyb3VwID0gMzQsCiAgICAgICAgICAgIFN0YXJ0R3JvdXBDb2xs
YXBzZWQgPSAzNSwKICAgICAgICAgICAgRW5kR3JvdXAgPSAzNiwKICAgICAgICAgICAgQXNzZXJ0
ID0gMzcsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU09VUkNFX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBMRVZFTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVEVYVF9TRVQgPSAxIDw8IDIsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoU09VUkNFX1NFVCB8IExFVkVMX1NFVCB8IFRFWFRfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ29uc29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
T1VSQ0VfU0VUPiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291
cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNl
IiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTT1VSQ0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNP
VVJDRV9TRVQ+JiBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291
cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoTGV2
ZWw6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TEVWRUxfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExFVkVMX1NFVD4mIHNldExldmVsKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMRVZFTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEVY
VF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENvbnNvbGVNZXNzYWdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdl
PiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U291cmNl
KC4uLikKICAgICAqICAgICAuc2V0TGV2ZWwoLi4uKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENvbnNv
bGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1
ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJl
cigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFy
cmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZShQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRB
cnJheSgic3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5ldHdvcmtSZXF1
ZXN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
Im5ldHdvcmtSZXF1ZXN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTdGFjayBlbnRyeSBmb3Ig
Y29uc29sZSBlcnJvcnMgYW5kIGFzc2VydGlvbnMuICovCmNsYXNzIENhbGxGcmFtZSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBVUkxf
U0VUID0gMSA8PCAxLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMiwKICAgICAgICBD
T0xVTU5fTlVNQkVSX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChGVU5D
VElPTl9OQU1FX1NFVCB8IFVSTF9TRVQgfCBMSU5FX05VTUJFUl9TRVQgfCBDT0xVTU5fTlVNQkVS
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBG
VU5DVElPTl9OQU1FX1NFVD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZVTkNUSU9OX05B
TUVfU0VUKSwgcHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEZVTkNUSU9OX05BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJv
cGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGlu
ZU51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTFVNTl9OVU1CRVJfU0VUPiYgc2V0Q29sdW1u
TnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDT0xVTU5fTlVNQkVSX1NFVCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT0xVTU5fTlVNQkVSX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENhbGxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9
IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAg
ICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAg
KiAgICAgLnNldENvbHVtbk51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAgfQp9OwoKfSAvLyBDb25z
b2xlCgpuYW1lc3BhY2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8K
dHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8K
dHlwZWRlZiBTdHJpbmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICov
CnR5cGVkZWYgU3RyaW5nIFJlcXVlc3RJZDsKCi8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhl
IHJlcXVlc3QuICovCmNsYXNzIFJlc291cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IFJFUVVFU1RfVElNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgUFJPWFlfU1RBUlRfU0VUID0gMSA8
PCAxLAogICAgICAgIFBST1hZX0VORF9TRVQgPSAxIDw8IDIsCiAgICAgICAgRE5TX1NUQVJUX1NF
VCA9IDEgPDwgMywKICAgICAgICBETlNfRU5EX1NFVCA9IDEgPDwgNCwKICAgICAgICBDT05ORUNU
X1NUQVJUX1NFVCA9IDEgPDwgNSwKICAgICAgICBDT05ORUNUX0VORF9TRVQgPSAxIDw8IDYsCiAg
ICAgICAgU1NMX1NUQVJUX1NFVCA9IDEgPDwgNywKICAgICAgICBTU0xfRU5EX1NFVCA9IDEgPDwg
OCwKICAgICAgICBTRU5EX1NUQVJUX1NFVCA9IDEgPDwgOSwKICAgICAgICBTRU5EX0VORF9TRVQg
PSAxIDw8IDEwLAogICAgICAgIFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUID0gMSA8PCAxMSwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChSRVFVRVNUX1RJTUVfU0VUIHwgUFJPWFlfU1RBUlRfU0VU
IHwgUFJPWFlfRU5EX1NFVCB8IEROU19TVEFSVF9TRVQgfCBETlNfRU5EX1NFVCB8IENPTk5FQ1Rf
U1RBUlRfU0VUIHwgQ09OTkVDVF9FTkRfU0VUIHwgU1NMX1NUQVJUX1NFVCB8IFNTTF9FTkRfU0VU
IHwgU0VORF9TVEFSVF9TRVQgfCBTRU5EX0VORF9TRVQgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFJlc291cmNlVGltaW5nPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFJlc291cmNlVGltaW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUkVRVUVTVF9USU1FX1NFVD4mIHNldFJlcXVlc3RUaW1lKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRVFVRVNUX1RJTUVf
U0VUKSwgcHJvcGVydHlfcmVxdWVzdFRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxSRVFVRVNUX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFBST1hZX1NUQVJUX1NFVD4mIHNldFByb3h5U3RhcnQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX1NUQVJU
X1NFVCksIHByb3BlcnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBST1hZX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBQUk9YWV9FTkRfU0VUPiYgc2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX0VORF9TRVQpLCBw
cm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoInByb3h5RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBS
T1hZX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE5TX1NU
QVJUX1NFVD4mIHNldERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBETlNfU1RBUlRfU0VUKSwgcHJvcGVydHlfZG5zU3Rh
cnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNTdGFy
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfU1RBUlRfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEROU19FTkRfU0VUPiYgc2V0RG5z
RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBETlNfRU5EX1NFVCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxETlNfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDT05ORUNUX1NUQVJUX1NFVD4mIHNldENvbm5lY3RTdGFydChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09OTkVD
VF9TVEFSVF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVF9FTkRfU0VUPiYgc2V0Q29ubmVjdEVuZChkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q09OTkVDVF9FTkRfU0VUKSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFNTTF9TVEFSVF9TRVQ+JiBzZXRTc2xTdGFydChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX1NU
QVJUX1NFVCksIHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1NMX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTU0xfRU5EX1NFVD4mIHNldFNzbEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX0VORF9TRVQpLCBwcm9wZXJ0eV9z
c2xFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzc2xF
bmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX0VORF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VORF9TVEFSVF9TRVQ+JiBzZXRT
ZW5kU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNFTkRfU1RBUlRfU0VUKSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfU1RBUlRfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFTkRfRU5EX1NFVD4mIHNldFNlbmRFbmQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNFTkRfRU5EX1NFVCksIHByb3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNFTkRfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVD4mIHNldFJlY2VpdmVIZWFkZXJzRW5kKGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCksIHByb3BlcnR5X3JlY2VpdmVIZWFkZXJzRW5kX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVjZWl2ZUhlYWRl
cnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVDRUlWRV9IRUFE
RVJTX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3Vy
Y2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1pbmc6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAuc2V0
UHJveHlTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAgICAu
c2V0RG5zU3RhcnQoLi4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAgIC5z
ZXRDb25uZWN0U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAq
ICAgICAuc2V0U3NsU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAgICog
ICAgIC5zZXRTZW5kU3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAq
ICAgICAuc2V0UmVjZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkpOwogICAgfQp9OwoK
LyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBNRVRIT0RfU0VUID0gMSA8PCAxLAogICAg
ICAgIEhFQURFUlNfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9T
RVQgfCBNRVRIT0RfU0VUIHwgSEVBREVSU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCks
IHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1FVEhPRF9TRVQ+JiBzZXRNZXRo
b2QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNRVRIT0RfU0VUKSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE1FVEhPRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxSZXF1ZXN0PiByZXN1bHQgPSBSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNZXRob2QoLi4uKQogICAgICogICAgIC5zZXRIZWFk
ZXJzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IFJlcXVlc3QoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUp
OwogICAgfQp9OwoKLyogSFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19TRVQg
PSAxIDw8IDEsCiAgICAgICAgU1RBVFVTX1RFWFRfU0VUID0gMSA8PCAyLAogICAgICAgIEhFQURF
UlNfU0VUID0gMSA8PCAzLAogICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8IDQsCiAgICAgICAg
Q09OTkVDVElPTl9SRVVTRURfU0VUID0gMSA8PCA1LAogICAgICAgIENPTk5FQ1RJT05fSURfU0VU
ID0gMSA8PCA2LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBTVEFUVVNfU0VU
IHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVBREVSU19TRVQgfCBNSU1FX1RZUEVfU0VUIHwgQ09OTkVD
VElPTl9SRVVTRURfU0VUIHwgQ09OTkVDVElPTl9JRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBV
UkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVS
TF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1NFVD4m
IHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RBVFVTX1NFVCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFNUQVRVU19URVhUX1NFVD4mIHNldFN0YXR1c1RleHQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTVEFUVVNfVEVYVF9TRVQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFUVVNfVEVYVF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9SRVVTRURfU0VUPiYgc2V0Q29ubmVjdGlvblJldXNlZChi
b29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENPTk5FQ1RJT05fUkVVU0VEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNl
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX1JFVVNF
RF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9J
RF9TRVQ+JiBzZXRDb25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05fSURfU0VUKSwgcHJvcGVydHlf
Y29ubmVjdGlvbklkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigiY29ubmVjdGlvbklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENP
Tk5FQ1RJT05fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJl
c3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVz
cG9uc2U+IHJlc3VsdCA9IFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4u
LikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4u
LikKICAgICAqICAgICAuc2V0Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENv
bm5lY3Rpb25JZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVy
c1RleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0
KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFk
ZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygicmVxdWVzdEhlYWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURp
c2tDYWNoZShib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21E
aXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmci
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBX
ZWJTb2NrZXRSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfS0VZM19TRVQg
PSAxIDw8IDAsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoUkVRVUVTVF9LRVkzX1NFVCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVz
dD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2Nr
ZXRSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVTVF9L
RVkzX1NFVD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVTVF9LRVkzX1NFVCksIHBy
b3BlcnR5X3JlcXVlc3RLZXkzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygicmVxdWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UkVRVUVTVF9LRVkzX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBIRUFERVJTX1NFVD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhFQURF
UlNfU0VUKSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8SEVBREVSU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
V2ViU29ja2V0UmVxdWVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2Nr
ZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJTb2Nr
ZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHJlc3VsdCA9
IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RLZXkzKC4u
LikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAgIH0KfTsK
Ci8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNwb25zZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRV
U19URVhUX1NFVCA9IDEgPDwgMSwKICAgICAgICBIRUFERVJTX1NFVCA9IDEgPDwgMiwKICAgICAg
ICBDSEFMTEVOR0VfUkVTUE9OU0VfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKFNUQVRVU19TRVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBIRUFERVJTX1NFVCB8IENIQUxMRU5H
RV9SRVNQT05TRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRV
U19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFU
VVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRfU0VUKSwg
cHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U1RBVFVTX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVS
U19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
SEFMTEVOR0VfUkVTUE9OU0VfU0VUPiYgc2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
SEFMTEVOR0VfUkVTUE9OU0VfU0VUKSwgcHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25z
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDSEFMTEVOR0VfUkVTUE9O
U0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJl
c3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25z
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVzcG9u
c2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNv
Y2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICog
ICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAg
KiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAgIH0K
fTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNzIENh
Y2hlZFJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgUkVTUE9OU0VfU0VUID0gMSA8PCAyLAog
ICAgICAgIEJPRFlfU0laRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAo
VVJMX1NFVCB8IFRZUEVfU0VUIHwgUkVTUE9OU0VfU0VUIHwgQk9EWV9TSVpFX1NFVCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhY2hl
ZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENhY2hlZFJlc291cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJM
X1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291
cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
WVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFU1BPTlNF
X1NFVD4mIHNldFJlc3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVz
cG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJFU1BPTlNFX1NFVCksIHByb3BlcnR5
X3Jlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgi
cmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVTUE9OU0Vf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJPRFlfU0laRV9TRVQ+
JiBzZXRCb2R5U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQk9EWV9TSVpFX1NFVCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Qk9EWV9TSVpFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8Q2FjaGVkUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhY2hl
ZFJlc291cmNlPiByZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFJlc3Bv
bnNlKC4uLikKICAgICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FjaGVkUmVzb3VyY2UoKSkpOwogICAg
fQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpjbGFz
cyBJbml0aWF0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0b3Iu
CiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgUGFyc2Vy
ID0gMzgsCiAgICAgICAgICAgIFNjcmlwdCA9IDM5LAogICAgICAgICAgICBPdGhlciA9IDI1LAog
ICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVM
RFNfU0VUID0gKFRZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5pdGlhdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaXRpYXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVy
dHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZ
UEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbml0aWF0
b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
SW5pdGlhdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbml0aWF0
b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkpKTsKICAgIH0KCiAgICB2b2lk
IHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJp
bmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1iZXIoZG91YmxlIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsK
ICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFj
ZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0YWJhc2UgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIERPTUFJTl9TRVQgPSAx
IDw8IDEsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgVkVSU0lPTl9TRVQgPSAx
IDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgRE9NQUlOX1NFVCB8IE5B
TUVfU0VUIHwgVkVSU0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlf
aWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4mIHNldERvbWFpbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERPTUFJTl9TRVQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RE9NQUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZFUlNJT05fU0VUPiYgc2V0VmVyc2lvbihjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFZFUlNJT05fU0VUKSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VkVSU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RGF0YWJhc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFiYXNlPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4oKnRoaXMpOwogICAg
ICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAq
IFJlZlB0cjxEYXRhYmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldElkKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0TmFt
ZSguLi4pCiAgICAgKiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRGF0YWJhc2UoKSkpOwogICAgfQp9OwoKfSAv
LyBEYXRhYmFzZQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBET01T
dG9yYWdlIHsKLyogRE9NIFN0b3JhZ2UgZW50cnkuICovCmNsYXNzIEVudHJ5IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQg
PSAwLAogICAgICAgIEhPU1RfU0VUID0gMSA8PCAwLAogICAgICAgIElTX0xPQ0FMX1NUT1JBR0Vf
U0VUID0gMSA8PCAxLAogICAgICAgIElEX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChIT1NUX1NFVCB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUIHwgSURfU0VUKQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RW50cnk+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIT1NUX1NFVD4mIHNldEhvc3QoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBIT1NUX1NFVCksIHByb3BlcnR5X2hvc3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJob3N0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEhPU1RfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElTX0xPQ0FMX1NUT1JBR0VfU0VUPiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJU19MT0NBTF9TVE9S
QUdFX1NFVCksIHByb3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0xPQ0FMX1NUT1JBR0VfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJRF9TRVQpLCBwcm9w
ZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImlk
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElEX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RW50
cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
RW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVudHJ5PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0SG9zdCguLi4pCiAgICAgKiAgICAgLnNldElzTG9jYWxTdG9yYWdlKC4uLikKICAgICAq
ICAgICAuc2V0SWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9yYWdlCgpuYW1lc3Bh
Y2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIHJlc291
cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBTSVpFX1NFVCA9IDEg
PDwgMSwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9
IChVUkxfU0VUIHwgU0laRV9TRVQgfCBUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBV
UkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFNJWkVfU0VUPiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0laRV9TRVQpLCBwcm9wZXJ0eV9z
aXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSVpFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTaXpl
KC4uLikKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwog
ICAgfQp9OwoKLyogRGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTUFOSUZFU1RfVV9S
X0xfU0VUID0gMSA8PCAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAxLAogICAgICAgIENSRUFU
SU9OX1RJTUVfU0VUID0gMSA8PCAyLAogICAgICAgIFVQREFURV9USU1FX1NFVCA9IDEgPDwgMywK
ICAgICAgICBSRVNPVVJDRVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KE1BTklGRVNUX1VfUl9MX1NFVCB8IFNJWkVfU0VUIHwgQ1JFQVRJT05fVElNRV9TRVQgfCBVUERB
VEVfVElNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYg
c2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9t
YW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklG
RVNUX1VfUl9MX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpF
X1NFVD4mIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ1JFQVRJT05fVElNRV9TRVQ+JiBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENSRUFU
SU9OX1RJTUVfU0VUKSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENSRUFUSU9OX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFVQREFURV9USU1FX1NFVD4mIHNldFVwZGF0ZVRpbWUoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFVQREFURV9USU1FX1NFVCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFVQREFURV9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQog
ICAgICogICAgIC5zZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICogICAgIC5zZXRVcGRhdGVUaW1l
KC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGUoKSkpOwogICAg
fQp9OwoKLyogRnJhbWUgaWRlbnRpZmllciAtIG1hbmlmZXN0IFVSTCBwYWlyLiAqLwpjbGFzcyBG
cmFtZVdpdGhNYW5pZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFNRV9JRF9TRVQgPSAx
IDw8IDAsCiAgICAgICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAxLAogICAgICAgIFNUQVRV
U19TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoRlJBTUVfSURfU0VUIHwg
TUFOSUZFU1RfVV9SX0xfU0VUIHwgU1RBVFVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNf
U0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aE1hbmlm
ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVfSURfU0VUPiYg
c2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2ZyYW1lSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQU5JRkVTVF9VX1JfTF9TRVQ+JiBzZXRNYW5p
ZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1BTklGRVNUX1VfUl9MX1NFVCksIHByb3BlcnR5X21hbmlmZXN0
VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZl
c3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFOSUZFU1RfVV9S
X0xfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+
JiBzZXRTdGF0dXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWVX
aXRoTWFuaWZlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lV2l0
aE1hbmlmZXN0PiByZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAq
ICAgICAuc2V0U3RhdHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsKICAgIH0KfTsKCn0gLy8gQXBw
bGljYXRpb25DYWNoZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBs
ZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0
dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xh
c3MgTm9kZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMCwKICAg
ICAgICBOT0RFX1RZUEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVfTkFNRV9TRVQgPSAxIDw8
IDIsCiAgICAgICAgTE9DQUxfTkFNRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgTk9ERV9WQUxVRV9T
RVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTk9ERV9JRF9TRVQgfCBOT0RF
X1RZUEVfU0VUIHwgTk9ERV9OQU1FX1NFVCB8IExPQ0FMX05BTUVfU0VUIHwgTk9ERV9WQUxVRV9T
RVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxOb2RlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX0lEX1NFVD4m
IHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTk9ERV9JRF9TRVQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTk9ERV9UWVBFX1NFVD4mIHNldE5vZGVUeXBlKGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX1RZUEVfU0VU
KSwgcHJvcGVydHlfbm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJub2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOT0RFX1RZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5P
REVfTkFNRV9TRVQ+JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9w
ZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm5vZGVOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVf
TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9DQUxfTkFN
RV9TRVQ+JiBzZXRMb2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMT0NBTF9OQU1FX1NFVCksIHByb3BlcnR5
X2xvY2FsTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImxvY2FsTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0NBTF9O
QU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX1ZBTFVF
X1NFVD4mIHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfVkFMVUVfU0VUKSwgcHJvcGVydHlf
bm9kZVZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bm9kZVZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfVkFM
VUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPE5vZGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Tm9kZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Tm9kZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXROb2RlVHlwZSguLi4p
CiAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYWxOYW1lKC4u
LikKICAgICAqICAgICAuc2V0Tm9kZVZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0
Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigi
Y2hpbGROb2RlQ291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbihQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJh
eSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5
KCJhdHRyaWJ1dGVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50
VVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwog
ICAgfQoKICAgIHZvaWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0SW50ZXJuYWxTdWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoImludGVybmFsU3Vic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0
WG1sVmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygieG1sVmVyc2lvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJ
bnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBs
ZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0
dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xh
c3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwg
MCwKICAgICAgICBVU0VfQ0FQVFVSRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgSVNfQVRUUklCVVRF
X1NFVCA9IDEgPDwgMiwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMywKICAgICAgICBIQU5E
TEVSX0JPRFlfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VU
IHwgVVNFX0NBUFRVUkVfU0VUIHwgSVNfQVRUUklCVVRFX1NFVCB8IE5PREVfSURfU0VUIHwgSEFO
RExFUl9CT0RZX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwg
cHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVNFX0NBUFRVUkVfU0VUPiYg
c2V0VXNlQ2FwdHVyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFVTRV9DQVBUVVJFX1NFVCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVU0VfQ0FQVFVSRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfQVRUUklCVVRFX1NFVD4mIHNl
dElzQXR0cmlidXRlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSVNfQVRUUklCVVRFX1NFVCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0FUVFJJQlVURV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXRO
b2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5PREVfSURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEhBTkRMRVJfQk9EWV9TRVQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhB
TkRMRVJfQk9EWV9TRVQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxFdmVudExpc3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJl
c3VsdCA9IEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQog
ICAgICogICAgIC5zZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUo
Li4uKQogICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9k
eSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBFdmVudExpc3RlbmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9u
IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9y
LiAqLwovLyBUeXBlIG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBSX1NFVCA9IDEgPDwgMCwKICAgICAgICBHX1NFVCA9IDEgPDwg
MSwKICAgICAgICBCX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChSX1NF
VCB8IEdfU0VUIHwgQl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBSX1NFVD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Ul9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgR19T
RVQ+JiBzZXRHKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBHX1NFVCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEdfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJfU0VUPiYg
c2V0QihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQl9TRVQpLCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxC
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxSZ2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PFJnYmE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAgIC5z
ZXRCKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IFJnYmEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJh
dGlvbiBkYXRhIGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNz
IEhpZ2hsaWdodENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9
IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPEhpZ2hsaWdodENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBIaWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxIaWdobGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxI
aWdobGlnaHRDb25maWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEhp
Z2hsaWdodENvbmZpZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3Vs
dCA9IEhpZ2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRTaG93SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xl
YW4oInNob3dJbmZvIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xv
ciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldE1hcmdpbkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRPYmplY3QoIm1hcmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVz
cGFjZSBDU1MgewovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5p
cXVlIHdheS4gKi8KY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlM
RV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NTdHlsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIENTU1N0eWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlM
RV9TSEVFVF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9J
RF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE9SRElOQUxfU0VUPiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JESU5BTF9TRVQpLCBw
cm9wZXJ0eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigib3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUkRJ
TkFMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlk
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9G
SUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NT
U3R5bGVJZD4gcmVzdWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5
bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUlkKCkpKTsKICAg
IH0KfTsKCi8qIFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3
YXkuICovCmNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVF
VF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NS
dWxlSWQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NT
UnVsZUlkOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRf
SURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwg
cHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVydHlf
b3JkaW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9y
ZGluYWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDU1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1
bHQgPSBDU1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4p
CiAgICAgKiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0KfTsKCi8qIENTUyBy
dWxlIGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRv
SWRSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBQU0VVRE9fSURfU0VUID0gMSA8PCAwLAog
ICAgICAgIFJVTEVTX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChQU0VV
RE9fSURfU0VUIHwgUlVMRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBQc2V1ZG9JZFJ1bGVzOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUFNFVURPX0lEX1NFVD4mIHNldFBzZXVkb0lkKGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQU0VV
RE9fSURfU0VUKSwgcHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxQU0VVRE9fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFJVTEVTX1NFVD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJVTEVT
X1NFVCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxS
VUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UHNldWRvSWRS
dWxlcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUHNldWRv
SWRSdWxlcygpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBhIHNpbmds
ZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnkgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9
IDAsCiAgICAgICAgTUFUQ0hFRF9DU1NfUlVMRVNfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKE1BVENIRURfQ1NTX1JVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVk
U3R5bGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRURf
Q1NTX1JVTEVTX1NFVD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBNQVRDSEVEX0NTU19SVUxFU19TRVQpLCBwcm9wZXJ0eV9tYXRjaGVkQ1NTUnVsZXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVEX0NTU19SVUxFU19T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5oZXJpdGVkU3R5bGVF
bnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVu
dHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHls
ZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9
IEluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NS
dWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVm
KG5ldyBJbmhlcml0ZWRTdHlsZUVudHJ5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldElubGluZVN0
eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJp
bmxpbmVTdHlsZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBpbmZvcm1hdGlvbiBm
b3IgYSBET00gc3R5bGUgYXR0cmlidXRlLiAqLwpjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVFlMRV9TRVQg
PSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBTVFlMRV9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVy
dHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5h
bWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTVFlMRV9TRVQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFNUWUxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1
dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRl
PiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFt
ZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1N0eWxlQXR0cmlidXRlKCkpKTsKICAgIH0K
fTsKCi8qIENTUyBzdHlsZXNoZWV0IG1ldGFpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGVT
aGVldEhlYWRlciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAx
IDw8IDAsCiAgICAgICAgU09VUkNFX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAgICBUSVRMRV9T
RVQgPSAxIDw8IDIsCiAgICAgICAgRElTQUJMRURfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9G
SUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFNPVVJDRV9VX1JfTF9TRVQgfCBUSVRM
RV9TRVQgfCBESVNBQkxFRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9TRVQ+JiBz
ZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9z
dHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZ
TEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNP
VVJDRV9VX1JfTF9TRVQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfVV9SX0xfU0VU
KSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNPVVJDRV9VX1JfTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVElUTEVfU0VUPiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90
aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBESVNBQkxFRF9TRVQ+JiBzZXREaXNhYmxl
ZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIERJU0FCTEVEX1NFVCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPERJU0FCTEVEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NT
dHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0U291cmNl
VVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXREaXNhYmxl
ZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBDU1NTdHlsZVNoZWV0SGVhZGVyKCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IGNv
bnRlbnRzLiAqLwpjbGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgUlVMRVNfU0VUID0gMSA8PCAx
LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFJVTEVTX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENTU1N0eWxlU2hlZXRCb2R5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcyhQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBSVUxFU19TRVQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8UlVMRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NT
dHlsZVNoZWV0Qm9keT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5
bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNo
ZWV0Qm9keSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQp9OwoK
LyogQ1NTIHJ1bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1bGUgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
b3JpZ2luJyB3aGlsZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBzdHJ1Y3QgT3JpZ2luIHsKICAg
ICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBVc2VyID0gNDAsCiAgICAgICAgICAgIFVzZXJf
YWdlbnQgPSA0MSwKICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIsCiAgICAgICAgICAgIEVtcHR5
ID0gNDMsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBPcmlnaW4KCiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTRUxFQ1RPUl9URVhUX1NFVCA9IDEgPDwg
MCwKICAgICAgICBTT1VSQ0VfTElORV9TRVQgPSAxIDw8IDEsCiAgICAgICAgT1JJR0lOX1NFVCA9
IDEgPDwgMiwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoU0VMRUNUT1JfVEVYVF9TRVQgfCBTT1VSQ0VfTElORV9TRVQgfCBPUklHSU5fU0VUIHwg
U1RZTEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8Q1NTUnVsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBDU1NSdWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U0VMRUNUT1JfVEVYVF9TRVQ+JiBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRUxFQ1RPUl9U
RVhUX1NFVCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTRUxFQ1RPUl9URVhUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfTElORV9TRVQ+JiBzZXRTb3VyY2VMaW5lKGludCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0Vf
TElORV9TRVQpLCBwcm9wZXJ0eV9zb3VyY2VMaW5lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTT1VSQ0VfTElORV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgT1JJR0lOX1NFVD4mIHNldE9yaWdpbihPcmlnaW46OkVudW0gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JJR0lOX1NFVCks
IHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8T1JJR0lOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JJR0lOX1NFVCks
IHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm9yaWdpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUklH
SU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NFVD4m
IHNldFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0VUKSwgcHJvcGVydHlfc3R5bGVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NSdWxl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NSdWxlPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENTU1J1bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFNlbGVjdG9yVGV4dCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJjZUxpbmUoLi4uKQog
ICAgICogICAgIC5zZXRPcmlnaW4oLi4uKQogICAgICogICAgIC5zZXRTdHlsZSguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NSdWxlKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldFJ1bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUnVsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2VsZWN0b3JS
YW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgic2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5
KCJtZWRpYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFRleHQgcmFuZ2Ugd2l0aGluIGEgcmVzb3Vy
Y2UuICovCmNsYXNzIFNvdXJjZVJhbmdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNUQVJUX1NF
VCA9IDEgPDwgMCwKICAgICAgICBFTkRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFNUQVJUX1NFVCB8IEVORF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VSYW5nZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVJUX1NFVD4mIHNldFN0YXJ0KGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFSVF9TRVQp
LCBwcm9wZXJ0eV9zdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoInN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVJU
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFTkRfU0VUPiYgc2V0
RW5kKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFTkRfU0VUKSwgcHJvcGVydHlfZW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigiZW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEVORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U291cmNl
UmFuZ2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNvdXJjZVJhbmdlPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTb3VyY2VSYW5nZT4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxTb3VyY2VSYW5nZT4gcmVzdWx0ID0gU291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RW5kKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNvdXJjZVJhbmdlKCkpKTsKICAg
IH0KfTsKCmNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAg
ICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0
eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTQ29tcHV0
ZWRTdHlsZVByb3BlcnR5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gcmVzdWx0ID0gQ1NTQ29tcHV0ZWRT
dHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5KCkpKTsKICAgIH0KfTsKCi8qIENT
UyBzdHlsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGUgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgQ1NTX1BST1BFUlRJRVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNIT1JUSEFORF9F
TlRSSUVTX1NFVCA9IDEgPDwgMSwKICAgICAgICBXSURUSF9TRVQgPSAxIDw8IDIsCiAgICAgICAg
SEVJR0hUX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChDU1NfUFJPUEVS
VElFU19TRVQgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQgfCBXSURUSF9TRVQgfCBIRUlHSFRfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Q1NTU3R5bGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ1NTU3R5bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDU1NfUFJP
UEVSVElFU19TRVQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENT
U19QUk9QRVJUSUVTX1NFVCksIHByb3BlcnR5X2Nzc1Byb3BlcnRpZXNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNzc1Byb3BlcnRpZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q1NTX1BST1BFUlRJRVNfU0VUPigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNIT1JUSEFORF9FTlRSSUVTX1NFVD4mIHNldFNo
b3J0aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0hPUlRIQU5EX0VOVFJJRVNf
U0VUKSwgcHJvcGVydHlfc2hvcnRoYW5kRW50cmllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTSE9SVEhBTkRfRU5UUklFU19TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV0lEVEhfU0VUPiYgc2V0V2lkdGgoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBX
SURUSF9TRVQpLCBwcm9wZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIndpZHRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFdJRFRIX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIRUlH
SFRfU0VUPiYgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVJR0hUX1NFVCksIHByb3BlcnR5X2hlaWdo
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUlHSFRfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0eWxlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDU1NTdHlsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDU1NTdHlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q1NTU3R5bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0eWxl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAgICAqICAgICAu
c2V0U2hvcnRoYW5kRW50cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRoKC4uLikKICAgICAq
ICAgICAuc2V0SGVpZ2h0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IENTU1N0eWxlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0eWxlSWQo
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic3R5
bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImNzc1RleHQiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291
cmNlUmFuZ2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldE9iamVjdCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5
bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zmc2V0cy4gKi8KY2xh
c3MgQ1NTUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3RhdHVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1By
b3BlcnR5LgogICAgc3RydWN0IFN0YXR1cyB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAg
ICAgQWN0aXZlID0gNDQsCiAgICAgICAgICAgIEluYWN0aXZlID0gNDUsCiAgICAgICAgICAgIERp
c2FibGVkID0gNDYsCiAgICAgICAgICAgIFN0eWxlID0gNDcsCiAgICAgICAgfTsKICAgIH07IC8v
IHN0cnVjdCBTdGF0dXMKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAg
ICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklF
TERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0
eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVkFMVUVfU0VUPiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0
eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZh
bHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NQcm9wZXJ0eT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Q1NTUHJvcGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q1NTUHJvcGVydHk+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU1Byb3BlcnR5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1Byb3BlcnR5
PiByZXN1bHQgPSBDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1Byb3BlcnR5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNl
dFByaW9yaXR5KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJwcmlvcml0eSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEltcGxpY2l0KGJvb2wg
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UGFy
c2VkT2soYm9vbCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJwYXJzZWRP
ayIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXM6OkVudW0gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCBnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRTaG9ydGhhbmROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0UmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRPYmplY3QoInJhbmdlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIG1lZGlhIHF1ZXJ5
IGRlc2NyaXB0b3IuICovCmNsYXNzIENTU01lZGlhIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUg
Z2VuZXJhdGluZyBDU1NNZWRpYS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51
bSB7CiAgICAgICAgICAgIE1lZGlhUnVsZSA9IDQ4LAogICAgICAgICAgICBJbXBvcnRSdWxlID0g
NDksCiAgICAgICAgICAgIFN0eWxlc2hlZXQgPSA1MCwKICAgICAgICB9OwogICAgfTsgLy8gc3Ry
dWN0IFNvdXJjZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IFRFWFRfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRFWFRfU0VUKQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
Q1NTTWVkaWE+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
Q1NTTWVkaWE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBURVhUX1NFVD4m
IHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBURVhUX1NFVCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFRFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPENTU01lZGlhPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IENTU01lZGlhKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZShTb3Vy
Y2U6OkVudW0gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2UiLCBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzb3VyY2Ui
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldFNvdXJjZUxpbmUoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzZWxlY3Rv
ciBwcm9maWxlIGVudHJ5LiAqLwpjbGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKICAgICAgICBTRUxFQ1RPUl9TRVQgPSAxIDw8IDAsCiAgICAgICAgVElNRV9TRVQgPSAx
IDw8IDEsCiAgICAgICAgSElUX0NPVU5UX1NFVCA9IDEgPDwgMiwKICAgICAgICBNQVRDSF9DT1VO
VF9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU0VMRUNUT1JfU0VUIHwg
VElNRV9TRVQgfCBISVRfQ09VTlRfU0VUIHwgTUFUQ0hfQ09VTlRfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9m
aWxlRW50cnk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
U2VsZWN0b3JQcm9maWxlRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTRUxFQ1RPUl9TRVQ+JiBzZXRTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTEVDVE9SX1NFVCksIHBy
b3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0VM
RUNUT1JfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRJTUVfU0VU
PiYgc2V0VGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVElNRV9TRVQpLCBwcm9wZXJ0eV90aW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidGltZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUSU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBISVRfQ09VTlRfU0VUPiYgc2V0SGl0Q291bnQoaW50IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhJVF9DT1VOVF9TRVQpLCBwcm9w
ZXJ0eV9oaXRDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImhpdENvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhJVF9D
T1VOVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFUQ0hfQ09V
TlRfU0VUPiYgc2V0TWF0Y2hDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTUFUQ0hfQ09VTlRfU0VUKSwgcHJvcGVydHlfbWF0Y2hD
b3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNo
Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hfQ09VTlRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmls
ZUVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclByb2Zp
bGVFbnRyeT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQ
cm9maWxlRW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+IHJl
c3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTZWxl
Y3RvciguLi4pCiAgICAgKiAgICAgLnNldFRpbWUoLi4uKQogICAgICogICAgIC5zZXRIaXRDb3Vu
dCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGlj
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlRW50cnkoKSkp
OwogICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IFRPVEFMX1RJTUVfU0VUID0gMSA8PCAwLAogICAgICAgIERBVEFfU0VUID0gMSA8PCAxLAogICAg
ICAgIEFMTF9GSUVMRFNfU0VUID0gKFRPVEFMX1RJTUVfU0VUIHwgREFUQV9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxlY3Rv
clByb2ZpbGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
U2VsZWN0b3JQcm9maWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVE9U
QUxfVElNRV9TRVQ+JiBzZXRUb3RhbFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRPVEFMX1RJTUVfU0VUKSwgcHJvcGVydHlf
dG90YWxUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
dG90YWxUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRPVEFMX1RJ
TUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERBVEFfU0VUPiYg
c2V0RGF0YShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEQVRBX1NFVCksIHByb3BlcnR5X2RhdGFf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8REFUQV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxTZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0
b3JQcm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlKCkp
KTsKICAgIH0KfTsKCn0gLy8gQ1NTCgpuYW1lc3BhY2UgVGltZWxpbmUgewovKiBUaW1lbGluZSBy
ZWNvcmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY29yZGVkIGFjdGl2aXR5LiAq
LwpjbGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRZUEVfU0VUID0g
MSA8PCAwLAogICAgICAgIERBVEFfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKFRZUEVfU0VUIHwgREFUQV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lRXZlbnQ7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
WVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERBVEFfU0VU
PiYgc2V0RGF0YShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgREFUQV9TRVQpLCBwcm9wZXJ0eV9k
YXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZGF0YSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEQVRBX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUaW1lbGluZUV2ZW50PiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxUaW1lbGluZUV2ZW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPFRpbWVsaW5lRXZlbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8VGltZWxpbmVF
dmVudD4gcmVzdWx0ID0gVGltZWxpbmVFdmVudDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlw
ZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgVGltZWxpbmVFdmVudCgpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8v
IFRpbWVsaW5lCgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBEZWJ1
Z2dlciB7Ci8qIEJyZWFrcG9pbnQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgQnJlYWtw
b2ludElkOwoKLyogVW5pcXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBT
Y3JpcHRJZDsKCi8qIENhbGwgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgQ2Fs
bEZyYW1lSWQ7CgovKiBMb2NhdGlvbiBpbiB0aGUgc291cmNlIGNvZGUuICovCmNsYXNzIExvY2F0
aW9uIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFNDUklQVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgTElORV9OVU1CRVJfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFND
UklQVF9JRF9TRVQgfCBMSU5FX05VTUJFUl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxMb2NhdGlvbj4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBMb2NhdGlvbjsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNDUklQVF9JRF9TRVQ+JiBzZXRTY3JpcHRJZChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNDUklQVF9JRF9TRVQpLCBwcm9wZXJ0eV9zY3JpcHRJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNjcmlwdElkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNDUklQVF9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihpbnQgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElORV9OVU1C
RVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPExvY2F0aW9uPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxMb2NhdGlvbj4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxMb2NhdGlvbj4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8TG9jYXRpb24+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8TG9jYXRpb24+IHJlc3VsdCA9IExvY2F0aW9uOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRTY3JpcHRJZCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgTG9jYXRpb24oKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0Q29sdW1uTnVtYmVyKGludCB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEph
dmFTY3JpcHQgY2FsbCBmcmFtZS4gQXJyYXkgb2YgY2FsbCBmcmFtZXMgZm9ybSB0aGUgY2FsbCBz
dGFjay4gKi8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIENBTExfRlJB
TUVfSURfU0VUID0gMSA8PCAwLAogICAgICAgIEZVTkNUSU9OX05BTUVfU0VUID0gMSA8PCAxLAog
ICAgICAgIExPQ0FUSU9OX1NFVCA9IDEgPDwgMiwKICAgICAgICBTQ09QRV9DSEFJTl9TRVQgPSAx
IDw8IDMsCiAgICAgICAgVEhJU19TRVQgPSAxIDw8IDQsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQg
PSAoQ0FMTF9GUkFNRV9JRF9TRVQgfCBGVU5DVElPTl9OQU1FX1NFVCB8IExPQ0FUSU9OX1NFVCB8
IFNDT1BFX0NIQUlOX1NFVCB8IFRISVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhbGxGcmFtZTsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENBTExfRlJBTUVfSURfU0VUPiYgc2V0Q2FsbEZyYW1lSWQo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDQUxMX0ZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2NhbGxGcmFtZUlkX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiY2FsbEZyYW1lSWQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q0FMTF9GUkFNRV9JRF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlVOQ1RJT05fTkFNRV9TRVQ+JiBz
ZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGVU5DVElPTl9OQU1FX1NFVCksIHByb3BlcnR5X2Z1
bmN0aW9uTmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImZ1bmN0aW9uTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGVU5D
VElPTl9OQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMT0NB
VElPTl9TRVQ+JiBzZXRMb2NhdGlvbigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTE9DQVRJT05fU0VUKSwgcHJv
cGVydHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0NB
VElPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0NPUEVfQ0hB
SU5fU0VUPiYgc2V0U2NvcGVDaGFpbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTQ09QRV9DSEFJ
Tl9TRVQpLCBwcm9wZXJ0eV9zY29wZUNoYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJzY29wZUNoYWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNDT1BFX0NIQUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUSElTX1NFVD4mIHNldFRoaXMoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRISVNfU0VUKSwg
cHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VEhJU19TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEZyYW1lPiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VU
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1
bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxGcmFtZUlkKC4uLikK
ICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYXRpb24o
Li4uKQogICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAgICAuc2V0VGhpcygu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBD
YWxsRnJhbWUoKSkpOwogICAgfQp9OwoKLyogU2NvcGUgZGVzY3JpcHRpb24uICovCmNsYXNzIFNj
b3BlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgU2NvcGUuCiAgICBzdHJ1Y3Qg
VHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgR2xvYmFsID0gNTEsCiAgICAg
ICAgICAgIExvY2FsID0gNTIsCiAgICAgICAgICAgIFdpdGggPSA1MywKICAgICAgICAgICAgQ2xv
c3VyZSA9IDU0LAogICAgICAgICAgICBDYXRjaCA9IDU1LAogICAgICAgIH07CiAgICB9OyAvLyBz
dHJ1Y3QgVHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IFRZUEVfU0VUID0gMSA8PCAwLAogICAgICAgIE9CSkVDVF9TRVQgPSAxIDw8IDEsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQgfCBPQkpFQ1RfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2NvcGU+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2NvcGU7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBF
X1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3Bl
cnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9CSkVDVF9TRVQ+JiBzZXRPYmplY3Qo
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE9CSkVDVF9TRVQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJvYmplY3QiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T0JKRUNUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxTY29wZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2NvcGU+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2NvcGU+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNjb3BlPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFNjb3BlPiByZXN1bHQgPSBTY29wZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlw
ZSguLi4pCiAgICAgKiAgICAgLnNldE9iamVjdCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBTY29wZSgpKSk7CiAgICB9Cn07Cgp9IC8vIERl
YnVnZ2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERPTURlYnVnZ2VyIHsKLyogRE9NIGJyZWFr
cG9pbnQgdHlwZS4gKi8Kc3RydWN0IERPTUJyZWFrcG9pbnRUeXBlIHsKICAgIGVudW0gRW51bSB7
CiAgICAgICAgU3VidHJlZV9tb2RpZmllZCA9IDU2LAogICAgICAgIEF0dHJpYnV0ZV9tb2RpZmll
ZCA9IDU3LAogICAgICAgIE5vZGVfcmVtb3ZlZCA9IDU4LAogICAgfTsKfTsgLy8gc3RydWN0IERP
TUJyZWFrcG9pbnRUeXBlCgp9IC8vIERPTURlYnVnZ2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNl
IFByb2ZpbGVyIHsKfSAvLyBQcm9maWxlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCiNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQoKY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgewpwdWJsaWM6CiAgICBJbnNwZWN0b3JG
cm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKCgogICAgY2xhc3MgSW5zcGVjdG9y
IHsKICAgIHB1YmxpYzoKICAgICAgICBJbnNwZWN0b3IoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAgICAg
ICB2b2lkIGluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRpZERl
c3Ryb3lXb3JrZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAmbV9p
bnNwZWN0b3I7IH0KCiAgICBjbGFzcyBNZW1vcnkgewogICAgcHVibGljOgogICAgICAgIE1lbW9y
eShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQog
ICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBN
ZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQoKICAgIGNsYXNzIFBhZ2Ugewog
ICAgcHVibGljOgogICAgICAgIFBhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVkKGRv
dWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoZG91YmxlIHRpbWVz
dGFtcCk7CiAgICAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSk7CiAg
ICAgICAgdm9pZCBmcmFtZURldGFjaGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFBhZ2UqIHBh
Z2UoKSB7IHJldHVybiAmbV9wYWdlOyB9CgogICAgY2xhc3MgUnVudGltZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgUnVudGltZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OwogICAgfTsKCiAgICBSdW50aW1lKiBydW50aW1lKCkgeyByZXR1cm4gJm1fcnVudGltZTsgfQoK
ICAgIGNsYXNzIENvbnNvbGUgewogICAgcHVibGljOgogICAgICAgIENvbnNvbGUoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lk
IG1lc3NhZ2VBZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVN
ZXNzYWdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2
b2lkIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KTsKICAgICAgICB2b2lkIG1l
c3NhZ2VzQ2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToK
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOwogICAgfTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyByZXR1cm4gJm1fY29uc29sZTsg
fQoKICAgIGNsYXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAgICAgIE5ldHdvcmsoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIHJlcXVlc3RXaWxsQmVTZW50KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdD4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3RhY2tU
cmFjZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCBy
ZXF1ZXN0U2VydmVkRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2
b2lkIHJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypU
eXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBl
LCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3Ro
LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVkKGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxv
YWRpbmdGYWlsZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNv
bnN0IFN0cmluZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7CiAgICAg
ICAgdm9pZCByZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0
IFN0cmluZyYgZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVz
b3VyY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2
b2lkIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVl
c3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3Jr
OjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0
KTsKICAgICAgICB2b2lkIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tl
dENsb3NlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAg
ICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdv
cmsqIG5ldHdvcmsoKSB7IHJldHVybiAmbV9uZXR3b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKICAgIGNsYXNzIERhdGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAg
ICAgIHZvaWQgYWRkRGF0YWJhc2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6
RGF0YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAg
ICB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBjb2x1bW5OYW1lcywgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWVzKTsKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2Fj
dGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSog
ZGF0YWJhc2UoKSB7IHJldHVybiAmbV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCiAgICBjbGFzcyBET01TdG9yYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBET01T
dG9yYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBhZGRET01TdG9yYWdlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBzdG9yYWdlKTsKICAgICAgICB2b2lkIHVwZGF0ZURPTVN0b3JhZ2UoaW50IHN0b3JhZ2VJZCk7
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IERPTVN0b3JhZ2UqIGRvbXN0b3JhZ2UoKSB7IHJldHVybiAmbV9kb21zdG9yYWdlOyB9CgogICAg
Y2xhc3MgQXBwbGljYXRpb25DYWNoZSB7CiAgICBwdWJsaWM6CiAgICAgICAgQXBwbGljYXRpb25D
YWNoZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
OiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
fQogICAgICAgIHZvaWQgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKTsKICAgICAg
ICB2b2lkIG5ldHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05vd09ubGluZSk7CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIGFwcGxpY2F0aW9uY2FjaGUoKSB7IHJldHVybiAmbV9hcHBsaWNhdGlvbmNhY2hlOyB9
CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRmlsZVN5c3RlbSB7CiAgICBwdWJs
aWM6CiAgICAgICAgRmlsZVN5c3RlbShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0
ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOwogICAgfTsKCiAgICBGaWxlU3lzdGVtKiBmaWxlc3lzdGVtKCkgeyByZXR1cm4gJm1f
ZmlsZXN5c3RlbTsgfQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIGNsYXNzIERP
TSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBkb2N1bWVudFVwZGF0ZWQoKTsK
ICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBub2Rlcyk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVNb2RpZmllZChpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgIHZv
aWQgYXR0cmlidXRlUmVtb3ZlZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
ICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBub2RlSWRzKTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAgICAgIHZvaWQgY2hpbGROb2RlQ291
bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCk7CiAgICAgICAgdm9pZCBj
aGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgcHJldmlvdXNOb2RlSWQsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBub2RlKTsKICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50IHBhcmVudE5v
ZGVJZCwgaW50IG5vZGVJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRl
OgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiAgICB9OwoKICAgIERPTSogZG9tKCkgeyByZXR1cm4gJm1fZG9tOyB9CgogICAgY2xh
c3MgQ1NTIHsKICAgIHB1YmxpYzoKICAgICAgICBDU1MoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lZGlhUXVlcnlSZXN1
bHRDaGFuZ2VkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgp
IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
CiAgICB9OwoKICAgIENTUyogY3NzKCkgeyByZXR1cm4gJm1fY3NzOyB9CgogICAgY2xhc3MgVGlt
ZWxpbmUgewogICAgcHVibGljOgogICAgICAgIFRpbWVsaW5lKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmVudFJlY29y
ZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCk7CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFRpbWVsaW5lKiB0aW1lbGluZSgp
IHsgcmV0dXJuICZtX3RpbWVsaW5lOyB9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICBjbGFzcyBEZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAgRGVidWdnZXIoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIGdsb2JhbE9iamVjdENsZWFyZWQoKTsKICAgICAgICB2b2lkIHNjcmlwdFBhcnNlZChjb25z
dCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IHN0YXJ0TGluZSwgaW50
IHN0YXJ0Q29sdW1uLCBpbnQgZW5kTGluZSwgaW50IGVuZENvbHVtbiwgY29uc3QgYm9vbCogY29u
c3QgaXNDb250ZW50U2NyaXB0LCBjb25zdCBTdHJpbmcmIHNvdXJjZU1hcFVSTCk7CiAgICAgICAg
dm9pZCBzY3JpcHRGYWlsZWRUb1BhcnNlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHNjcmlwdFNvdXJjZSwgaW50IHN0YXJ0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOwogICAgICAgIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24pOwogICAgICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFzb24nIHdoaWxlIGdlbmVyYXRpbmcg
ZXZlbnQgcGF1c2VkLgogICAgICAgIHN0cnVjdCBSZWFzb24gewogICAgICAgICAgICBlbnVtIEVu
dW0gewogICAgICAgICAgICAgICAgWEhSID0gNSwKICAgICAgICAgICAgICAgIERPTSA9IDU5LAog
ICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciA9IDYwLAogICAgICAgICAgICAgICAgRXhjZXB0
aW9uID0gNjEsCiAgICAgICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgICAgICB9OwogICAg
ICAgIH07IC8vIHN0cnVjdCBSZWFzb24KCiAgICAgICAgdm9pZCBwYXVzZWQoUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgLypSZWFzb246OkVudW0qLyBjb25zdCBTdHJpbmcm
IHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgICAgIHZvaWQg
cmVzdW1lZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7
IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwog
ICAgfTsKCiAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSB7IHJldHVybiAmbV9kZWJ1Z2dlcjsgfQoK
I2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAgICAgICAg
RE9NRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkgeyByZXR1cm4gJm1fZG9tZGVidWdn
ZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmlsZXIgewogICAgcHVibGljOgogICAg
ICAgIFByb2ZpbGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRQcm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBoZWFkZXIpOwogICAgICAgIHZvaWQgYWRkSGVhcFNuYXBzaG90Q2h1bmsoaW50
IHVpZCwgY29uc3QgU3RyaW5nJiBjaHVuayk7CiAgICAgICAgdm9pZCBmaW5pc2hIZWFwU25hcHNo
b3QoaW50IHVpZCk7CiAgICAgICAgdm9pZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9m
aWxpbmcpOwogICAgICAgIHZvaWQgcmVzZXRQcm9maWxlcygpOwogICAgICAgIHZvaWQgcmVwb3J0
SGVhcFNuYXBzaG90UHJvZ3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCk7CiAgICAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFByb2ZpbGVyKiBwcm9m
aWxlcigpIHsgcmV0dXJuICZtX3Byb2ZpbGVyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAgIGNsYXNzIFdvcmtlciB7CiAgICBw
dWJsaWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJ
ZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9yQ29ubmVjdGVkKTsKICAgICAgICB2
b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsKICAgICAgICB2b2lkIGRpc3BhdGNo
TWVzc2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV29ya2VyKCk7CiAgICAg
ICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFdvcmtl
ciogd29ya2VyKCkgeyByZXR1cm4gJm1fd29ya2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktF
UlMpCgpwcml2YXRlOgogICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIEluc3BlY3RvciBtX2luc3BlY3RvcjsKICAgIE1lbW9yeSBtX21l
bW9yeTsKICAgIFBhZ2UgbV9wYWdlOwogICAgUnVudGltZSBtX3J1bnRpbWU7CiAgICBDb25zb2xl
IG1fY29uc29sZTsKICAgIE5ldHdvcmsgbV9uZXR3b3JrOwojaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogICAgRE9NU3RvcmFnZSBtX2RvbXN0b3JhZ2U7CiAgICBBcHBsaWNhdGlvbkNhY2hlIG1fYXBw
bGljYXRpb25jYWNoZTsKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgIEZpbGVTeXN0ZW0gbV9m
aWxlc3lzdGVtOwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRE9NIG1fZG9tOwog
ICAgQ1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90aW1lbGluZTsKI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgRGVidWdnZXIgbV9kZWJ1Z2dlcjsKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBE
T01EZWJ1Z2dlciBtX2RvbWRlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIFByb2ZpbGVyIG1fcHJv
ZmlsZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShX
T1JLRVJTKQogICAgV29ya2VyIG1fd29ya2VyOwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCn07
Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9u
dGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120674</attachid>
            <date>2011-12-28 08:26:03 -0800</date>
            <delta_ts>2011-12-28 08:26:03 -0800</delta_ts>
            <desc>New InspectorFrontend.cpp</desc>
            <filename>InspectorFrontend.cpp</filename>
            <type>text/plain</type>
            <size>39771</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgoKCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KCiNpZiBFTkFCTEUoSU5TUEVDVE9SKQoKI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KCm5hbWVzcGFjZSBXZWJDb3JlIHsKCkluc3BlY3Rv
ckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2luc3BlY3RvcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAsIG1fbWVtb3J5KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAg
ICwgbV9wYWdlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9ydW50aW1lKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICwgbV9kb21zdG9yYWdlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICwgbV9maWxlc3lzdGVt
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkK
ICAgICwgbV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgLCBtX2NzcyhpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAsIG1fZGVidWdnZXIoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICwgbV9kb21kZWJ1Z2dlcihp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgLCBtX3Byb2ZpbGVyKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQp7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3Rvcjo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChpbnQgdGVzdENhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCIsICJJbnNwZWN0b3IuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0ZXN0Q2FsbElkIiwgdGVzdENhbGxJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyaXB0Iiwgc2NyaXB0KTsKICAgIGV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVj
dCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpJbnNwZWN0b3I6Omluc3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhpbnRzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBpbnNwZWN0TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbnNw
ZWN0TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiSW5zcGVjdG9yLmluc3BlY3QiKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0KTsK
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJoaW50cyIsIGhpbnRzKTsKICAgIGluc3BlY3RN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChpbnNwZWN0TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3I6OmRpZENyZWF0ZVdvcmtlcihpbnQg
aWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIGRpZENyZWF0ZVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIklu
c3BlY3Rvci5kaWRDcmVhdGVXb3JrZXIiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigiaWQiLCBpZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwg
dXJsKTsKICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaXNTaGFyZWQiLCBpc1NoYXJlZCk7
CiAgICBkaWRDcmVhdGVXb3JrZXJNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkaWRDcmVhdGVXb3Jr
ZXJNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Oklu
c3BlY3Rvcjo6ZGlkRGVzdHJveVdvcmtlcihpbnQgaWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJJbnNw
ZWN0b3IuZGlkRGVzdHJveVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKCJpZCIsIGlkKTsKICAgIGRpZERlc3Ryb3lXb3JrZXJNZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChkaWREZXN0cm95V29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGlt
ZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkb21Db250ZW50RXZlbnRGaXJl
ZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZG9tQ29udGVudEV2ZW50
RmlyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmRvbUNvbnRlbnRFdmVudEZp
cmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFt
cCIsIHRpbWVzdGFtcCk7CiAgICBkb21Db250ZW50RXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGRvbUNvbnRlbnRFdmVudEZpcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpsb2FkRXZlbnRGaXJlZChkb3VibGUgdGltZXN0
YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkRXZlbnRGaXJlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbG9hZEV2ZW50RmlyZWRNZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICJQYWdlLmxvYWRFdmVudEZpcmVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRpbWVzdGFtcCIsIHRpbWVzdGFtcCk7CiAgICBs
b2FkRXZlbnRGaXJlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRFdmVudEZpcmVkTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQYWdlOjpmcmFt
ZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZnJhbWVOYXZpZ2F0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUGFnZS5mcmFtZU5h
dmlnYXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJmcmFt
ZSIsIGZyYW1lKTsKICAgIGZyYW1lTmF2aWdhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZnJh
bWVOYXZpZ2F0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OlBhZ2U6OmZyYW1lRGV0YWNoZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZURldGFjaGVkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBmcmFtZURldGFjaGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiLCAiUGFnZS5mcmFtZURldGFjaGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIGZyYW1lRGV0YWNoZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChmcmFtZURldGFjaGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpDb25zb2xlOjptZXNzYWdlQWRkZWQoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZUFkZGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdl
QWRkZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJDb25zb2xlLm1lc3NhZ2VBZGRlZCIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJtZXNzYWdlIiwgbWVz
c2FnZSk7CiAgICBtZXNzYWdlQWRkZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlQWRk
ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNv
bnNvbGU6Om1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImNvdW50IiwgY291
bnQpOwogICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkNvbnNvbGU6Om1lc3NhZ2VzQ2xlYXJlZCgpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2FnZXNDbGVhcmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiQ29uc29sZS5tZXNzYWdlc0NsZWFyZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2VzQ2xlYXJlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6cmVxdWVzdFdpbGxCZVNlbnQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWRpcmVjdFJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0V2ls
bEJlU2VudE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFdp
bGxCZVNlbnRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RXaWxs
QmVTZW50Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVl
c3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZnJhbWVJZCIs
IGZyYW1lSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImxvYWRlcklkIiwgbG9hZGVy
SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgZG9jdW1lbnRV
UkwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInJlcXVlc3QiLCByZXF1ZXN0KTsKICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoImluaXRpYXRvciIsIGluaXRpYXRvcik7CiAgICBpZiAoc3Rh
Y2tUcmFjZSkKICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgc3Rh
Y2tUcmFjZSk7CiAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVkaXJlY3RSZXNwb25zZSIsIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgcmVx
dWVzdFdpbGxCZVNlbnRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7
CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXF1ZXN0V2lsbEJlU2VudE1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29y
azo6cmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVxdWVzdFNlcnZlZEZyb21DYWNoZSIp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCBy
ZXF1ZXN0SWQpOwogICAgcmVxdWVzdFNlcnZlZEZyb21DYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2Fk
ZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSkK
ewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VSZWNlaXZlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCIpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJsb2FkZXJJZCIsIGxvYWRlcklkKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiLCB0eXBlKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXNw
b25zZSIsIHJlc3BvbnNlKTsKICAgIHJlc3BvbnNlUmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpOZXR3b3JrOjpkYXRhUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFSZWNlaXZlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGF0YVJlY2VpdmVkTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay5kYXRhUmVjZWl2ZWQiKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElkIiwgcmVxdWVzdElkKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKCJ0aW1lc3RhbXAiLCB0aW1lc3RhbXApOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoImRhdGFMZW5ndGgiLCBkYXRhTGVuZ3RoKTsKICAgIHBhcmFtc09i
amVjdC0+c2V0TnVtYmVyKCJlbmNvZGVkRGF0YUxlbmd0aCIsIGVuY29kZWREYXRhTGVuZ3RoKTsK
ICAgIGRhdGFSZWNlaXZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0
KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGRhdGFSZWNlaXZlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1w
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmluaXNoZWRNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGxvYWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsubG9hZGluZ0ZpbmlzaGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAg
ICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIGxv
YWRpbmdGaW5pc2hlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGaW5pc2hlZE1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0d29yazo6
bG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwg
Y29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2FkaW5nRmFpbGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBsb2FkaW5nRmFpbGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiTmV0d29yay5sb2FkaW5nRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlcnJvclRleHQiLCBlcnJvclRleHQpOwogICAgaWYgKGNhbmNlbGVkKQogICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigiY2FuY2VsZWQiLCAqY2FuY2VsZWQpOwogICAg
bG9hZGluZ0ZhaWxlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsK
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGxvYWRpbmdGYWlsZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJl
cXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpO
ZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRv
ciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGVNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJOZXR3b3JrLnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2Fj
aGUiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVxdWVzdElk
IiwgcmVxdWVzdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJh
bWVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibG9hZGVySWQiLCBsb2FkZXJJZCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygiZG9jdW1lbnRVUkwiLCBkb2N1bWVudFVSTCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJpbml0aWF0b3IiLCBpbml0aWF0b3IpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInJlc291cmNlIiwgcmVzb3VyY2UpOwogICAgcmVxdWVzdFNl
cnZlZEZyb21NZW1vcnlDYWNoZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2Jq
ZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGVNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXF1ZXN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRX
aWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHdlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdE1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0Iik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJl
cXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0
YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJyZXF1ZXN0IiwgcmVxdWVzdCk7CiAg
ICB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCh3ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVlc3RNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OndlYlNvY2tldEhhbmRzaGFr
ZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZVJlY2VpdmVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiTmV0d29yay53ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVlc3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1wKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJyZXNwb25zZSIsIHJlc3BvbnNlKTsKICAgIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNl
UmVjZWl2ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25z
ZVJlY2VpdmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpOZXR3b3JrOjp3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIHVybCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgd2ViU29ja2V0
Q3JlYXRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q3Jl
YXRlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJyZXF1ZXN0
SWQiLCByZXF1ZXN0SWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7
CiAgICB3ZWJTb2NrZXRDcmVhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNP
YmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod2ViU29ja2V0Q3Jl
YXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
TmV0d29yazo6d2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3ZWJTb2NrZXRDbG9zZWRN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHdlYlNvY2tldENsb3NlZE1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIk5ldHdvcmsud2ViU29ja2V0Q2xvc2VkIik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInJlcXVlc3RJZCIsIHJlcXVl
c3RJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigidGltZXN0YW1wIiwgdGltZXN0YW1w
KTsKICAgIHdlYlNvY2tldENsb3NlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1z
T2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHdlYlNvY2tldENs
b3NlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEYXRhYmFzZTo6YWRkRGF0YWJhc2UoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGRhdGFiYXNlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhZGREYXRh
YmFzZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRGF0YWJhc2VN
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEYXRhYmFzZS5hZGREYXRhYmFzZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRhYmFzZSIsIGRhdGFiYXNl
KTsKICAgIGFkZERhdGFiYXNlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRGF0YWJhc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRhdGFiYXNl
OjpzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlcykKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsVHJhbnNhY3Rpb25TdWNjZWVk
ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNxbFRyYW5zYWN0aW9u
U3VjY2VlZGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRGF0YWJhc2Uuc3FsVHJhbnNh
Y3Rpb25TdWNjZWVkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigidHJhbnNhY3Rpb25JZCIsIHRyYW5zYWN0aW9uSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiLCBjb2x1bW5OYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJ2YWx1ZXMiLCB2YWx1ZXMpOwogICAgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWRNZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGF0YWJhc2U6OnNxbFRyYW5zYWN0
aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
c3FsRXJyb3IpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNxbFRyYW5zYWN0aW9uRmFp
bGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzcWxUcmFuc2FjdGlv
bkZhaWxlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRhdGFiYXNlLnNxbFRyYW5zYWN0
aW9uRmFpbGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInRy
YW5zYWN0aW9uSWQiLCB0cmFuc2FjdGlvbklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciIsIHNxbEVycm9yKTsKICAgIHNxbFRyYW5zYWN0aW9uRmFpbGVkTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoc3FsVHJhbnNhY3Rpb25GYWlsZWRNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6RE9NU3RvcmFnZTo6YWRkRE9NU3RvcmFnZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gc3RvcmFnZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWRkRE9NU3RvcmFnZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYWRkRE9NU3RvcmFnZU1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTVN0b3JhZ2UuYWRkRE9NU3RvcmFnZSIpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzdG9yYWdlIiwgc3RvcmFnZSk7
CiAgICBhZGRET01TdG9yYWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmpl
Y3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkRE9NU3RvcmFnZU1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NU3Rv
cmFnZTo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB1cGRhdGVET01TdG9yYWdlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICB1cGRhdGVET01TdG9yYWdlTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAi
RE9NU3RvcmFnZS51cGRhdGVET01TdG9yYWdlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoInN0b3JhZ2VJZCIsIHN0b3JhZ2VJZCk7CiAgICB1cGRhdGVET01TdG9y
YWdlTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQodXBkYXRlRE9NU3RvcmFnZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6
YXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQgc3RhdHVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCIsICJBcHBsaWNhdGlvbkNhY2hlLmFwcGxpY2F0aW9uQ2FjaGVT
dGF0dXNVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
ImZyYW1lSWQiLCBmcmFtZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJtYW5pZmVz
dFVSTCIsIG1hbmlmZXN0VVJMKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJzdGF0dXMi
LCBzdGF0dXMpOwogICAgYXBwbGljYXRpb25DYWNoZVN0YXR1c1VwZGF0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6QXBwbGljYXRpb25DYWNoZTo6bmV0
d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25saW5lKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBuZXR3b3JrU3RhdGVVcGRhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiQXBwbGljYXRpb25DYWNoZS5uZXR3b3JrU3RhdGVVcGRhdGVkIik7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc05vd09ubGluZSIsIGlzTm93T25saW5lKTsK
ICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChuZXR3b3JrU3Rh
dGVVcGRhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQoKI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKCnZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OkRPTTo6ZG9jdW1lbnRVcGRhdGVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZG9jdW1lbnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBk
b2N1bWVudFVwZGF0ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uZG9jdW1lbnRV
cGRhdGVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChkb2N1bWVudFVw
ZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OkRPTTo6c2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG5vZGVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZXRDaGlsZE5vZGVzTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBzZXRDaGlsZE5vZGVzTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLnNldENoaWxkTm9kZXMiKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigicGFyZW50SWQiLCBwYXJlbnRJZCk7CiAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlcyIsIG5vZGVzKTsKICAgIHNldENoaWxkTm9kZXNN
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChzZXRDaGlsZE5vZGVzTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpET006OmF0dHJpYnV0ZU1vZGlmaWVkKGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGF0dHJpYnV0ZU1vZGlmaWVkTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiLCAiRE9NLmF0dHJpYnV0ZU1vZGlmaWVkIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InZhbHVlIiwgdmFsdWUpOwogICAgYXR0cmlidXRlTW9kaWZpZWRNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChhdHRyaWJ1dGVNb2RpZmllZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6RE9NOjphdHRyaWJ1dGVSZW1vdmVkKGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgYXR0cmlidXRlUmVt
b3ZlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRPTS5hdHRyaWJ1dGVSZW1vdmVkIik7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJ
ZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgYXR0cmli
dXRlUmVtb3ZlZE1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGF0dHJpYnV0ZVJlbW92ZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6aW5saW5l
U3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmlubGluZVN0eWxlSW52YWxpZGF0ZWQiKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJub2RlSWRzIiwgbm9kZUlk
cyk7CiAgICBpbmxpbmVTdHlsZUludmFsaWRhdGVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoaW5s
aW5lU3R5bGVJbnZhbGlkYXRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6RE9NOjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiBjaGFyYWN0ZXJEYXRhKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
aGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIGNoYXJhY3RlckRhdGFNb2RpZmllZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRP
TS5jaGFyYWN0ZXJEYXRhTW9kaWZpZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJjaGFyYWN0ZXJEYXRhIiwgY2hhcmFjdGVyRGF0YSk7CiAgICBjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGFyYWN0ZXJEYXRhTW9kaWZpZWRNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRPTTo6Y2hpbGROb2Rl
Q291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVDb3VudCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gY2hpbGROb2RlQ291bnRVcGRhdGVkTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlQ291bnRVcGRhdGVkIik7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CiAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCBjaGlsZE5vZGVDb3VudCk7CiAg
ICBjaGlsZE5vZGVDb3VudFVwZGF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFt
c09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjaGlsZE5vZGVD
b3VudFVwZGF0ZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OkRPTTo6Y2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IHByZXZp
b3VzTm9kZUlkLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbm9kZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Y2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGNoaWxkTm9kZUluc2VydGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiRE9NLmNoaWxk
Tm9kZUluc2VydGVkIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
InBhcmVudE5vZGVJZCIsIHBhcmVudE5vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJl
cigicHJldmlvdXNOb2RlSWQiLCBwcmV2aW91c05vZGVJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgibm9kZSIsIG5vZGUpOwogICAgY2hpbGROb2RlSW5zZXJ0ZWRNZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjaGlsZE5vZGVJbnNlcnRlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RE9NOjpjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnRO
b2RlSWQsIGludCBub2RlSWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGNoaWxkTm9k
ZVJlbW92ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJET00uY2hpbGROb2RlUmVtb3Zl
ZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKCJwYXJlbnROb2Rl
SWQiLCBwYXJlbnROb2RlSWQpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoIm5vZGVJZCIs
IG5vZGVJZCk7CiAgICBjaGlsZE5vZGVSZW1vdmVkTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
LCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY2hp
bGROb2RlUmVtb3ZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Q1NTOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZE1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIkNTUy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCIpOwogICAgaWYgKG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVkaWFRdWVyeVJlc3VsdENoYW5nZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlRpbWVsaW5lOjpl
dmVudFJlY29yZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5l
RXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXZlbnRSZWNvcmRlZE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgZXZlbnRSZWNvcmRlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwg
IlRpbWVsaW5lLmV2ZW50UmVjb3JkZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgicmVjb3JkIiwgcmVjb3JkKTsKICAgIGV2ZW50UmVjb3JkZWRNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChldmVudFJlY29yZGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpE
ZWJ1Z2dlcjo6Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIGdsb2JhbE9iamVjdENsZWFyZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJE
ZWJ1Z2dlci5nbG9iYWxPYmplY3RDbGVhcmVkIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChnbG9iYWxPYmplY3RDbGVhcmVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpEZWJ1Z2dlcjo6c2NyaXB0UGFyc2VkKGNvbnN0IFN0
cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3Rh
cnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBp
c0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBzY3JpcHRQYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIkRl
YnVnZ2VyLnNjcmlwdFBhcnNlZCIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJzY3JpcHRJZCIsIHNjcmlwdElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJ1cmwiLCB1cmwpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0
YXJ0TGluZSk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigic3RhcnRDb2x1bW4iLCBzdGFy
dENvbHVtbik7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZW5kTGluZSIsIGVuZExpbmUp
OwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoImVuZENvbHVtbiIsIGVuZENvbHVtbik7CiAg
ICBpZiAoaXNDb250ZW50U2NyaXB0KQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0Qm9vbGVhbigi
aXNDb250ZW50U2NyaXB0IiwgKmlzQ29udGVudFNjcmlwdCk7CiAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygic291cmNlTWFwVVJMIiwgc291cmNlTWFwVVJMKTsKICAgIHNjcmlwdFBhcnNlZE1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdFBhcnNlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnNjcmlwdEZhaWxlZFRvUGFy
c2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKewogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgc2NyaXB0RmFpbGVkVG9QYXJzZU1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIiwgIkRlYnVnZ2VyLnNjcmlwdEZhaWxlZFRvUGFyc2UiKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJzY3JpcHRTb3VyY2UiLCBzY3JpcHRTb3VyY2UpOwogICAgcGFy
YW1zT2JqZWN0LT5zZXROdW1iZXIoInN0YXJ0TGluZSIsIHN0YXJ0TGluZSk7CiAgICBwYXJhbXNP
YmplY3QtPnNldE51bWJlcigiZXJyb3JMaW5lIiwgZXJyb3JMaW5lKTsKICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlcnJvck1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwogICAgc2NyaXB0RmFp
bGVkVG9QYXJzZU1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHNjcmlwdEZhaWxlZFRvUGFyc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2Vy
OjpicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBsb2NhdGlvbikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludFJlc29sdmVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBicmVh
a3BvaW50UmVzb2x2ZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5icmVh
a3BvaW50UmVzb2x2ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZygiYnJlYWtwb2ludElkIiwgYnJlYWtwb2ludElkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIGxvY2F0aW9uKTsKICAgIGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGJyZWFrcG9pbnRSZXNvbHZlZE1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6RGVidWdnZXI6OnBhdXNlZChQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNvbnN0IFN0cmlu
ZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKewogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGF1c2VkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJEZWJ1Z2dlci5wYXVz
ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjYWxsRnJhbWVz
IiwgY2FsbEZyYW1lcyk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicmVhc29uIiwgcmVh
c29uKTsKICAgIGlmIChkYXRhKQogICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJkYXRh
IiwgZGF0YSk7CiAgICBwYXVzZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09i
amVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChwYXVzZWRNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpy
ZXN1bWVkKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdW1lZE1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzdW1lZE1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIiwgIkRlYnVnZ2VyLnJlc3VtZWQiKTsKICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHJlc3VtZWRNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKCnZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjphZGRQ
cm9maWxlSGVhZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIGFkZFByb2ZpbGVIZWFkZXJNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5hZGRQcm9maWxlSGVhZGVyIik7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoImhlYWRlciIsIGhlYWRlcik7CiAgICBhZGRQcm9maWxl
SGVhZGVyTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoYWRkUHJvZmlsZUhlYWRlck1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXI6OmFkZEhl
YXBTbmFwc2hvdENodW5rKGludCB1aWQsIGNvbnN0IFN0cmluZyYgY2h1bmspCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVua01lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIiwgIlByb2ZpbGVyLmFkZEhlYXBTbmFwc2hvdENodW5rIik7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIoInVpZCIsIHVpZCk7CiAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygiY2h1bmsiLCBjaHVuayk7CiAgICBhZGRIZWFwU25hcHNob3RDaHVu
a01lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIiwgcGFyYW1zT2JqZWN0KTsKICAgIGlmIChtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGFkZEhlYXBTbmFwc2hvdENodW5rTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6ZmluaXNo
SGVhcFNuYXBzaG90KGludCB1aWQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZpbmlz
aEhlYXBTbmFwc2hvdE1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZmlu
aXNoSGVhcFNuYXBzaG90TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiUHJvZmlsZXIuZmlu
aXNoSGVhcFNuYXBzaG90Iik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXROdW1i
ZXIoInVpZCIsIHVpZCk7CiAgICBmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChmaW5pc2hIZWFwU25hcHNob3RNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyOjpzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQ
cm9maWxpbmcpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHNldFJlY29yZGluZ1Byb2Zp
bGVNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNldFJlY29yZGluZ1By
b2ZpbGVNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJQcm9maWxlci5zZXRSZWNvcmRpbmdQ
cm9maWxlIik7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcGFyYW1zT2JqZWN0LT5zZXRCb29sZWFuKCJpc1By
b2ZpbGluZyIsIGlzUHJvZmlsaW5nKTsKICAgIHNldFJlY29yZGluZ1Byb2ZpbGVNZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChzZXRSZWNvcmRpbmdQcm9maWxlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVzZXRQcm9maWxlcygpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc2V0UHJvZmlsZXNNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc2V0UHJvZmlsZXNNZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICJQcm9maWxlci5yZXNldFByb2ZpbGVzIik7CiAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNldFByb2ZpbGVzTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckZyb250ZW5kOjpQcm9maWxlcjo6cmVwb3J0SGVhcFNuYXBzaG90UHJv
Z3Jlc3MoaW50IGRvbmUsIGludCB0b3RhbCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3NNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiLCAiUHJvZmlsZXIucmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MiKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigiZG9uZSIsIGRvbmUpOwogICAgcGFyYW1z
T2JqZWN0LT5zZXROdW1iZXIoInRvdGFsIiwgdG90YWwpOwogICAgcmVwb3J0SGVhcFNuYXBzaG90
UHJvZ3Jlc3NNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBhcmFtc09iamVjdCk7CiAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
c01lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
V29ya2VyOjp3b3JrZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaW5zcGVjdG9yQ29ubmVjdGVkKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB3b3Jr
ZXJDcmVhdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICB3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiV29ya2VyLndvcmtlckNyZWF0ZWQi
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcigid29ya2VySWQiLCB3
b3JrZXJJZCk7CiAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgIHBh
cmFtc09iamVjdC0+c2V0Qm9vbGVhbigiaW5zcGVjdG9yQ29ubmVjdGVkIiwgaW5zcGVjdG9yQ29u
bmVjdGVkKTsKICAgIHdvcmtlckNyZWF0ZWRNZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyIsIHBh
cmFtc09iamVjdCk7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh3b3JrZXJD
cmVhdGVkTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpXb3JrZXI6OndvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICB3b3JrZXJUZXJtaW5hdGVkTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
LCAiV29ya2VyLndvcmtlclRlcm1pbmF0ZWQiKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcigid29ya2VySWQiLCB3b3JrZXJJZCk7CiAgICB3b3JrZXJUZXJtaW5hdGVk
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQod29ya2VyVGVybWluYXRlZE1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyKGludCB3b3JrZXJJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRpc3BhdGNoTWVzc2FnZUZyb21X
b3JrZXJNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXJNZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICJXb3JrZXIuZGlzcGF0
Y2hNZXNzYWdlRnJvbVdvcmtlciIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHBhcmFtc09iamVjdC0+c2V0
TnVtYmVyKCJ3b3JrZXJJZCIsIHdvcmtlcklkKTsKICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJtZXNzYWdlIiwgbWVzc2FnZSk7CiAgICBkaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiLCBwYXJhbXNPYmplY3QpOwogICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlck1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6V29ya2VyOjpkaXNjb25uZWN0
ZWRGcm9tV29ya2VyKCkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGlzY29ubmVjdGVk
RnJvbVdvcmtlck1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgZGlzY29u
bmVjdGVkRnJvbVdvcmtlck1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIldvcmtlci5kaXNj
b25uZWN0ZWRGcm9tV29ya2VyIik7CiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChkaXNjb25uZWN0ZWRGcm9tV29ya2VyTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9CgojZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCgoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKCmNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiAgICAiRG9jdW1lbnQiLAogICAg
IlN0eWxlc2hlZXQiLAogICAgIkltYWdlIiwKICAgICJGb250IiwKICAgICJTY3JpcHQiLAogICAg
IlhIUiIsCiAgICAiV2ViU29ja2V0IiwKICAgICJPdGhlciIsCiAgICAib2JqZWN0IiwKICAgICJm
dW5jdGlvbiIsCiAgICAidW5kZWZpbmVkIiwKICAgICJzdHJpbmciLAogICAgIm51bWJlciIsCiAg
ICAiYm9vbGVhbiIsCiAgICAiYXJyYXkiLAogICAgIm51bGwiLAogICAgIm5vZGUiLAogICAgInJl
Z2V4cCIsCiAgICAiZGF0ZSIsCiAgICAiaHRtbCIsCiAgICAid21sIiwKICAgICJ4bWwiLAogICAg
ImphdmFzY3JpcHQiLAogICAgIm5ldHdvcmsiLAogICAgImNvbnNvbGUtYXBpIiwKICAgICJvdGhl
ciIsCiAgICAidGlwIiwKICAgICJsb2ciLAogICAgIndhcm5pbmciLAogICAgImVycm9yIiwKICAg
ICJkZWJ1ZyIsCiAgICAiZGlyIiwKICAgICJkaXJ4bWwiLAogICAgInRyYWNlIiwKICAgICJzdGFy
dEdyb3VwIiwKICAgICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKICAgICJlbmRHcm91cCIsCiAgICAi
YXNzZXJ0IiwKICAgICJwYXJzZXIiLAogICAgInNjcmlwdCIsCiAgICAidXNlciIsCiAgICAidXNl
ci1hZ2VudCIsCiAgICAiaW5zcGVjdG9yIiwKICAgICIiLAogICAgImFjdGl2ZSIsCiAgICAiaW5h
Y3RpdmUiLAogICAgImRpc2FibGVkIiwKICAgICJzdHlsZSIsCiAgICAibWVkaWFSdWxlIiwKICAg
ICJpbXBvcnRSdWxlIiwKICAgICJzdHlsZXNoZWV0IiwKICAgICJnbG9iYWwiLAogICAgImxvY2Fs
IiwKICAgICJ3aXRoIiwKICAgICJjbG9zdXJlIiwKICAgICJjYXRjaCIsCiAgICAic3VidHJlZS1t
b2RpZmllZCIsCiAgICAiYXR0cmlidXRlLW1vZGlmaWVkIiwKICAgICJub2RlLXJlbW92ZWQiLAog
ICAgIkRPTSIsCiAgICAiRXZlbnRMaXN0ZW5lciIsCiAgICAiZXhjZXB0aW9uIgp9OwoKU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cn0KCn0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCgp9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>120675</attachid>
            <date>2011-12-28 08:27:32 -0800</date>
            <delta_ts>2011-12-28 08:27:32 -0800</delta_ts>
            <desc>Generator output diff</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>14597</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">NDBhNDEsNDMKPiAKPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwo+IAox
OTEsMjAwYzE5NCwyMDUKPCBuYW1lc3BhY2UgUmVzb3VyY2VUeXBlIHsKPCBjb25zdCBjaGFyKiBj
b25zdCBkb2N1bWVudCA9ICJEb2N1bWVudCI7CjwgY29uc3QgY2hhciogY29uc3Qgc3R5bGVzaGVl
dCA9ICJTdHlsZXNoZWV0IjsKPCBjb25zdCBjaGFyKiBjb25zdCBpbWFnZSA9ICJJbWFnZSI7Cjwg
Y29uc3QgY2hhciogY29uc3QgZm9udCA9ICJGb250IjsKPCBjb25zdCBjaGFyKiBjb25zdCBzY3Jp
cHQgPSAiU2NyaXB0IjsKPCBjb25zdCBjaGFyKiBjb25zdCB4aHIgPSAiWEhSIjsKPCBjb25zdCBj
aGFyKiBjb25zdCB3ZWJTb2NrZXQgPSAiV2ViU29ja2V0IjsKPCBjb25zdCBjaGFyKiBjb25zdCBv
dGhlciA9ICJPdGhlciI7CjwgfSAvLyBuYW1lc3BhY2UgUmVzb3VyY2VUeXBlCi0tLQo+IHN0cnVj
dCBSZXNvdXJjZVR5cGUgewo+ICAgICBlbnVtIEVudW0gewo+ICAgICAgICAgRG9jdW1lbnQgPSAw
LAo+ICAgICAgICAgU3R5bGVzaGVldCA9IDEsCj4gICAgICAgICBJbWFnZSA9IDIsCj4gICAgICAg
ICBGb250ID0gMywKPiAgICAgICAgIFNjcmlwdCA9IDQsCj4gICAgICAgICBYSFIgPSA1LAo+ICAg
ICAgICAgV2ViU29ja2V0ID0gNiwKPiAgICAgICAgIE90aGVyID0gNywKPiAgICAgfTsKPiB9OyAv
LyBzdHJ1Y3QgUmVzb3VyY2VUeXBlCjMzNWEzNDEsMzQ3Cj4gICAgICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBl
OjpFbnVtIHZhbHVlKQo+ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cj4g
ICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVf
U0VUPigpOwo+ICAgICAgICAgICAgIH0KPiAgICAgCjcyNSw3NDJjNzM3LDc1OAo8ICAgICAvLyAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90
ZU9iamVjdC4KPCAgICAgLy8gbmFtZXNwYWNlIFR5cGUgewo8ICAgICAvLyBjb25zdCBjaGFyKiBj
b25zdCBvYmplY3QgPSAib2JqZWN0IjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgZnVuY3Rp
b24gPSAiZnVuY3Rpb24iOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCB1bmRlZmluZWQgPSAi
dW5kZWZpbmVkIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qgc3RyaW5nID0gInN0cmluZyI7
CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG51bWJlciA9ICJudW1iZXIiOwo8ICAgICAvLyBj
b25zdCBjaGFyKiBjb25zdCBib29sZWFuID0gImJvb2xlYW4iOwo8ICAgICAvLyB9IC8vIG5hbWVz
cGFjZSBUeXBlCjwgCjwgICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5
cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0Lgo8ICAgICAvLyBuYW1lc3BhY2UgU3Vi
dHlwZSB7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGFycmF5ID0gImFycmF5IjsKPCAgICAg
Ly8gY29uc3QgY2hhciogY29uc3QgbnVsbCA9ICJudWxsIjsKPCAgICAgLy8gY29uc3QgY2hhciog
Y29uc3Qgbm9kZSA9ICJub2RlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgcmVnZXhwID0g
InJlZ2V4cCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGRhdGUgPSAiZGF0ZSI7CjwgICAg
IC8vIH0gLy8gbmFtZXNwYWNlIFN1YnR5cGUKLS0tCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0Lgo+ICAgICBzdHJ1
Y3QgVHlwZSB7Cj4gICAgICAgICBlbnVtIEVudW0gewo+ICAgICAgICAgICAgIE9iamVjdCA9IDgs
Cj4gICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAo+ICAgICAgICAgICAgIFVuZGVmaW5lZCA9IDEw
LAo+ICAgICAgICAgICAgIFN0cmluZyA9IDExLAo+ICAgICAgICAgICAgIE51bWJlciA9IDEyLAo+
ICAgICAgICAgICAgIEJvb2xlYW4gPSAxMywKPiAgICAgICAgIH07Cj4gICAgIH07IC8vIHN0cnVj
dCBUeXBlCj4gCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdo
aWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0Lgo+ICAgICBzdHJ1Y3QgU3VidHlwZSB7Cj4gICAg
ICAgICBlbnVtIEVudW0gewo+ICAgICAgICAgICAgIEFycmF5ID0gMTQsCj4gICAgICAgICAgICAg
TnVsbCA9IDE1LAo+ICAgICAgICAgICAgIE5vZGUgPSAxNiwKPiAgICAgICAgICAgICBSZWdleHAg
PSAxNywKPiAgICAgICAgICAgICBEYXRlID0gMTgsCj4gICAgICAgICB9Owo+ICAgICB9OyAvLyBz
dHJ1Y3QgU3VidHlwZQo3NjdhNzg0LDc5MAo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVf
U0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwo+ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQ
RV9TRVQ+KCk7Cj4gICAgICAgICB9Cj4gCjc5NmE4MjAsODI0Cj4gICAgIHZvaWQgc2V0U3VidHlw
ZShTdWJ0eXBlOjpFbnVtIHZhbHVlKQo+ICAgICB7Cj4gICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICB9Cj4gCjk5Nywx
MDI3YzEwMjUsMTA2MQo8ICAgICAvLyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3Vy
Y2UnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCjwgICAgIC8vIG5hbWVzcGFjZSBT
b3VyY2Ugewo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBodG1sID0gImh0bWwiOwo8ICAgICAv
LyBjb25zdCBjaGFyKiBjb25zdCB3bWwgPSAid21sIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29u
c3QgeG1sID0gInhtbCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGphdmFzY3JpcHQgPSAi
amF2YXNjcmlwdCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IG5ldHdvcmsgPSAibmV0d29y
ayI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGNvbnNvbGVfYXBpID0gImNvbnNvbGUtYXBp
IjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qgb3RoZXIgPSAib3RoZXIiOwo8ICAgICAvLyB9
IC8vIG5hbWVzcGFjZSBTb3VyY2UKPCAKPCAgICAgLy8gLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnbGV2ZWwnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCjwgICAgIC8vIG5h
bWVzcGFjZSBMZXZlbCB7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHRpcCA9ICJ0aXAiOwo8
ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBsb2cgPSAibG9nIjsKPCAgICAgLy8gY29uc3QgY2hh
ciogY29uc3Qgd2FybmluZyA9ICJ3YXJuaW5nIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qg
ZXJyb3IgPSAiZXJyb3IiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBkZWJ1ZyA9ICJkZWJ1
ZyI7CjwgICAgIC8vIH0gLy8gbmFtZXNwYWNlIExldmVsCjwgCjwgICAgIC8vIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2Uu
CjwgICAgIC8vIG5hbWVzcGFjZSBUeXBlIHsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgbG9n
ID0gImxvZyI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGRpciA9ICJkaXIiOwo8ICAgICAv
LyBjb25zdCBjaGFyKiBjb25zdCBkaXJ4bWwgPSAiZGlyeG1sIjsKPCAgICAgLy8gY29uc3QgY2hh
ciogY29uc3QgdHJhY2UgPSAidHJhY2UiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBzdGFy
dEdyb3VwID0gInN0YXJ0R3JvdXAiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBzdGFydEdy
b3VwQ29sbGFwc2VkID0gInN0YXJ0R3JvdXBDb2xsYXBzZWQiOwo8ICAgICAvLyBjb25zdCBjaGFy
KiBjb25zdCBlbmRHcm91cCA9ICJlbmRHcm91cCI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0
IGFzc2VydCA9ICJhc3NlcnQiOwo8ICAgICAvLyB9IC8vIG5hbWVzcGFjZSBUeXBlCi0tLQo+ICAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcg
Q29uc29sZU1lc3NhZ2UuCj4gICAgIHN0cnVjdCBTb3VyY2Ugewo+ICAgICAgICAgZW51bSBFbnVt
IHsKPiAgICAgICAgICAgICBIdG1sID0gMTksCj4gICAgICAgICAgICAgV21sID0gMjAsCj4gICAg
ICAgICAgICAgWG1sID0gMjEsCj4gICAgICAgICAgICAgSmF2YXNjcmlwdCA9IDIyLAo+ICAgICAg
ICAgICAgIE5ldHdvcmsgPSAyMywKPiAgICAgICAgICAgICBDb25zb2xlX2FwaSA9IDI0LAo+ICAg
ICAgICAgICAgIE90aGVyID0gMjUsCj4gICAgICAgICB9Owo+ICAgICB9OyAvLyBzdHJ1Y3QgU291
cmNlCj4gCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBn
ZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgo+ICAgICBzdHJ1Y3QgTGV2ZWwgewo+ICAgICAgICAg
ZW51bSBFbnVtIHsKPiAgICAgICAgICAgICBUaXAgPSAyNiwKPiAgICAgICAgICAgICBMb2cgPSAy
NywKPiAgICAgICAgICAgICBXYXJuaW5nID0gMjgsCj4gICAgICAgICAgICAgRXJyb3IgPSAyOSwK
PiAgICAgICAgICAgICBEZWJ1ZyA9IDMwLAo+ICAgICAgICAgfTsKPiAgICAgfTsgLy8gc3RydWN0
IExldmVsCj4gCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxl
IGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCj4gICAgIHN0cnVjdCBUeXBlIHsKPiAgICAgICAg
IGVudW0gRW51bSB7Cj4gICAgICAgICAgICAgTG9nID0gMjcsCj4gICAgICAgICAgICAgRGlyID0g
MzEsCj4gICAgICAgICAgICAgRGlyeG1sID0gMzIsCj4gICAgICAgICAgICAgVHJhY2UgPSAzMywK
PiAgICAgICAgICAgICBTdGFydEdyb3VwID0gMzQsCj4gICAgICAgICAgICAgU3RhcnRHcm91cENv
bGxhcHNlZCA9IDM1LAo+ICAgICAgICAgICAgIEVuZEdyb3VwID0gMzYsCj4gICAgICAgICAgICAg
QXNzZXJ0ID0gMzcsCj4gICAgICAgICB9Owo+ICAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoxMDU0YTEw
ODksMTA5NQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9TRVQ+JiBzZXRTb3VyY2Uo
U291cmNlOjpFbnVtIHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0KTsK
PiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U09VUkNFX1NF
VD4oKTsKPiAgICAgICAgIH0KPiAKMTA2MWExMTAzLDExMDkKPiAgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBMRVZFTF9TRVQ+JiBzZXRMZXZlbChMZXZlbDo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsK
PiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwgcHJvcGVy
dHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwo+ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImxldmVsIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPExFVkVMX1NFVD4oKTsKPiAgICAgICAgIH0KPiAKMTA5OWExMTQ4LDExNTIK
PiAgICAgdm9pZCBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCj4gICAgIHsKPiAgICAgICAgIHRo
aXMtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cj4gICAg
IH0KPiAKMTc5MGExODQ0LDE4NTAKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4m
IHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKPiAg
ICAgICAgIHsKPiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQp
LCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwo+ICAgICAgICAgfQo+IAoxODQxLDE4NDZj
MTkwMSwxOTA4CjwgICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdo
aWxlIGdlbmVyYXRpbmcgSW5pdGlhdG9yLgo8ICAgICAvLyBuYW1lc3BhY2UgVHlwZSB7CjwgICAg
IC8vIGNvbnN0IGNoYXIqIGNvbnN0IHBhcnNlciA9ICJwYXJzZXIiOwo8ICAgICAvLyBjb25zdCBj
aGFyKiBjb25zdCBzY3JpcHQgPSAic2NyaXB0IjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qg
b3RoZXIgPSAib3RoZXIiOwo8ICAgICAvLyB9IC8vIG5hbWVzcGFjZSBUeXBlCi0tLQo+ICAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEluaXRp
YXRvci4KPiAgICAgc3RydWN0IFR5cGUgewo+ICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAg
ICAgICBQYXJzZXIgPSAzOCwKPiAgICAgICAgICAgICBTY3JpcHQgPSAzOSwKPiAgICAgICAgICAg
ICBPdGhlciA9IDI1LAo+ICAgICAgICAgfTsKPiAgICAgfTsgLy8gc3RydWN0IFR5cGUKMTg3MWEx
OTM0LDE5NDAKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoVHlw
ZTo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKPiAgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwo+ICAgICAg
ICAgfQo+IAozMjE3LDMyMjNjMzI4NiwzMjk0CjwgICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ29yaWdpbicgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgo8ICAgICAvLyBuYW1l
c3BhY2UgT3JpZ2luIHsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgdXNlciA9ICJ1c2VyIjsK
PCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgdXNlcl9hZ2VudCA9ICJ1c2VyLWFnZW50IjsKPCAg
ICAgLy8gY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9yID0gImluc3BlY3RvciI7CjwgICAgIC8v
IGNvbnN0IGNoYXIqIGNvbnN0ICA9ICIiOwo8ICAgICAvLyB9IC8vIG5hbWVzcGFjZSBPcmlnaW4K
LS0tCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ29yaWdpbicgd2hpbGUgZ2Vu
ZXJhdGluZyBDU1NSdWxlLgo+ICAgICBzdHJ1Y3QgT3JpZ2luIHsKPiAgICAgICAgIGVudW0gRW51
bSB7Cj4gICAgICAgICAgICAgVXNlciA9IDQwLAo+ICAgICAgICAgICAgIFVzZXJfYWdlbnQgPSA0
MSwKPiAgICAgICAgICAgICBJbnNwZWN0b3IgPSA0MiwKPiAgICAgICAgICAgICBFbXB0eSA9IDQz
LAo+ICAgICAgICAgfTsKPiAgICAgfTsgLy8gc3RydWN0IE9yaWdpbgozMjY1YTMzMzcsMzM0Mwo+
ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9SSUdJTl9TRVQ+JiBzZXRPcmlnaW4oT3JpZ2luOjpF
bnVtIHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKPiAgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2
YWx1ZSkpOwo+ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JJR0lOX1NFVD4oKTsKPiAg
ICAgICAgIH0KPiAKMzU1OSwzNTY1YzM2MzcsMzY0NQo8ICAgICAvLyAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCjwgICAg
IC8vIG5hbWVzcGFjZSBTdGF0dXMgewo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBhY3RpdmUg
PSAiYWN0aXZlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgaW5hY3RpdmUgPSAiaW5hY3Rp
dmUiOwo8ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBkaXNhYmxlZCA9ICJkaXNhYmxlZCI7Cjwg
ICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IHN0eWxlID0gInN0eWxlIjsKPCAgICAgLy8gfSAvLyBu
YW1lc3BhY2UgU3RhdHVzCi0tLQo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdz
dGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCj4gICAgIHN0cnVjdCBTdGF0dXMg
ewo+ICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgICAgICBBY3RpdmUgPSA0NCwKPiAgICAg
ICAgICAgICBJbmFjdGl2ZSA9IDQ1LAo+ICAgICAgICAgICAgIERpc2FibGVkID0gNDYsCj4gICAg
ICAgICAgICAgU3R5bGUgPSA0NywKPiAgICAgICAgIH07Cj4gICAgIH07IC8vIHN0cnVjdCBTdGF0
dXMKMzY0OGEzNzI5LDM3MzMKPiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVl
KQo+ICAgICB7Cj4gICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1cyIsIGdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7Cj4gICAgIH0KPiAKMzY2OCwzNjczYzM3NTMsMzc2MAo8ICAgICAv
LyAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcg
Q1NTTWVkaWEuCjwgICAgIC8vIG5hbWVzcGFjZSBTb3VyY2Ugewo8ICAgICAvLyBjb25zdCBjaGFy
KiBjb25zdCBtZWRpYVJ1bGUgPSAibWVkaWFSdWxlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29u
c3QgaW1wb3J0UnVsZSA9ICJpbXBvcnRSdWxlIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qg
c3R5bGVzaGVldCA9ICJzdHlsZXNoZWV0IjsKPCAgICAgLy8gfSAvLyBuYW1lc3BhY2UgU291cmNl
Ci0tLQo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdl
bmVyYXRpbmcgQ1NTTWVkaWEuCj4gICAgIHN0cnVjdCBTb3VyY2Ugewo+ICAgICAgICAgZW51bSBF
bnVtIHsKPiAgICAgICAgICAgICBNZWRpYVJ1bGUgPSA0OCwKPiAgICAgICAgICAgICBJbXBvcnRS
dWxlID0gNDksCj4gICAgICAgICAgICAgU3R5bGVzaGVldCA9IDUwLAo+ICAgICAgICAgfTsKPiAg
ICAgfTsgLy8gc3RydWN0IFNvdXJjZQozNzI3YTM4MTUsMzgxOQo+ICAgICB2b2lkIHNldFNvdXJj
ZShTb3VyY2U6OkVudW0gdmFsdWUpCj4gICAgIHsKPiAgICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgfQo+IAo0MTQ3LDQx
NTRjNDIzOSw0MjQ4CjwgICAgIC8vIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUn
IHdoaWxlIGdlbmVyYXRpbmcgU2NvcGUuCjwgICAgIC8vIG5hbWVzcGFjZSBUeXBlIHsKPCAgICAg
Ly8gY29uc3QgY2hhciogY29uc3QgZ2xvYmFsID0gImdsb2JhbCI7CjwgICAgIC8vIGNvbnN0IGNo
YXIqIGNvbnN0IGxvY2FsID0gImxvY2FsIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3Qgd2l0
aCA9ICJ3aXRoIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgY2xvc3VyZSA9ICJjbG9zdXJl
IjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgY2F0Y2ggPSAiY2F0Y2giOwo8ICAgICAvLyB9
IC8vIG5hbWVzcGFjZSBUeXBlCi0tLQo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNjb3BlLgo+ICAgICBzdHJ1Y3QgVHlwZSB7Cj4gICAg
ICAgICBlbnVtIEVudW0gewo+ICAgICAgICAgICAgIEdsb2JhbCA9IDUxLAo+ICAgICAgICAgICAg
IExvY2FsID0gNTIsCj4gICAgICAgICAgICAgV2l0aCA9IDUzLAo+ICAgICAgICAgICAgIENsb3N1
cmUgPSA1NCwKPiAgICAgICAgICAgICBDYXRjaCA9IDU1LAo+ICAgICAgICAgfTsKPiAgICAgfTsg
Ly8gc3RydWN0IFR5cGUKNDE4MGE0Mjc1LDQyODEKPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
WVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2Fs
cmVhZHlfc2V0KTsKPiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKPiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRZUEVfU0VUPigpOwo+ICAgICAgICAgfQo+IAo0MjI1LDQyMjljNDMyNiw0MzMyCjwgbmFtZXNw
YWNlIERPTUJyZWFrcG9pbnRUeXBlIHsKPCBjb25zdCBjaGFyKiBjb25zdCBzdWJ0cmVlX21vZGlm
aWVkID0gInN1YnRyZWUtbW9kaWZpZWQiOwo8IGNvbnN0IGNoYXIqIGNvbnN0IGF0dHJpYnV0ZV9t
b2RpZmllZCA9ICJhdHRyaWJ1dGUtbW9kaWZpZWQiOwo8IGNvbnN0IGNoYXIqIGNvbnN0IG5vZGVf
cmVtb3ZlZCA9ICJub2RlLXJlbW92ZWQiOwo8IH0gLy8gbmFtZXNwYWNlIERPTUJyZWFrcG9pbnRU
eXBlCi0tLQo+IHN0cnVjdCBET01CcmVha3BvaW50VHlwZSB7Cj4gICAgIGVudW0gRW51bSB7Cj4g
ICAgICAgICBTdWJ0cmVlX21vZGlmaWVkID0gNTYsCj4gICAgICAgICBBdHRyaWJ1dGVfbW9kaWZp
ZWQgPSA1NywKPiAgICAgICAgIE5vZGVfcmVtb3ZlZCA9IDU4LAo+ICAgICB9Owo+IH07IC8vIHN0
cnVjdCBET01CcmVha3BvaW50VHlwZQo0MzIwYzQ0MjMKPCAgICAgICAgIHZvaWQgcmVzcG9uc2VS
ZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIGxvYWRlcklkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIHR5
cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKLS0tCj4gICAgICAgICB2b2lkIHJlc3Bv
bnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRl
cjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZSk7CjQ0NDQsNDQ1MWM0NTQ3LDQ1NTYKPCAgICAgLy8gLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ3JlYXNvbicgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBw
YXVzZWQuCjwgICAgIC8vIG5hbWVzcGFjZSBSZWFzb24gewo8ICAgICAvLyBjb25zdCBjaGFyKiBj
b25zdCB4aHIgPSAiWEhSIjsKPCAgICAgLy8gY29uc3QgY2hhciogY29uc3QgZG9tID0gIkRPTSI7
CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAiRXZlbnRMaXN0ZW5l
ciI7CjwgICAgIC8vIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbiA9ICJleGNlcHRpb24iOwo8
ICAgICAvLyBjb25zdCBjaGFyKiBjb25zdCBvdGhlciA9ICJvdGhlciI7CjwgICAgIC8vIH0gLy8g
bmFtZXNwYWNlIFJlYXNvbgotLS0KPiAgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBu
YW1lICdyZWFzb24nIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgo+ICAgICAgICAgc3Ry
dWN0IFJlYXNvbiB7Cj4gICAgICAgICAgICAgZW51bSBFbnVtIHsKPiAgICAgICAgICAgICAgICAg
WEhSID0gNSwKPiAgICAgICAgICAgICAgICAgRE9NID0gNTksCj4gICAgICAgICAgICAgICAgIEV2
ZW50TGlzdGVuZXIgPSA2MCwKPiAgICAgICAgICAgICAgICAgRXhjZXB0aW9uID0gNjEsCj4gICAg
ICAgICAgICAgICAgIE90aGVyID0gMjUsCj4gICAgICAgICAgICAgfTsKPiAgICAgICAgIH07IC8v
IHN0cnVjdCBSZWFzb24KNDQ1M2M0NTU4CjwgICAgICAgICB2b2lkIHBhdXNlZChQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwotLS0KPiAgICAgICAgIHZvaWQgcGF1c2VkKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29u
c3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKMjA5
YzIwOQo8IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Ok5ldHdvcms6OnJlc3BvbnNlUmVjZWl2ZWQo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZSkKLS0tCj4gdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6TmV0
d29yazo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBkb3VibGUgdGltZXN0YW1wLCAv
KlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0qLyBjb25zdCBTdHJpbmcmIHR5
cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKQo2MDNjNjAzCjwgdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6RGVidWdnZXI6OnBhdXNlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxs
RnJhbWVzLCBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEpCi0tLQo+IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OkRlYnVnZ2VyOjpwYXVzZWQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgLypSZWFzb246OkVudW0qLyBjb25z
dCBTdHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCjc0OGE3
NDksODIxCj4gbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKPiAKPiBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewo+ICAgICAiRG9jdW1lbnQiLAo+ICAgICAiU3R5bGVz
aGVldCIsCj4gICAgICJJbWFnZSIsCj4gICAgICJGb250IiwKPiAgICAgIlNjcmlwdCIsCj4gICAg
ICJYSFIiLAo+ICAgICAiV2ViU29ja2V0IiwKPiAgICAgIk90aGVyIiwKPiAgICAgIm9iamVjdCIs
Cj4gICAgICJmdW5jdGlvbiIsCj4gICAgICJ1bmRlZmluZWQiLAo+ICAgICAic3RyaW5nIiwKPiAg
ICAgIm51bWJlciIsCj4gICAgICJib29sZWFuIiwKPiAgICAgImFycmF5IiwKPiAgICAgIm51bGwi
LAo+ICAgICAibm9kZSIsCj4gICAgICJyZWdleHAiLAo+ICAgICAiZGF0ZSIsCj4gICAgICJodG1s
IiwKPiAgICAgIndtbCIsCj4gICAgICJ4bWwiLAo+ICAgICAiamF2YXNjcmlwdCIsCj4gICAgICJu
ZXR3b3JrIiwKPiAgICAgImNvbnNvbGUtYXBpIiwKPiAgICAgIm90aGVyIiwKPiAgICAgInRpcCIs
Cj4gICAgICJsb2ciLAo+ICAgICAid2FybmluZyIsCj4gICAgICJlcnJvciIsCj4gICAgICJkZWJ1
ZyIsCj4gICAgICJkaXIiLAo+ICAgICAiZGlyeG1sIiwKPiAgICAgInRyYWNlIiwKPiAgICAgInN0
YXJ0R3JvdXAiLAo+ICAgICAic3RhcnRHcm91cENvbGxhcHNlZCIsCj4gICAgICJlbmRHcm91cCIs
Cj4gICAgICJhc3NlcnQiLAo+ICAgICAicGFyc2VyIiwKPiAgICAgInNjcmlwdCIsCj4gICAgICJ1
c2VyIiwKPiAgICAgInVzZXItYWdlbnQiLAo+ICAgICAiaW5zcGVjdG9yIiwKPiAgICAgIiIsCj4g
ICAgICJhY3RpdmUiLAo+ICAgICAiaW5hY3RpdmUiLAo+ICAgICAiZGlzYWJsZWQiLAo+ICAgICAi
c3R5bGUiLAo+ICAgICAibWVkaWFSdWxlIiwKPiAgICAgImltcG9ydFJ1bGUiLAo+ICAgICAic3R5
bGVzaGVldCIsCj4gICAgICJnbG9iYWwiLAo+ICAgICAibG9jYWwiLAo+ICAgICAid2l0aCIsCj4g
ICAgICJjbG9zdXJlIiwKPiAgICAgImNhdGNoIiwKPiAgICAgInN1YnRyZWUtbW9kaWZpZWQiLAo+
ICAgICAiYXR0cmlidXRlLW1vZGlmaWVkIiwKPiAgICAgIm5vZGUtcmVtb3ZlZCIsCj4gICAgICJE
T00iLAo+ICAgICAiRXZlbnRMaXN0ZW5lciIsCj4gICAgICJleGNlcHRpb24iCj4gfTsKPiAKPiBT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKPiAgICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOwo+IH0KPiAKPiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgo+IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120676</attachid>
            <date>2011-12-28 08:35:04 -0800</date>
            <delta_ts>2011-12-28 08:35:49 -0800</delta_ts>
            <desc>Same patch to test it on Mac bot</desc>
            <filename>bug-74954-20111228201850.patch</filename>
            <type>text/plain</type>
            <size>17696</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWMxYWI0NDMxMTQ2YzA4
MDRiZDlmOTI2ZDYwMDE5ZmU0ZjkyZmQyZC4uYTZkYzE0OTM3YWNmYWI1YzA0YjlhNmQzM2VmNjM1
MTY0Y2MwZDVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTIyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBlbnVtIHR5cGVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRlcm5hbCBtYXAgb2Yg
c3RyaW5nIGNvbnRhbnRzIGlzIGNyZWF0ZWQuIEMgZW51bXMgYXJlIGNyZWF0ZWQgZm9yCisgICAg
ICAgIGVhY2ggSlNPTiBlbnVtLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHk6CisgICAgICAgIChFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudCk6CisgICAg
ICAgIChFbnVtQ29uc3RhbnRzKToKKyAgICAgICAgKEVudW1Db25zdGFudHMuZ2V0X2VudW1fY29u
c3RhbnRfY29kZSk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRp
b25fLkVudW1CaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcik6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLkVudW1CaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLkVudW1CaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5TdHJpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAoZ2V0X2luX2NfdHlwZV90
ZXh0KToKKyAgICAgICAgKGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKFBsYWluT2JqZWN0QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UGxhaW5PYmplY3RCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToK
KyAgICAgICAgKFJhd1R5cGVzQmluZGluZy5nZXRfaW5fY190eXBlX3RleHQpOgorICAgICAgICAo
UmF3VHlwZXNCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAg
ICAgICAgKGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRl
TW9kZXMuZ2V0X21vZGVzKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9kZXMuU3RyaWN0UGFy
YW1ldGVyTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJh
dGVNb2Rlcy5TdHJpY3RQYXJhbWV0ZXJNb2RlKToKKyAgICAgICAgKE1ldGhvZEdlbmVyYXRlTW9k
ZXMuU3RyaWN0UGFyYW1ldGVyTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24pOgorICAg
ICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9jX3BhcmFtX3R5
cGVfdGV4dCk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLlJhd1BhcmFtZXRlck1vZGUp
OgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVNb2Rlcy5SYXdQYXJhbWV0ZXJNb2RlLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbik6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJp
bmVkTW9kZS5nZXRfY19wYXJhbV90eXBlX3RleHQpOgorICAgICAgICAoTWV0aG9kR2VuZXJhdGVN
b2Rlcyk6CisgICAgICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZSk6CisgICAg
ICAgIChNZXRob2RHZW5lcmF0ZU1vZGVzLkNvbWJpbmVkTW9kZS5nZXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24pOgorCiAyMDExLTEyLTIyICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQVg6IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIEFYRGVzY3JpcHRpb24gKHNob3VsZCBiZSBhIHBhcnQgb2YgQVhIZWxwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCBi
MTAyODcwNjgwMmRkNDAzNzc2MWQ3YjZlMTFhZTlhMTU0ZDMxNTFhLi44NTBkOWMzM2I1YTMxMWYw
M2RhYzk0ZjZmYTJhYjQzYzdhODk2OWIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpAQCAtNTEsNiArNTEsNyBAQCBET01BSU5f
REVGSU5FX05BTUVfTUFQID0gewogIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSBy
ZXBsYWNlbWVudHMuCiBUWVBFX05BTUVfRklYX01BUCA9IHsKICAgICAiUkdCQSI6ICJSZ2JhIiwg
ICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUg
aW4gV2luZG93cyBDRS4KKyAgICAiIjogIkVtcHR5IiwKIH0KIAogCkBAIC01MTksNiArNTIwLDI4
IEBAIGNsYXNzIFdyaXRlcjoKICAgICAgICAgcmV0dXJuIFdyaXRlcihuZXdfb3V0cHV0LCBzZWxm
LmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQogCiAKK2NsYXNzIEVudW1Db25zdGFudHM6Cisg
ICAgbWFwXyA9IHt9CisgICAgY29uc3RhbnRzXyA9IFtdCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgorICAgICAgICBpZiB2YWx1ZSBpbiBjbHMu
bWFwXzoKKyAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1ZV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKKyAgICAgICAgICAgIGNscy5tYXBfW3Zh
bHVlXSA9IHBvcworICAgICAgICAgICAgY2xzLmNvbnN0YW50c18uYXBwZW5kKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHBvcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9lbnVt
X2NvbnN0YW50X2NvZGUoY2xzKToKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZm9yIGl0
ZW0gaW4gY2xzLmNvbnN0YW50c186CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIgICAgXCIi
ICsgaXRlbSArICJcIiIpCisgICAgICAgIHJldHVybiBqb2luKG91dHB1dCwgIixcbiIpICsgIlxu
IgorCisKIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNy
ZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5f
bmFtZSwgdHlwZV9kYXRhKToKQEAgLTUyNiw2ICs1NDksNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6
CiAKICAgICAgICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UK
KyAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXggPSAiVHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0
X2RvbWFpbl9uYW1lICsgIjo6IgogCiAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAg
ICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6CkBAIC01NDYsNiArNTcwLDcgQEAgY2xhc3MgVHlw
ZUJpbmRpbmdzOgogICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKICAgICAg
ICAgY2xhc3MgSGVscGVyOgogICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQorICAgICAgICAg
ICAgZnVsbF9uYW1lX3ByZWZpeCA9ICIiCiAKICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAg
ICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKQEAgLTU3MSwyMyArNTk2LDI4IEBAIGNs
YXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5l
cmF0b3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBm
b3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29t
bWVudF9vdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3
cml0ZXIuZ2V0X2luZGVudGVkKCIvLyAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1l
c3BhY2UgIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
InN0cnVjdCAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGVudW1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgZW51bSBFbnVtIHtcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBlbnVtX2l0ZW0gaW4gZW51bToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQorCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGVudW1faXRlbS5y
ZXBsYWNlKCctJywgJ18nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoImNvbnN0IGNoYXIqIGNvbnN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2Vf
dG9fbG93ZXIoaXRlbV9jX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiID0gXCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcIjtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9IC8vIG5hbWVzcGFjZSAiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05BTUVf
RklYX01BUFtpdGVtX2NfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgICAgICIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVjdCAi
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFt
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIp
CiAKQEAgLTU5OSw3ICs2MjksMTEgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVO
VCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBo
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6
RW51bSIKKworICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykiCiAKICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYg
cmVkdWNlX3RvX3Jhd190eXBlKCk6CkBAIC02MzMsNiArNjY3LDEwIEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwogCisgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAogICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgI0ZJWE1FOiByZXR1cm4gYSB0eXBlZGVmIG5hbWUgaW5zdGVhZC4K
QEAgLTcxNSwyOCArNzUzLDI5IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJh
bV90eXBlKHByb3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBhcmFt
X3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChw
YXJhbV9yYXdfdHlwZS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5UWVBFX0JVSUxERVJfT1VU
UFVULCBGYWxzZSkuZ2V0X3RleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGlu
ZSgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbV90eXBl
X29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhwYXJhbV90eXBlX2JpbmRpbmcp
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
X211bHRpbGluZSgiIiIKICAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMoJXMgdmFs
dWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlcyks
IHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXQlcygi
JXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0JXMoIiVzIiwgJXMpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKICAgICAgICAgfQogIiIiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9u
YW1lKCksIHByb3BfbmFtZSwgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9jX3BhcmFtX3R5cGVfdGV4dChw
YXJhbV90eXBlX2JpbmRpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFt
ZSgpLCBwcm9wX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVf
YmluZGluZywgInZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9j
b2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHBhcmFtX3R5cGVfYmlu
ZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5l
KCIiIgogICAgICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQogICAgICAgICB7CkBAIC03NzMs
MTMgKzgxMiwxNSBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShw
cm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRh
bGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9p
ZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFubm90YXRlZF90eXBlID0gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocGFyYW1fdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVf
QlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfaW5fY190eXBlX3RleHQo
RmFsc2UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiKCVzIHZhbHVlKVxuIiAlIGFubm90YXRlZF90eXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMo
XCIlc1wiLCB2YWx1ZSk7XG4iICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcmFtX3R5cGVfb3B0IGluIE1ldGhvZEdl
bmVyYXRlTW9kZXMuZ2V0X21vZGVzKHBhcmFtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAg
IHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfb3B0Lmdl
dF9jX3BhcmFtX3R5cGVfdGV4dChwYXJhbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAg
ICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wWyJuYW1lIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gcGFy
YW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKQEAgLTgyNSw3ICs4NjYsMTEgQEAg
Y2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAog
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwp
OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIgKyBmaXhlZF90eXBlX25hbWUuY2xhc3Nf
bmFtZSArICI+IgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCIg
KyBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeCArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsg
Ij4iCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CkBA
IC04NDQsNiArODg5LDEwIEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQ
YXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAKICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT2JqZWN0CiAKQEAgLTg5NSw2ICs5NDQsMTAgQEAgY2xhc3MgVHlwZUJp
bmRpbmdzOgogICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRfdGV4dCgpCiAK
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3Zh
bHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKICAgICAgICAgICAgICAgICByZXR1cm4gcmF3X3R5cGUKIApAQCAtMTA5OSw2ICsx
MTUyLDkgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIG5hbWVzcGFjZSBUeXBlQnVp
bGRlciB7CiAke2ZvcndhcmRzfQorCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCiAke3R5cGVCdWlsZGVyc30KIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKQEAg
LTE1NDEsNiArMTU5NywxNyBAQCAkY29uc3RydWN0b3JJbml0ewogCiAkbWV0aG9kcwogCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCitjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0geworJGVudW1Db25zdGFudFZhbHVlc307CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTE1NjgsNiArMTYzNSw1OSBA
QCBkZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToK
ICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcmF3X3R5cGUKIAorCisjIENob29zZXMgbWV0aG9k
IGdlbmVyYXRlIG1vZGVzIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4gQSBwYXJ0aWN1bGFyIHNldHRl
cgorIyBjYW4gYmUgZ2VuZXJhdGVkIGFzIG9uZSBtZXRob2Qgd2l0aCBhIHNpbXBsZSBwYXJhbWV0
ZXIgdHlwZSwKKyMgYXMgb25lIG1ldGhvZCB3aXRoIGEgcmF3IHR5cGUgbmFtZSBhbmQgY29tbWVu
dGVkIGFubm90YXRpb24gYWJvdXQgZXhwZWN0ZWQKKyMgc3BlY2lhbGl6ZWQgdHlwZSBuYW1lIG9y
IGFzIG92ZXJsb2FkZWQgbWV0aG9kIHdoZW4gcmF3IGFuZCBzcGVjaWFsaXplZAorIyBwYXJhbWV0
ZXIgdHlwZXMgcmVxdWlyZSBkaWZmZXJlbnQgYmVoYXZpb3IuCitjbGFzcyBNZXRob2RHZW5lcmF0
ZU1vZGVzOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfbW9kZXMoY2xzLCB0eXBlX2Jp
bmRpbmcpOgorICAgICAgICBpZiB0eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICMgSW4gcmF3IGFuZCBzdHJpY3QgbW9kZXMgbWV0
aG9kIGNvZGUgaXMgYWN0dWFsbHkgZGlmZmVyZW50LgorICAgICAgICAgICAgcmV0dXJuIFtjbHMu
U3RyaWN0UGFyYW1ldGVyTW9kZSwgY2xzLlJhd1BhcmFtZXRlck1vZGVdCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAjIEluIHJhdyBhbmQgc3RyaWN0IG1vZGVzIG1ldGhvZCBjb2RlIGlzIHRo
ZSBzYW1lLgorICAgICAgICAgICAgIyBPbmx5IHB1dCBzdHJpY3QgcGFyYW1ldGVyIHR5cGUgaW4g
Y29tbWVudHMuCisgICAgICAgICAgICByZXR1cm4gW2Nscy5Db21iaW5lZE1vZGVdCisKKyAgICBj
bGFzcyBTdHJpY3RQYXJhbWV0ZXJNb2RlOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfY19wYXJhbV90eXBlX3RleHQodHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlX2JpbmRpbmcuZ2V0X2luX2NfdHlwZV90ZXh0KEZhbHNlKQorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJh
bV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1f
dHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAg
ICAgICAgIGlmIHBhdHRlcm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1
ZV9yZWYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3Jl
ZgorCisgICAgY2xhc3MgUmF3UGFyYW1ldGVyTW9kZToKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6CisgICAgICAg
ICAgICByZXR1cm4gdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFt
X3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERFUl9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZV9yZWYKKworICAgIGNsYXNzIENvbWJpbmVkTW9kZToKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZV90ZXh0KHR5cGVfYmluZGluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0X2Fubm90YXRlZF90eXBlX3RleHQodHlwZV9iaW5kaW5nLnJl
ZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLlRZUEVfQlVJTERF
Ul9PVVRQVVQsIEZhbHNlKS5nZXRfdGV4dCgpLAorICAgICAgICAgICAgICAgIHR5cGVfYmluZGlu
Zy5nZXRfaW5fY190eXBlX3RleHQoRmFsc2UpKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcs
IHZhbHVlX3JlZik6CisgICAgICAgICAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkKKyAgICAgICAgICAgIGlmIHBhdHRl
cm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSB2YWx1ZV9yZWYKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgorCiBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBbXQogICAgIGZyb250ZW5k
X2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCkBAIC0xNjkwLDcgKzE4MTAsNyBAQCBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCiAgICAgICAg
IGFkX2hvY190eXBlX291dHB1dCA9IFtdCiAgICAgICAgIGZyb250ZW5kX21ldGhvZF9kZWNsYXJh
dGlvbl9saW5lcy5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAgICAgICBhZF9ob2NfdHlw
ZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAgICIpCisgICAgICAgIGFk
X2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAgICAgICIp
CiAgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgogICAgICAgICAgICAgbWV0
aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKICAgICAgICAgICAgIGZvciBq
c29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CkBAIC0xOTUyLDcgKzIw
NzIsOCBAQCBiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1
dGUoTm9uZSwKIAogZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2Nw
cC5zdWJzdGl0dXRlKE5vbmUsCiAgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZy
b250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAotICAgIG1ldGhvZHM9am9pbihHZW5l
cmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKyAgICBtZXRob2RzPWpvaW4oR2Vu
ZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCAiXG4iKSwKKyAgICBlbnVtQ29uc3RhbnRWYWx1
ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCkpKQogCiBiYWNrZW5kX2Nw
cF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCiAgICAg
bWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1l
X2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>