<?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>45004</bug_id>
          
          <creation_ts>2010-08-31 16:27:11 -0700</creation_ts>
          <short_desc>Roll ANGLE under webkit to r402</short_desc>
          <delta_ts>2010-09-02 10:54:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44309</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>psawaya</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272478</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-31 16:27:11 -0700</bug_when>
    <thetext>If we don&apos;t sync, Chromium and Safari will have to use different ANGLE interfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272485</commentid>
    <comment_count>1</comment_count>
      <attachid>66138</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-31 16:31:11 -0700</bug_when>
    <thetext>Created attachment 66138
patch

Built webkit successfully with r402.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272489</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 16:33:39 -0700</bug_when>
    <thetext>Attachment 66138 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ce/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:115:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:118:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:130:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:130:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:132:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:135:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:147:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:147:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:149:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:163:  Declaration has space between type name and * in IDirect3DSurface9 *backBuffer  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:163:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:166:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:167:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:168:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:169:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:170:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:301:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:303:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:307:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:309:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:323:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:327:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:341:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:344:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:358:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:372:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 715 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272498</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-31 16:46:48 -0700</bug_when>
    <thetext>Attachment 66138 did not build on mac:
Build output: http://queues.webkit.org/results/3855201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272508</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-31 16:56:41 -0700</bug_when>
    <thetext>That&apos;s weird, my local Mac built fine with this patch.  Might be some cached data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272510</commentid>
    <comment_count>5</comment_count>
      <attachid>66138</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 16:58:20 -0700</bug_when>
    <thetext>Comment on attachment 66138
patch

Unfortunately it looks like you&apos;re going to need to modify WebCore.xcodeproj using XCode to fix the missing header reference. Please build WebKit on the Mac before submitting the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272517</commentid>
    <comment_count>6</comment_count>
    <who name="Paul Sawaya">psawaya</who>
    <bug_when>2010-08-31 17:08:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 66138 [details])
&gt; Unfortunately it looks like you&apos;re going to need to modify WebCore.xcodeproj using XCode to fix the missing header reference. Please build WebKit on the Mac before submitting the next patch.

I&apos;m not sure, but I don&apos;t believe WebCore.xcodeproj references the ANGLE header (ResourceLimits.h) directly. You&apos;ll definitely want to update ANGLE/ANGLE.xcodeproj/project.pbxproj, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272885</commentid>
    <comment_count>7</comment_count>
      <attachid>66232</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-01 10:36:15 -0700</bug_when>
    <thetext>Created attachment 66232
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272889</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 10:38:59 -0700</bug_when>
    <thetext>Attachment 66232 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ce/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:115:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:118:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:130:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:130:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:132:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:135:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:147:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:147:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:149:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:163:  Declaration has space between type name and * in IDirect3DSurface9 *backBuffer  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:163:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:166:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:167:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:168:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:169:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:170:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:301:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:303:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:307:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:309:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:323:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:327:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:341:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:344:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:358:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:372:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 597 in 53 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272894</commentid>
    <comment_count>9</comment_count>
      <attachid>66235</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-01 10:47:07 -0700</bug_when>
    <thetext>Created attachment 66235
Revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272895</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 10:49:40 -0700</bug_when>
    <thetext>Attachment 66235 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ce/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:115:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:118:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:130:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:130:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:132:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:135:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:147:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:147:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:149:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:163:  Declaration has space between type name and * in IDirect3DSurface9 *backBuffer  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:163:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:166:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:167:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:168:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:169:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:170:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:301:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:303:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:307:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:309:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:323:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:327:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:341:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:344:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:358:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:372:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 715 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272897</commentid>
    <comment_count>11</comment_count>
      <attachid>66237</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-01 10:55:54 -0700</bug_when>
    <thetext>Created attachment 66237
revised patch: fix an issue in the changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272898</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 10:58:47 -0700</bug_when>
    <thetext>Attachment 66237 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ce/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:115:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:118:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:121:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:130:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:130:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:132:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:135:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:147:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:147:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:149:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:163:  Declaration has space between type name and * in IDirect3DSurface9 *backBuffer  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:163:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:166:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:167:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:168:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:169:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:170:  More than one command on the same line in if  [whitespace/parens] [4]
ANGLE/src/libEGL/Surface.cpp:209:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:301:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:303:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:307:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:309:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:323:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:327:  This { should be at the end of the previous line  [whitespace/braces] [4]
ANGLE/src/libEGL/Surface.cpp:341:  Declaration has space between type name and * in IDirect3DTexture9 *flipTexture  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:344:  Declaration has space between type name and * in IDirect3DSurface9 *renderTarget  [whitespace/declaration] [3]
ANGLE/src/libEGL/Surface.cpp:358:  Use 0 instead of NULL.  [readability/null] [5]
ANGLE/src/libEGL/Surface.cpp:372:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 715 in 57 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273438</commentid>
    <comment_count>13</comment_count>
      <attachid>66237</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 10:16:14 -0700</bug_when>
    <thetext>Comment on attachment 66237
revised patch: fix an issue in the changelog

I only went through the ChangeLog, project.pbxproj and GraphicsContext3DMac.mm; these look fine. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273449</commentid>
    <comment_count>14</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-02 10:54:41 -0700</bug_when>
    <thetext>Committed r66675: &lt;http://trac.webkit.org/changeset/66675&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66138</attachid>
            <date>2010-08-31 16:31:11 -0700</date>
            <delta_ts>2010-09-01 10:36:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>362933</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY2NTUyKQorKysgQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDYwIEBACisyMDEwLTA4LTMxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbCBBTkdMRSB1
bmRlciB3ZWJraXQgdG8gcjQwMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDUwMDQKKworICAgICAgICAqIGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6Cisg
ICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmg6IFJlbW92ZWQuCisgICAg
ICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvQmFzZVR5cGVzLmg6CisgICAgICAgIChnZXRQcmVjaXNpb25TdHJpbmcpOgorICAgICAgICAo
Z2V0QmFzaWNTdHJpbmcpOgorICAgICAgICAoSXNTYW1wbGVyKToKKyAgICAgICAgKGdldFF1YWxp
ZmllclN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAg
ICAgICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChJZGVudGlmeUJ1aWx0SW5zKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmNwcDoKKyAgICAgICAgKEluaXRQcm9jZXNzKToKKyAgICAgICAgKERl
dGFjaFByb2Nlc3MpOgorICAgICAgICAoSW5pdFRocmVhZCk6CisgICAgICAgIChEZXRhY2hUaHJl
YWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvSW50ZXJtZWRpYXRlLmNwcDoKKyAgICAgICAgKEdldEhpZ2hlclByZWNpc2lvbik6Cisg
ICAgICAgIChUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKToKKyAgICAgICAgKFRJbnRlcm1l
ZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFk
ZENvbW1hKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKToKKyAgICAgICAg
KFRJbnRlcm1CaW5hcnk6OnByb21vdGUpOgorICAgICAgICAoQ29tcGFyZVN0cnVjdCk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwOgorICAgICAgICAoVE91dHB1dEdMU0w6
OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL091dHB1dEhMU0wuY3BwOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRl
cik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpo
YW5kbGVFeGNlc3NpdmVMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjphZGRDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcik6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphZGRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRD
b25zdFN0cnVjdCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
R2V0R2xvYmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUG9vbEFsbG9j
Lmg6CisgICAgICAgIChUUG9vbEFsbG9jYXRvcjo6dEhlYWRlcjo6dEhlYWRlcik6CisgICAgICAg
IChwb29sX2FsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAocG9vbF9hbGxvY2F0b3I6OmRl
YWxsb2NhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAg
ICAgKFNoSW5pdGlhbGl6ZSk6CisgICAgICAgIChTaEZpbmFsaXplKToKKyAgICAgICAgKFNoSW5p
dEJ1aWx0SW5SZXNvdXJjZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNw
cDoKKyAgICAgICAgKFRUeXBlOjpnZXRTdHJ1Y3RTaXplKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKFRWYXJpYWJsZTo6c2V0UXVhbGlmaWVyKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvVHlwZXMuaDoKKyAgICAgICAgKFRUeXBlOjpUVHlwZSk6Cisg
ICAgICAgIChUVHlwZTo6Z2V0QmFzaWNUeXBlKToKKyAgICAgICAgKFRUeXBlOjpzZXRCYXNpY1R5
cGUpOgorICAgICAgICAoVFR5cGU6OmdldFByZWNpc2lvbik6CisgICAgICAgIChUVHlwZTo6c2V0
UHJlY2lzaW9uKToKKyAgICAgICAgKFRUeXBlOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVFR5
cGU6OnNldFF1YWxpZmllcik6CisgICAgICAgIChUVHlwZTo6Z2V0Tm9taW5hbFNpemUpOgorICAg
ICAgICAoVFR5cGU6OnNldE5vbWluYWxTaXplKToKKyAgICAgICAgKFRUeXBlOjppc01hdHJpeCk6
CisgICAgICAgIChUVHlwZTo6c2V0TWF0cml4KToKKyAgICAgICAgKFRUeXBlOjppc0FycmF5KToK
KyAgICAgICAgKFRUeXBlOjpnZXRBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OnNldEFycmF5
U2l6ZSk6CisgICAgICAgIChUVHlwZTo6Z2V0TWF4QXJyYXlTaXplKToKKyAgICAgICAgKFRUeXBl
OjpzZXRNYXhBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OmNsZWFyQXJyYXluZXNzKToKKyAg
ICAgICAgKFRUeXBlOjpzZXRBcnJheUluZm9ybWF0aW9uVHlwZSk6CisgICAgICAgIChUVHlwZTo6
Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUpOgorICAgICAgICAoVFR5cGU6OmlzVmVjdG9yKToKKyAg
ICAgICAgKFRUeXBlOjppc1NjYWxhcik6CisgICAgICAgIChUVHlwZTo6c2V0U3RydWN0KToKKyAg
ICAgICAgKFRUeXBlOjpnZXRUeXBlTmFtZSk6CisgICAgICAgIChUVHlwZTo6c2V0VHlwZU5hbWUp
OgorICAgICAgICAoVFR5cGU6OmlzRmllbGQpOgorICAgICAgICAoVFR5cGU6OmdldEZpZWxkTmFt
ZSk6CisgICAgICAgIChUVHlwZTo6c2V0RmllbGROYW1lKToKKyAgICAgICAgKFRUeXBlOjpnZXRC
YXNpY1N0cmluZyk6CisgICAgICAgIChUVHlwZTo6Z2V0UHJlY2lzaW9uU3RyaW5nKToKKyAgICAg
ICAgKFRUeXBlOjpnZXRRdWFsaWZpZXJTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChUSW50ZXJtTm9kZTo6Z2V0TGlu
ZSk6CisgICAgICAgIChUSW50ZXJtTm9kZTo6c2V0TGluZSk6CisgICAgICAgIChUSW50ZXJtVHlw
ZWQ6OmdldEFzVHlwZWQpOgorICAgICAgICAoVEludGVybVR5cGVkOjpzZXRUeXBlKToKKyAgICAg
ICAgKFRJbnRlcm1UeXBlZDo6Z2V0VHlwZSk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldFR5
cGVQb2ludGVyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNUeXBlKToKKyAgICAg
ICAgKFRJbnRlcm1UeXBlZDo6Z2V0UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6
Z2V0UHJlY2lzaW9uKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0Tm9taW5hbFNpemUpOgor
ICAgICAgICAoVEludGVybVR5cGVkOjppc01hdHJpeCk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6
OmlzQXJyYXkpOgorICAgICAgICAoVEludGVybVR5cGVkOjppc1ZlY3Rvcik6CisgICAgICAgIChU
SW50ZXJtVHlwZWQ6OmlzU2NhbGFyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNT
dHJpbmcpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRRdWFsaWZpZXJTdHJpbmcpOgorICAg
ICAgICAoVEludGVybVN5bWJvbDo6Z2V0SWQpOgorICAgICAgICAoVEludGVybVN5bWJvbDo6Z2V0
U3ltYm9sKToKKyAgICAgICAgKFRJbnRlcm1PcGVyYXRvcjo6c2V0T3ApOgorICAgICAgICAoVElu
dGVybUJpbmFyeTo6c2V0TGVmdCk6CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpzZXRSaWdodCk6
CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpnZXRMZWZ0KToKKyAgICAgICAgKFRJbnRlcm1CaW5h
cnk6OmdldFJpZ2h0KToKKyAgICAgICAgKFRJbnRlcm1VbmFyeTo6c2V0T3BlcmFuZCk6CisgICAg
ICAgIChUSW50ZXJtVW5hcnk6OmdldE9wZXJhbmQpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0
ZTo6Z2V0QXNBZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0U2VxdWVu
Y2UpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0TmFtZSk6CisgICAgICAgIChUSW50
ZXJtQWdncmVnYXRlOjpnZXROYW1lKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldFVz
ZXJEZWZpbmVkKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OmlzVXNlckRlZmluZWQpOgor
ICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRl
cm1BZ2dyZWdhdGU6OnNldE9wdGltaXplKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNl
dERlYnVnKToKKyAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246OmdldENvbmRpdGlvbik6CisgICAg
ICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRUcnVlQmxvY2spOgorICAgICAgICAoVEludGVybVNl
bGVjdGlvbjo6Z2V0RmFsc2VCbG9jayk6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRB
c1NlbGVjdGlvbk5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcDoK
KyAgICAgICAgKFRDb25zdFRyYXZlcnNlcjo6VENvbnN0VHJhdmVyc2VyKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEluaXRBdG9tVGFibGUp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmM6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmM6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaDoKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmM6CisgICAgICAg
IChOZXdTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmM6CisgICAg
ICAgIChSZWNvcmRUb2tlbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90
b2tlbnMuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXkuY3BwOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpEaXNwbGF5KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChlZ2w6OkRpc3Bs
YXk6OmNyZWF0ZURldmljZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1
cmZhY2UpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6Z2V0Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvbGliRUdM
L0Rpc3BsYXkuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVzZXRTd2Fw
Q2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAg
ICAoZWdsOjpTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUpOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjphcHBseUZsaXBTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVh
c2VSZWNvcmRlZFN0YXRlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JXaW5kb3dS
ZXNpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzd2FwKToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVHTC5jcHA6CisgICAgICAg
ICogc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQmxp
dC5jcHA6CisgICAgICAgIChnbDo6QmxpdDo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKGds
OjpCbGl0OjpzZXRQaXhlbFNoYWRlcik6CisgICAgICAgIChnbDo6QmxpdDo6c2V0Rm9ybWF0Q29u
dmVydFNoYWRlcnMpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmNwcDoKKyAgICAg
ICAgKGdsOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6On5Db250ZXh0KToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFy
a0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRl
QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldFByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJh
bWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6YmluZFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8pOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJh
eUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJl
Q3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldEZsb2F0dik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
SW50ZWdlcnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5SW5kZXhC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpmaW5pc2gpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmZsdXNoKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c1No
YWRlck1vZGVsMyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxl
cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpkZXRhY2hCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRl
dGFjaFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpp
bml0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoZ2w6OkF0
dHJpYnV0ZVN0YXRlOjpBdHRyaWJ1dGVTdGF0ZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6c2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1
ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIpOgorICAg
ICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKToKKyAgICAgICAgKGdsOjpGcmFt
ZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwpOgorICAgICAg
ICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKToKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVy
OjpnZXREZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxi
dWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSk6
CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKToKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChn
bDo6RnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpp
c011bHRpc2FtcGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToK
KyAgICAgICAgKGdsOjpEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkRlZmF1
bHRGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+UHJvZ3Jh
bSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmtWYXJ5aW5n
cyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjphZGRSZWYpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFJlZkNvdW50KToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtOjpnZXREeFZpZXdwb3J0TG9jYXRpb24pOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvUHJvZ3JhbS5oOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRP
YmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdDo6UmVmQ291bnRP
YmplY3QpOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0Ojp+UmVmQ291bnRPYmplY3QpOgor
ICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0OjphZGRSZWYpOgorICAgICAgICAoZ2w6OlJlZkNv
dW50T2JqZWN0OjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQ
b2ludGVyOjpzZXQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaDog
QWRkZWQuCisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3Q6OmlkKToKKyAgICAgICAgKGdsOjpS
ZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVy
KToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjp+UmVmQ291bnRP
YmplY3RCaW5kaW5nUG9pbnRlcik6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVy
OjppZCk6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6b3BlcmF0
b3IgISApOgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpzZXQpOgorICAgICAgICAoZ2w6
OkJpbmRpbmdQb2ludGVyOjpnZXQpOgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpvcGVy
YXRvciAtPiApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6Omlz
Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRX
aWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6
OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmlzQ29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmlzRGVwdGhidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRIZWlnaHQpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OnNldFNpemUpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
OjpnZXRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJp
YWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKToKKyAg
ICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9y
YnVmZmVyOjppc0NvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0UmVk
U2l6ZSk6CisgICAgICAgIChnbDo6Q29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSk6CisgICAgICAg
IChnbDo6Q29sb3JidWZmZXI6OmdldEJsdWVTaXplKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZl
cjo6Z2V0QWxwaGFTaXplKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRo
U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhT
dGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmlzRGVwdGhi
dWZmZXIpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVy
KToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU2l6ZSk6CisgICAg
ICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChn
bDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkRl
cHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6On5EZXB0
aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAg
ICAgICAoZ2w6OkRlcHRoYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlN0
ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6
On5TdGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjpnZXRTdG9yYWdlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6UmVzb3VyY2VN
YW5hZ2VyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIp
OgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpS
ZXNvdXJjZU1hbmFnZXI6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6
Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNoYWRl
cik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVQcm9ncmFtKToKKyAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJj
ZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpk
ZWxldGVTaGFkZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUHJvZ3Jh
bSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKToKKyAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFu
YWdlcjo6Z2V0U2hhZGVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1
cmUpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Z2V0UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1h
bmFnZXI6OmNoZWNrQnVmZmVyQWxsb2NhdGlvbik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5h
Z2VyOjpjaGVja1RleHR1cmVBbGxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9SZXNvdXJjZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwOgorICAgICAgICAoZ2w6OlNoYWRlcjo6U2hhZGVyKToKKyAgICAgICAgKGdsOjpTaGFk
ZXI6OmFkZFJlZik6CisgICAgICAgIChnbDo6U2hhZGVyOjpyZWxlYXNlKToKKyAgICAgICAgKGds
OjpTaGFkZXI6OmdldFJlZkNvdW50KToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnBhcnNlVmFyeWlu
Z3MpOgorICAgICAgICAoZ2w6OlZlcnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKToKKyAgICAgICAg
KGdsOjpGcmFnbWVudFNoYWRlcjo6RnJhZ21lbnRTaGFkZXIpOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvU2hhZGVyLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcDoKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpJbWFnZTo6SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6
OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldEJsaXR0ZXIpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OnNlbGVjdEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZElt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEFscGhhSW1hZ2VEYXRhKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlSW1hZ2VEYXRhKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmxvYWRSR0JVQnl0ZUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9h
ZFJHQjU2NUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkFVQnl0ZUlt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkE0NDQ0SW1hZ2VEYXRhKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OmxvYWRCR1JBSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpj
cmVhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OlRleHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpnZXRGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpj
b3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0Rm9ybWF0KToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0Nv
bXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4
dHVyZUNvbG9yYnVmZmVyUHJveHk6OmFkZFJlZik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4
dHVyZUNvbG9yYnVmZmVyUHJveHk6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRl
eHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEZvcm1hdCk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3Bw
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZjoKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYWlu
Lmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6
OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2gpOgorICAgICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2Vk
U2l6ZSk6CisgICAgICAgIChnbDo6SXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAgICAg
ICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGVzMmR4OjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZSk6CisgICAgICAgIChlczJkeDo6R2V0TXVsdGlz
YW1wbGVUeXBlRnJvbVNhbXBsZXMpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVz
Lmg6CisKIDIwMTAtMDgtMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDY2NTQ5
KQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIy
LDYgKzIyMiwxMiBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgMHg4MzY4
CiAjZW5kaWYKIAorLyogR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAqLworI2lmbmRl
ZiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4M0YwCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
MHg4M0YxCisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIHRv
a2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzUxLDYgKzM1NywyNSBAQCB0eXBlZGVmIHZv
aWQqIEdMZWdsSW1hZ2VPRVM7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBBTkdM
RSBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAorI2Rl
ZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgMHg4Q0E4CisjZGVmaW5lIEdM
X0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFIDB4OENBNiAvLyBhbGlhcyBHTF9GUkFNRUJVRkZFUl9C
SU5ESU5HCisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRSAweDhDQUEK
KyNlbmRpZgorCisvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRl
ZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfU0FNUExFU19BTkdMRSAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRSAgICAgMHg4RDU2CisjZGVmaW5l
IEdMX01BWF9TQU1QTEVTX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1Nwor
I2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogRW5kIG9mIGV4dGVuc2lvbiB0b2tlbnMs
IHN0YXJ0IG9mIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC02MjMsNiArNjQ4LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMTVVMVElEUkEKICNkZWZpbmUgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JF
ViAxCiAjZW5kaWYKIAorLyogR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAqLworI2lm
bmRlZiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0VYVF90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDEgMQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICog
SU1HIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc2Niw2ICs3
OTYsMzQgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTAogdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0ZmllbGQg
cHJlc2VydmVNYXNrKTsKICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFOR0xFIGV4
dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCAqLworI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVm
aW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFIChH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RY
MCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdM
ZW51bSBmaWx0ZXIpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEJM
SVRGUkFNRUJVRkZFUkFOR0xFUFJPQykgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQg
c3JjWDEsIEdMaW50IHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNl
bmRpZgorCisvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUg
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExF
QU5HTEVQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogQU5HTEUv
aW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUv
aW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEg
KzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfUkVTT1VSQ0VfTElNSVRTX0lO
Q0xVREVEXwotI2RlZmluZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXwotCi1zdHJ1Y3QgVEJ1
aWx0SW5SZXNvdXJjZQotewotCWludCBtYXhWZXJ0ZXhBdHRyaWJzOwotCWludCBtYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9yczsKLQlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7Ci0JaW50IG1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzOwotCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOwotCWlu
dCBtYXhUZXh0dXJlSW1hZ2VVbml0czsKLQlpbnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsK
LQlpbnQgbWF4RHJhd0J1ZmZlcnM7Ci19OwotI2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1JVFNfSU5D
TFVERURfCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDY2NTQ5
KQorKysgQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtNiw4ICs2LDYgQEAKICNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KICNk
ZWZpbmUgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIlJlc291cmNl
TGltaXRzLmgiCi0KIC8vCiAvLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRl
cmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2Ug
Y29tcGlsZXIuCkBAIC0xOSwxMCArMTcsMTIgQEAgZXh0ZXJuICJDIiB7CiAvLwogLy8gRHJpdmVy
IG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyCiAvLyBj
b21waWxlciBvcGVyYXRpb25zLgorLy8gSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmV0
dXJuIHZhbHVlIGlzIG5vbnplcm8sIGVsc2UgemVyby4KIC8vCiBpbnQgU2hJbml0aWFsaXplKCk7
CiAvLwogLy8gRHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgYXQgc2h1dGRvd24uCisvLyBJZiB0aGUg
ZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uemVybywgZWxzZSB6ZXJv
LgogLy8KIGludCBTaEZpbmFsaXplKCk7CiAvLwpAQCAtNDQsNiArNDQsMzIgQEAgdHlwZWRlZiBl
bnVtIHsKIH0gRVNoU3BlYzsKIAogLy8KKy8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWls
dC1pbiByZXNvdXJjZXMgKGNvbnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCisvLyBUaGUgbmFtZXMg
Zm9yIHRoZXNlIHJlc291cmNlcyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dM
Xy4KKy8vCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vIENvbnN0YW50cy4KKyAgICBpbnQgTWF4
VmVydGV4QXR0cmliczsKKyAgICBpbnQgTWF4VmVydGV4VW5pZm9ybVZlY3RvcnM7CisgICAgaW50
IE1heFZhcnlpbmdWZWN0b3JzOworICAgIGludCBNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0czsK
KyAgICBpbnQgTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0czsKKyAgICBpbnQgTWF4VGV4dHVy
ZUltYWdlVW5pdHM7CisgICAgaW50IE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnM7CisgICAgaW50
IE1heERyYXdCdWZmZXJzOworCisgICAgLy8gRXh0ZW5zaW9ucy4KKyAgICAvLyBTZXQgdG8gMSB0
byBlbmFibGUgdGhlIGV4dGVuc2lvbiwgZWxzZSAwLgorICAgIGludCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXM7Cit9IFRCdWlsdEluUmVzb3VyY2U7CisKKy8vCisvLyBJbml0aWFsaXplIGJ1aWx0
LWluIHJlc291cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgorLy8KK3ZvaWQgU2hJ
bml0QnVpbHRJblJlc291cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcyk7CisKKy8vCiAv
LyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIHRoZSBjb21waWxlci4KIC8vCiB0eXBlZGVmIGVudW0g
ewpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9z
cmMvY29tcGlsZXIvQmFzZVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAg
ZW51bSBUUHJlY2lzaW9uCiAgICAgRWJwSGlnaCwKIH07CiAKLV9faW5saW5lIGNvbnN0IGNoYXIq
IGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCitpbmxpbmUgY29uc3QgY2hhciogZ2V0
UHJlY2lzaW9uU3RyaW5nKFRQcmVjaXNpb24gcCkKIHsKICAgICBzd2l0Y2gocCkKICAgICB7CkBA
IC00Nyw3ICs0NywyMiBAQCBlbnVtIFRCYXNpY1R5cGUKICAgICBFYnRBZGRyZXNzLCAgICAgICAg
ICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KIH07CiAKLV9faW5saW5lIGJvb2wgSXNTYW1w
bGVyKFRCYXNpY1R5cGUgdHlwZSkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhU
QmFzaWNUeXBlIHQpCit7CisgICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVidFZvaWQ6
ICAgICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFYnRGbG9hdDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wi
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0
dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6
ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFN0
cnVjdDogICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgIH0K
K30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKIHsKICAgICByZXR1
cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJF
bmQ7CiB9CkBAIC0xMDAsNyArMTE1LDcgQEAgZW51bSBUUXVhbGlmaWVyCiAvLwogLy8gVGhpcyBp
cyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5p
dGlvbnMgYWJvdmUuCiAvLwotX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5n
KFRRdWFsaWZpZXIgcSkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFF1
YWxpZmllciBxKQogewogICAgIHN3aXRjaChxKQogICAgIHsKSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZS5jcHAJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTUgKzQ3MiwxNSBAQCBzdGF0aWMgVFN0
cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFRCCiB7CiAgICAgVFN0cmluZ1N0cmVhbSBzOwog
Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVy
dGV4VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8
IHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQg
Z2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycyA8PCAiOyI7CiAKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmFyeWluZ1Zl
Y3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8
PCAiY29uc3QgaW50IGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJj
ZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGlu
dCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01h
eFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMg
PDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
ID0gIiA8PCByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAg
cyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMubWF4RHJh
d0J1ZmZlcnMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5nVmVjdG9y
cyA9ICIgPDwgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAgICBzIDw8ICJj
b25zdCBpbnQgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5N
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGds
X01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4
dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAi
OyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAi
IDw8IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKKyAgICBzIDw8
ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsKIH0KQEAgLTU5MSwyMyArNTkxLDIz
IEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWEKICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwogCiAgICAgLy8g
TWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KLSAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsN
Ci0gICAgY2FzZSBFU2hMYW5nVmVydGV4Og0KLSAgICAgICAgYnJlYWs7DQotICAgIGNhc2UgRVNo
TGFuZ0ZyYWdtZW50Og0KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJk
RmR4IiwgICBFT3BEUGR4KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lv
bg0KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BE
UGR5KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAg
Ly9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOyAgLy8g
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAgYnJlYWs7DQotICAg
IGRlZmF1bHQ6IGJyZWFrOw0KLSAgICB9DQorICAgIHN3aXRjaChsYW5ndWFnZSkgeworICAgIGNh
c2UgRVNoTGFuZ1ZlcnRleDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFU2hMYW5nRnJhZ21l
bnQ6CisgICAgICAgIC8vc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9w
RFBkeCk7ICAgIC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAgICAg
Ly9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BEUGR5KTsgICAgLy8g
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICAvL3N5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7ICAvLyBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KIAogICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNpZmljIHZhcmlhYmxl
cy4KICAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKICAgICBjYXNlIEVTaExhbmdGcmFnbWVudDogewog
ICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCiAgICAg
ICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3Is
ICAgNCwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJl
c291cmNlcy5tYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNp
emUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJh
Z0RhdGEpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9Jbml0aWFsaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRp
YWxpemUuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBfSU5JVElBTElaRV9J
TkNMVURFRF8KICNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNM
QU5HL1Jlc291cmNlTGltaXRzLmgiCi0KICNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRh
YmxlLmgiCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCShyZXZpc2lvbiA2
NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNiw3MiArNiw4OCBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURs
bC5oIgogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21w
aWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQ
YXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIAogT1NfVExT
SW5kZXggVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CiAKIGJv
b2wgSW5pdFByb2Nlc3MoKQogewogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggIT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJLy8KLQkJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudC4K
LQkJLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudC4KKyAg
ICAgICAgLy8KICAgICAgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIH0KIAogICAgIFRocmVhZElu
aXRpYWxpemVJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKIAogICAgIGlmIChUaHJlYWRJbml0
aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKICAgICAgICAgYXNzZXJ0KDAg
JiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBhbGxvY2F0ZSBUTFMgYXJlYSBmb3IgaW5pdCBm
bGFnIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgfQogCiAKICAgICBpZiAoIUlu
aXRpYWxpemVQb29sSW5kZXgoKSkgewogICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3Mo
KTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0JfQorICAgIH0KIAogICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkp
IHsKICAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxp
emUgcGFyc2UgY29udGV4dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIH0KIAot
CUluaXRUaHJlYWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSW5pdFRocmVhZCgp
OwogfQogCitib29sIERldGFjaFByb2Nlc3MoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVY
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsK
KworICAgIGlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCisgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKworICAgIEZyZWVQb29sSW5kZXgoKTsKKworICAgIE9TX0ZyZWVUTFNJbmRleChUaHJl
YWRJbml0aWFsaXplSW5kZXgpOworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFM
SURfVExTX0lOREVYOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CiAKIGJvb2wgSW5pdFRocmVh
ZCgpCiB7Ci0JLy8KKyAgICAvLwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUtZW50cmFudAot
CS8vCisgICAgLy8KICAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURf
VExTX0lOREVYKSB7Ci0JCWFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFByb2Nlc3MgaGFzbid0
IGJlZW4gaW5pdGFsaXNlZC4iKTsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTog
UHJvY2VzcyBoYXNuJ3QgYmVlbiBpbml0YWxpc2VkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0JfQorICAgIH0KIAogICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5k
ZXgpICE9IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0JSW5pdGlhbGl6ZUdsb2JhbFBvb2xz
KCk7CisgICAgSW5pdGlhbGl6ZUdsb2JhbFBvb2xzKCk7CiAKLQlpZiAoIUluaXRpYWxpemVHbG9i
YWxQYXJzZUNvbnRleHQoKSkKKyAgICBpZiAoIUluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFPU19TZXRUTFNWYWx1ZShUaHJl
YWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMSkpIHsKLQkJYXNzZXJ0KDAgJiYgIkluaXRUaHJl
YWQoKTogVW5hYmxlIHRvIHNldCBpbml0IGZsYWcuIik7CisgICAgICAgIGFzc2VydCgwICYmICJJ
bml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0JfQorICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIGJvb2wgRGV0YWNo
VGhyZWFkKCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwpAQCAtNzksNDIgKzk1LDIxIEBA
IGJvb2wgRGV0YWNoVGhyZWFkKCkKICAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotCS8vCi0JLy8gRnVu
Y3Rpb24gaXMgcmUtZW50cmFudCBhbmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5p
dGFsaXNlZC4KLQkvLworICAgIC8vCisgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBhbmQg
dGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KKyAgICAvLwogICAgIGlm
IChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApIHsKICAgICAgICAg
aWYgKCFPU19TZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMCkpIHsK
LQkJCWFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxh
Zy4iKTsKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRv
IGNsZWFyIGluaXQgZmxhZy4iKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQkJfQor
ICAgICAgICB9CiAKLQkJRnJlZUdsb2JhbFBvb2xzKCk7Ci0KLQkJaWYgKCFGcmVlUGFyc2VDb250
ZXh0KCkpCisgICAgICAgIGlmICghRnJlZVBhcnNlQ29udGV4dCgpKQogICAgICAgICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOwotCX0KLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIERldGFj
aFByb2Nlc3MoKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICBpZiAoVGhyZWFk
SW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIFNoRmluYWxpemUoKTsKLQotICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQo
KTsKLQotCUZyZWVQb29sSW5kZXgoKTsKIAotCWlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkp
Ci0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJ
bml0aWFsaXplSW5kZXgpOwotICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURf
VExTX0lOREVYOworICAgICAgICBGcmVlR2xvYmFsUG9vbHMoKTsKKyAgICB9CiAKICAgICByZXR1
cm4gc3VjY2VzczsKIH0KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZp
c2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYsMTQgKzYsMTEgQEAKICNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gKICNk
ZWZpbmUgX19JTklUSUFMSVpFRExMX0gKIAotCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRl
LmgiCi0KLQogYm9vbCBJbml0UHJvY2VzcygpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7CisKIGJv
b2wgSW5pdFRocmVhZCgpOwogYm9vbCBEZXRhY2hUaHJlYWQoKTsKLWJvb2wgRGV0YWNoUHJvY2Vz
cygpOwogCiAjZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKIApJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiA2NjU0OSkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYsMTIgKzYsMTEgQEAKIAogI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9J
TkNMVURFRF8KICNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCi0j
aW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCiAKIGJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dEluZGV4KCk7Ci1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTsKLWJvb2wg
RnJlZVBhcnNlQ29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIAorYm9v
bCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRleHQo
KTsKIAogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYg
KzEwLDcgQEAKIAogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5j
bHVkZSA8YWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUu
aCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIgpAQCAtMTcsOSArMTgsMTAg
QEAKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENv
bnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJy
YXkpOwogCi1UUHJlY2lzaW9uIEdldEhpZ2hlc3RQcmVjaXNpb24oIFRQcmVjaXNpb24gbGVmdCwg
VFByZWNpc2lvbiByaWdodCApeworc3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9u
KCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKICAgICByZXR1cm4gbGVmdCA+
IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwogfQorCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8g
Rmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uLgpAQCAtMTExLDEyICsxMTMsNiBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1w
Q29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CiAKLSAgICBpZiAobGVmdFRlbXBDb25zdGFudCkKLSAgICAgICAgbGVmdFRlbXBDb25zdGFudCA9
IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgaWYgKHJpZ2h0VGVtcENvbnN0YW50
KQotICAgICAgICByaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKLQogICAgIC8vCiAgICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0YW50cy4KICAgICAv
LwpAQCAtMzA3LDcgKzMwMyw3IEBAIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNl
dEFnZ3IKICAgICAvLwogICAgIC8vIFNldCB0aGUgb3BlcmF0b3IuCiAgICAgLy8KLSAgICBhZ2dO
b2RlLT5zZXRPcGVyYXRvcihvcCk7CisgICAgYWdnTm9kZS0+c2V0T3Aob3ApOwogICAgIGlmIChs
aW5lICE9IDApCiAgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKQEAgLTUxOSw5ICs1
MTUsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJCiAgICAgICAg
IHJldHVybiByaWdodDsKICAgICB9IGVsc2UgewogICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1h
QWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7Ci0gICAgICAgIGNv
bW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcGVyYXRvcihFT3BDb21tYSk7Cisg
ICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BDb21tYSk7
CiAgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOwotICAg
ICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2
cVRlbXBvcmFyeSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5z
ZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgcmV0dXJuIGNvbW1hQWdncmVnYXRl
OwogICAgIH0KIH0KQEAgLTY0NCw3ICs2NDAsNyBAQCBib29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQ
cm9jZXNzKFRJbnRlcm1OCiAgICAgLy8KICAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0g
cm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKICAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRP
cCgpID09IEVPcE51bGwpCi0gICAgICAgIGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNl
KTsKKyAgICAgICAgYWdnUm9vdC0+c2V0T3AoRU9wU2VxdWVuY2UpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC03NjQsMTYgKzc2MCw5IEBAIGJvb2wgVEludGVybVVuYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYpCiAvLwogYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5m
b1NpbmspCiB7Ci0gICAgaW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOwotICAgIGlm
IChyaWdodC0+Z2V0Tm9taW5hbFNpemUoKSA+IHNpemUpCi0gICAgICAgIHNpemUgPSByaWdodC0+
Z2V0Tm9taW5hbFNpemUoKTsKLQotICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdldEJhc2lj
VHlwZSgpOwotCi0gICAgLy8KLSAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVz
LgotICAgIC8vCi0gICAgaWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkg
JiYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAvLyBHTFNMIEVT
IDIuMCBkb2VzIG5vdCBzdXBwb3J0IGltcGxpY2l0IHR5cGUgY2FzdGluZy4KKyAgICAvLyBTbyB0
aGUgYmFzaWMgdHlwZSBzaG91bGQgYWx3YXlzIG1hdGNoLgorICAgIGlmIChsZWZ0LT5nZXRCYXNp
Y1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vCkBAIC03ODIsMTYgKzc3MSwyNyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21v
dGUoVEluZm9TaW5rJiBpCiAgICAgLy8KICAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CiAK
LSAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJlY2lzaW9uKGxl
ZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOwotICAgIGdldFR5cGVQ
b2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKyAgICAvLyBUaGUg
cmVzdWx0IGdldHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgorICAgIFRQcmVj
aXNpb24gaGlnaGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNp
c2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVyKCktPnNl
dFByZWNpc2lvbihoaWdoZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMg
cmVzdWx0cyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAgLy8gb3BlcmFu
ZHMgYXJlIGNvbnN0LgorICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgZ2V0VHlwZVBv
aW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQogCiAgICAgLy8KICAg
ICAvLyBBcnJheSBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkg
eworICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgICAg
ICAvLworICAgICAgICAvLyBBcnJheXMgdHlwZXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgor
ICAgICAgICAvLworICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3dpdGNoIChvcCkgewot
CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAog
ICAgICAgICAgICAgLy8KQEAgLTgxMiwxNyArODEyLDE2IEBAIGJvb2wgVEludGVybUJpbmFyeTo6
cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCisgICAgaW50IHNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdo
dC0+Z2V0Tm9taW5hbFNpemUoKSk7CisKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiAgQ29k
ZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKKyAgICAvLyBB
bGwgc2NhbGFycy4gQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVt
b3ZlZCEKICAgICAvLwogICAgIGlmIChzaXplID09IDEpIHsKLQogICAgICAgICBzd2l0Y2ggKG9w
KSB7Ci0KICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlv
bmFsCiAgICAgICAgICAgICAvLwpAQCAtODQwLDMzICs4MzksMzYgQEAgYm9vbCBUSW50ZXJtQmlu
YXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbEFuZDoKICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAg
ICAgICAgICAgIC8vIEJvdGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCiAgICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gRXZlcnl0aGluZyBlbHNlIHNob3VsZCBoYXZlIG1hdGNoaW5nIHR5cGVzCi0gICAgICAgICAg
ICAvLwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0
QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgIGxlZnQtPmlzTWF0cml4KCkgICAgICE9IHJpZ2h0LT5pc01hdHJpeCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLworICAgIC8vIElmIHdl
IHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1h
dHJpeC4KKyAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9y
LCBvciBtYXRyaXguCiAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwogICAgIC8vCi0g
ICAgaWYgKCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdldE5vbWlu
YWxTaXplKCkgIT0gMSB8fAotICAgICAgICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXpl
ICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUo
KSkgeworICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5vdCBt
YXRjaDoKKyAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCisgICAgICAgIGlm
IChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXplKCkg
IT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT3BlcmF0b3IgY2Fu
bm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgorICAgICAgICBpZiAob3AgPT0gRU9wQXNz
aWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCiAgICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJpbmVk
PwogICAgIC8vCisgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5cGUo
KTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgRU9wTXVsOgogICAgICAgICAgICAg
aWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CkBAIC04NzQsMTIg
Kzg3NiwxMiBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXg7CiAgICAgICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7
Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lv
biwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwg
dHJ1ZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+
aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
cmlnaHQtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhU
aW1lc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdo
ZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBv
cmFyeSwgc2l6ZSwgZmFsc2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0K
QEAgLTg5MCw3ICs4OTIsNyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5r
JiBpCiAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1Zl
Y3RvcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7
Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lv
biwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJN
aXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKQEAgLTkxOSwxOCArOTIxLDE2IEBAIGJvb2wgVElu
dGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAgICAgICAgICAgaWYg
KCEgbGVmdC0+aXNWZWN0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsK
LSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwg
ZmFsc2UpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1p
c3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgRU9wQXNz
aWduOgogICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICBpZiAobGVmdC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKICAgICAgICAg
Y2FzZSBFT3BBZGQ6CiAgICAgICAgIGNhc2UgRU9wU3ViOgogICAgICAgICBjYXNlIEVPcERpdjoK
QEAgLTkzOCwxMCArOTM4LDkgQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2lu
ayYgaQogICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BEaXZBc3Np
Z246CiAgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3Io
KSB8fAotICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkgfHwKLSAgICAgICAgICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0
QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+
aXNNYXRyaXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBz
ZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwg
bGVmdC0+aXNNYXRyaXgoKSB8fCByaWdodC0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgc2V0
VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXpl
LCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtOTUxLDggKzk1MCw3IEBAIGJvb2wg
VEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbkVxdWFsOgogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CiAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAotICAgICAgICAg
ICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKLSAgICAgICAg
ICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NjAsMzAgKzk1
OCwxMyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgLy8KLSAg
ICAvLyBPbmUgbW9yZSBjaGVjayBmb3IgYXNzaWdubWVudC4gIFRoZSBSZXN1bHRpbmcgdHlwZSBo
YXMgdG8gbWF0Y2ggdGhlIGxlZnQgb3BlcmFuZC4KLSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsK
LSAgICAgICAgY2FzZSBFT3BBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAg
ICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAg
ICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246Ci0gICAg
ICAgICAgICBpZiAoZ2V0VHlwZSgpICE9IGxlZnQtPmdldFR5cGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQorICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlv
biogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKIHsKLSAg
ICBUVHlwZUxpc3QqIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25z
dCBUVHlwZUxpc3QqIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKIAogICAgIHNp
emVfdCBzdHJ1Y3RTaXplID0gZmllbGRzLT5zaXplKCk7CiAgICAgaW50IGluZGV4ID0gMDsKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3
LDcgQEAgdm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcgogICAgICAgICAg
ICAgb3V0IDw8IGFycmF5QnJhY2tldHModHlwZSk7CiAKICAgICAgICAgLy8gUHV0IGEgY29tbWEg
aWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVyICE9IC0t
YXJncy5lbmQoKSkKKyAgICAgICAgaWYgKGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCiAgICAgICAg
ICAgICBvdXQgPDwgIiwgIjsKICAgICB9CiB9CkBAIC0zMDQsOCArMzA0LDYgQEAgYm9vbCBUT3V0
cHV0R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaQogCiBib29sIFRPdXRwdXRHTFNMOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCiB7Ci0gICAgVEluZm9TaW5r
QmFzZSYgb3V0ID0gb2JqU2luaygpOwotCiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAg
IHsKICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKC0iLCBO
VUxMLCAiKSIpOyBicmVhazsKQEAgLTY1MCw4ICs2NDgsNiBAQCBib29sIFRPdXRwdXRHTFNMOjp2
aXNpdExvb3AoVmlzaXQgdmlzaXQsCiAKIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQogewotICAgIFRJbmZvU2lua0Jhc2UgJm91
dCA9IG9ialNpbmsoKTsKLQogICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCiAgICAgewog
ICAgICAgICBjYXNlIEVPcEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCBOVUxM
LCBOVUxMKTsgYnJlYWs7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKIAogICAg
ICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
dW5pZm9ybSBmbG9hdDQgZHhfV2luZG93O1xuIgorICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3Jt
IGZsb2F0NCBkeF9WaWV3cG9ydDtcbiIKICAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBmbG9h
dDIgZHhfRGVwdGg7XG4iOwogICAgICAgICB9CiAKQEAgLTc5MSwxMSArNzkxLDExIEBAIGJvb2wg
T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMiAqIDI6IG1Vc2VzRXF1YWxNYXQy
ID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDMgKiAzOiBtVXNlc0VxdWFs
TWF0MyA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSA0ICogNDogbVVzZXNF
cXVhbE1hdDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNF
cXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNF
cXVhbE1hdDMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNF
cXVhbE1hdDQgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtODA0LDcgKzgw
NCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0QmFzaWNUeXBlKCkpCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldFNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldE5vbWluYWxTaXplKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1
YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNl
c0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOwpAQCAtODEzLDcgKzgxMyw3IEBAIGJvb2wgT3V0cHV0
SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogot
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9taW5hbFNp
emUoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MjogbVVzZXNFcXVhbElWZWMyID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBtVXNlc0VxdWFsSVZlYzMgPSB0cnVlOyBicmVhazsKQEAgLTgyMiw3ICs4MjIsNyBA
QCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgp
LT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgp
LT5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOwpAQCAt
MTI4OCw3ICsxMjg4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aQogICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
KCIsICIgIT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1v
ZDoKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBd
LT5nZXRBc1R5cGVkKCktPmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0
aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2Uo
KVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21w
b25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBjYXNlIDE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDI6
IG1Vc2VzTW9kMiA9IHRydWU7IGJyZWFrOwpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgYm9vbCBPdXRw
dXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgY2FzZSBFT3BDcm9zczogICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRTaXplKCkp
ICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1l
bnQKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEg
PSB0cnVlOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0
cnVlOyBicmVhazsKQEAgLTE1NTMsNyArMTU1Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxl
RXhjZXNzaXZlTG9vcChUSW4KIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIGNv
bnN0YW50KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6
ZSgpID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2lj
VHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gc3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFu
dC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKQEAgLTE1NzUsNyArMTU3
NSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KIAogICAgICAg
ICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkg
PT0gMSkKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVi
dEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvciA9IHRlc3QtPmdldE9wKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGxpbWl0ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClb
MF0uZ2V0SUNvbnN0KCk7CkBAIC0xNTk3LDcgKzE1OTcsNyBAQCBib29sIE91dHB1dEhMU0w6Omhh
bmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09
IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYg
KGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWlu
YWxTaXplKCkgPT0gMSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlu
dCB2YWx1ZSA9IGNvbnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgp
OwogCkBAIC0xODQ4LDggKzE4NDgsOCBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KGNvbnN0IFRUCiAKICAgICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7CiAgICAgY3RvclR5cGUuY2xl
YXJBcnJheW5lc3MoKTsKLSAgICBjdG9yVHlwZS5jaGFuZ2VQcmVjaXNpb24oRWJwSGlnaCk7Ci0g
ICAgY3RvclR5cGUuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgY3RvclR5cGUu
c2V0UHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLnNldFF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOwogCiAgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNv
cmF0ZShuYW1lKSA6IG5hbWU7CiAKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAko
cmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODYsNyArNDg2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25z
dHJ1Y3RvckVycm9yQ2hlYwogICAgIH0KICAgICAKICAgICBpZiAoY29uc3RUeXBlKQotICAgICAg
ICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICB0eXBlLT5zZXRRdWFs
aWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRB
cnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKICAgICAgICAgZXJyb3Io
bGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxl
bWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKQEAgLTU4NiwxNCArNTg2LDE0IEBAIGJvb2wgVFBh
cnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW4KIHsKICAgICBpZiAocFR5cGUudHlwZSA9
PSBFYnRTdHJ1Y3QpIHsKICAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRl
ZikpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3Ry
aW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CisgICAg
ICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAi
KHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CiAgICAgICAgIAogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihs
aW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIpOworICAg
ICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7
CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODc5LDkgKzg3OSw5IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCAKICAgICB9CiAKICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0KQotICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29u
c3RSZWFkT25seSk7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5
KTsKICAgICBlbHNlCi0gICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihwYXJhbVF1YWxpZmll
cik7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC05MTMsMjEgKzkxMywyNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAvLwogY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0
OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikK
IHsKLSAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdl
dE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgIC8vIEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVk
IG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbgorICAgIC8v
IGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1lLgorICAgIGNvbnN0
IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWls
dEluKTsKKyAgICBpZiAoc3ltYm9sID09IDApIHsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFi
bGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICB9CiAKLSAgICBp
ZiAoc3ltYm9sID09IDApIHsgICAgICAgIAorICAgIGlmIChzeW1ib2wgPT0gMCkgewogICAgICAg
ICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNh
bGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIGlmICghIHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgaWYgKCFzeW1ib2wtPmlzRnVu
Y3Rpb24oKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIs
IGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICAKLSAgICBjb25zdCBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VEZ1bmN0aW9uKj4oc3ltYm9sKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb247CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKIH0KIAogLy8KQEAg
LTk3MywxMyArOTc2LDEzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVy
KFQKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIGlmIChxdWFsaWZp
ZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewogICAgICAgICAg
ICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCAiJyVzJyIs
IHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7
CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3Jh
cnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5
cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwg
IiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAogICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKLSAg
ICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKQEAgLTk5OCw3ICsxMDAxLDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAgICAgICAg
dmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVz
JyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAg
ICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFy
eSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1w
b3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDQ5LDcgKzEwNTIsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVj
CiAKICAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRl
KCk7CiAgICAgCi0gICAgVFR5cGVMaXN0OjppdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBUVHlw
ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlclR5cGVzOwogICAgIGlmIChvcCA9PSBFT3BDb25z
dHJ1Y3RTdHJ1Y3QpCiAgICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmJl
Z2luKCk7CiAgICAgCkBAIC0xMzQ3LDcgKzEzNTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0QXJyCiAvLwogVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRD
b25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3Vy
Y2VMb2MgbGluZSkKIHsKLSAgICBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKTsKICAgICBUSW50ZXJtVHlwZWQgKnR5cGVkTm9kZTsKICAgICBpbnQgaW5z
dGFuY2VTaXplID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwpAQCAtMTQxMCw2ICsx
NDEzLDIwIEBAIGJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0lu
ZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2Jh
bFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFz
c2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBu
b3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xv
YmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVy
biBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KKwogYm9vbCBJbml0aWFsaXplR2xvYmFs
UGFyc2VDb250ZXh0KCkKIHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKQEAgLTE0MzUsMTcgKzE0NTIsNiBAQCBib29sIEluaXRpYWxp
emVHbG9iYWxQYXJzZUNvbnRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1UUGFyc2VDb250
ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1p
bmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCi0gICAgLy8KLQotICAgIFRUaHJlYWRQYXJz
ZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4
dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0
dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KLQogYm9vbCBGcmVl
UGFyc2VDb250ZXh0KCkKIHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKQEAgLTE0NjAsMTYgKzE0NjYsMTQgQEAgYm9vbCBGcmVlUGFy
c2VDb250ZXh0KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGcmVlUGFyc2VDb250ZXh0
SW5kZXgoKQorVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCiB7
Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0K
LSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBD
b250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAorICAg
IC8vCiAKLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVY
OworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJ
bmRleCkpOwogCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOworICAgIHJl
dHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7CiB9CisKSW5kZXg6IEFO
R0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L1Bvb2xBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTEgKzE1NywxMiBAQCBwcm90ZWN0
ZWQ6CiAgICAgCiAgICAgc3RydWN0IHRIZWFkZXIgewogICAgICAgICB0SGVhZGVyKHRIZWFkZXIq
IG5leHRQYWdlLCBzaXplX3QgcGFnZUNvdW50KSA6CisgICAgICAgICAgICBuZXh0UGFnZShuZXh0
UGFnZSksCisgICAgICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50KQogI2lmZGVmIEdVQVJEX0JM
T0NLUwotICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24oMCksCisgICAgICAgICAgLCBsYXN0QWxs
b2NhdGlvbigwKQogI2VuZGlmCi0gICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCi0gICAg
ICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50KSB7IH0KKyAgICAgICAgICAgIHsgfQogCiAgICAg
ICAgIH50SGVhZGVyKCkgewogI2lmZGVmIEdVQVJEX0JMT0NLUwpAQCAtMjYzLDE5ICsyNjQsMjYg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgogICAgIHBvb2xfYWxsb2NhdG9y
KGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0b3IocC5nZXRBbGxvY2F0
b3IoKSkgeyB9CiAKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERf
QUxMT0NBVE9SKQorICAgIC8vIGxpYkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZl
cmVudCBhbGxvY2F0ZS9kZWFsbG9jYXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIgcHJlLWJh
a2VzIHNpemVvZihUKSBpbnRvICduJyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJl
CisgICAgLy8gYWxsb2NhdGVkLCBub3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICB2b2lk
KiBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigp
LmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29u
c3Qgdm9pZCopIHsKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwor
ICAgIH0KKyAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNlbHNlCiAg
ICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihU
KSkpOwogICAgIH0KICAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lk
KikgeyAKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2Nh
dG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwogICAgIH0KLQotICAgIHZvaWQgZGVhbGxv
Y2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7IH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwg
c2l6ZV90eXBlKSB7IH0KLQotICAgIHBvaW50ZXIgX0NoYXJhbGxvYyhzaXplX3QgbikgewotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxv
Y2F0ZShuKSk7Ci0gICAgfQorICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUp
IHt9CisjZW5kaWYgIC8vIF9SV1NURF9BTExPQ0FUT1IKIAogICAgIHZvaWQgY29uc3RydWN0KHBv
aW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0KICAgICB2
b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
U2hhZGVyTGFuZy5jcHAJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1No
YWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNSArOTAsNDUgQEAgc3RhdGljIGJv
b2wgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoCiAvLwogaW50IFNoSW5pdGlhbGl6ZSgpCiB7
Ci0gICAgYm9vbCByZXQgPSBJbml0UHJvY2VzcygpOworICAgIGlmICghSW5pdFByb2Nlc3MoKSkK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcmV0ID8gMSA6IDA7CisgICAgcmV0dXJu
IDE7CiB9CiAKIC8vCi0vLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95
IGNvbXBpbGVyIG9iamVjdHMuCisvLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKKy8vCitpbnQgU2hG
aW5hbGl6ZSgpCit7CisgICAgaWYgKCFEZXRhY2hQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIDE7Cit9CisKKy8vCisvLyBJbml0aWFsaXplIGJ1aWx0LWluIHJlc291
cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgogLy8KK3ZvaWQgU2hJbml0QnVpbHRJ
blJlc291cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcykKK3sKKyAgICAvLyBDb25zdGFu
dHMuCisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhBdHRyaWJzID0gODsKKyAgICByZXNvdXJjZXMt
Pk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMTI4OworICAgIHJlc291cmNlcy0+TWF4VmFyeWlu
Z1ZlY3RvcnMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMg
PSAwOworICAgIHJlc291cmNlcy0+TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDg7Cisg
ICAgcmVzb3VyY2VzLT5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDg7CisgICAgcmVzb3VyY2VzLT5N
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLT5NYXhEcmF3QnVm
ZmVycyA9IDE7CiAKKyAgICAvLyBFeHRlbnNpb25zLgorICAgIHJlc291cmNlcy0+T0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzID0gMDsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBj
cmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCiBTaEhhbmRsZSBTaENvbnN0
cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRC
dWlsdEluUmVzb3VyY2UqIHJlc291cmNlcykKIHsKICAgICBpZiAoIUluaXRUaHJlYWQoKSkKQEAg
LTEzMCwxNCArMTYwLDYgQEAgdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSkKIH0KIAog
Ly8KLS8vIENsZWFudXAgc3ltYm9sIHRhYmxlcwotLy8KLWludCBTaEZpbmFsaXplKCkKLXsKLSAg
ICByZXR1cm4gMTsKLX0KLQotLy8KIC8vIERvIGFuIGFjdHVhbCBjb21waWxlIG9uIHRoZSBnaXZl
biBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAogLy8gaW4gdGhlIGdpdmVuIGNvbXBpbGUg
b2JqZWN0LgogLy8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24g
NjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIGludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0CiAg
ICAgfQogCiAgICAgaWYgKHN0cnVjdHVyZVNpemUgPT0gMCkKLSAgICAgICAgZm9yIChUVHlwZUxp
c3Q6Oml0ZXJhdG9yIHRsID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgp
LT5lbmQoKTsgdGwrKykKKyAgICAgICAgZm9yIChUVHlwZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIHRs
ID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgpLT5lbmQoKTsgdGwrKykK
ICAgICAgICAgICAgIHN0cnVjdHVyZVNpemUgKz0gKCgqdGwpLnR5cGUpLT5nZXRPYmplY3RTaXpl
KCk7CiAKICAgICByZXR1cm4gc3RydWN0dXJlU2l6ZTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBUVHlwZSYg
Z2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0gICAgCiAgICAgY29uc3QgVFR5cGUmIGdldFR5cGUo
KSBjb25zdCB7IHJldHVybiB0eXBlOyB9CiAgICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gdXNlclR5cGU7IH0KLSAgICB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHF1
YWxpZmllcikgeyB0eXBlLmNoYW5nZVF1YWxpZmllcihxdWFsaWZpZXIpOyB9CisgICAgdm9pZCBz
ZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVh
bGlmaWVyKTsgfQogICAgIHZvaWQgdXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUgKnQp
IHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CiAgICAgVFR5cGUqIGdldEFycmF5SW5mb3Jt
YXRpb25UeXBlKCkgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KIApJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L1R5cGVzLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDI4ICs4MiwyNyBAQCB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0
KiwgVFR5cGVMaXN0Kj46Oml0CiBjbGFzcyBUVHlwZSB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExP
Q0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQotICAgIGV4cGxpY2l0IFRUeXBl
KFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3Jhcnks
IGludCBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNp
emUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6
ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwg
dHlwZU5hbWUoMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBUVHlwZSgp
IHt9CisgICAgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9
IEV2cVRlbXBvcmFyeSwgaW50IHMgPSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBhID0gZmFsc2Up
IDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEpLCBzaXpl
KHMpLCBtYXRyaXgobSksIGFycmF5KGEpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBzdHJ1
Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1h
dGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICB7
CisgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNp
b24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1hdHJp
eCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlT
aXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDAp
LCB0eXBlTmFtZSgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcocC51
c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICBleHBsaWNpdCBUVHlw
ZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24gcCA9IEVi
cFVuZGVmaW5lZCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0
KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4
KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNp
emUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3Ry
aW5nKG4uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIGV4cGxp
Y2l0IFRUeXBlKCkge30KLSAgICB2aXJ0dWFsIH5UVHlwZSgpIHt9Ci0KLSAgICBUVHlwZShjb25z
dCBUVHlwZSYgdHlwZSkgeyAqdGhpcyA9IHR5cGU7IH0KKyAgICAgICAgICAgIHR5cGUocC50eXBl
KSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShw
LnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJy
YXlTaXplKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4
QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5n
bGVkKDApLCB0eXBlTmFtZSgwKQorICAgIHsKKyAgICAgICAgaWYgKHAudXNlckRlZikgeworICAg
ICAgICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAg
IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3Ry
KCkpOworICAgICAgICB9CisgICAgfQorICAgIFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwgY29u
c3QgVFN0cmluZyYgbiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAg
ICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSks
IHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLAorICAg
ICAgICAgICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNp
emUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkK
KyAgICB7CisgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAg
ICB9CiAKICAgICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVN
YXAmIHJlbWFwcGVyKQogICAgIHsKQEAgLTE1Nyw3NyArMTU2LDE5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG5ld1R5cGU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFR5cGUoVEJh
c2ljVHlwZSB0LCBpbnQgcywgYm9vbCBtLCBib29sIGEsIGludCBhUyA9IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyB0eXBlID0gdDsgc2l6ZSA9IHM7IG1hdHJpeCA9IG07IGFycmF5
ID0gYTsgYXJyYXlTaXplID0gYVM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNU
eXBlIHQsIGludCBzLCBib29sIG0sIFRUeXBlKiB1c2VyRGVmID0gMCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IHR5cGUgPSB0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZSA9IHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBtOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJEZWYpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gdXNlckRlZi0+Z2V0U3RydWN0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcnJheSBpbmZvcm1hdGlvbiBpbnRh
Y3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRU
eXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5j
X3N0cigpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWVsZE5hbWUoY29uc3QgVFN0cmluZyYg
bikgeyBmaWVsZE5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBUU3RyaW5nJiBnZXRUeXBlTmFtZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBhc3Nl
cnQodHlwZU5hbWUpOwotICAgICAgICByZXR1cm4gKnR5cGVOYW1lOwotICAgIH0KKyAgICBUQmFz
aWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2b2lkIHNl
dEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KIAotICAgIHZpcnR1YWwgY29u
c3QgVFN0cmluZyYgZ2V0RmllbGROYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGFzc2VydChm
aWVsZE5hbWUpOwotICAgICAgICByZXR1cm4gKmZpZWxkTmFtZTsKLSAgICB9CisgICAgVFByZWNp
c2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBwcmVjaXNpb247IH0KKyAgICB2b2lk
IHNldFByZWNpc2lvbihUUHJlY2lzaW9uIHApIHsgcHJlY2lzaW9uID0gcDsgfQogCi0gICAgdmly
dHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAg
ICB2aXJ0dWFsIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gcHJlY2lz
aW9uOyB9Ci0gICAgdmlydHVhbCBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0
dXJuIHF1YWxpZmllcjsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VQcmVjaXNpb24oVFByZWNp
c2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlUXVhbGlm
aWVyKFRRdWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CisgICAgVFF1YWxpZmllciBnZXRR
dWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldFF1YWxp
ZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVyID0gcTsgfQogCiAgICAgLy8gT25lLWRpbWVu
c2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIHR5cGUKLSAgICB2aXJ0dWFsIGludCBnZXRO
b21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KLQotICAgIC8vIEZ1bGwtZGltZW5z
aW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQotICAgIHZpcnR1YWwgaW50IGdl
dEluc3RhbmNlU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobWF0cml4KQotICAgICAg
ICAgICAgcmV0dXJuIHNpemUgKiBzaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJl
dHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgp
IGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQotICAgIGJvb2wgaXNGaWVs
ZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9Ci0gICAgaW50IGdldEFycmF5U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQotICAgIHZvaWQgc2V0QXJyYXlTaXplKGlu
dCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQotICAgIHZvaWQgc2V0TWF4QXJy
YXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9Ci0gICAgaW50IGdldE1heEFycmF5
U2l6ZSAoKSBjb25zdCB7IHJldHVybiBtYXhBcnJheVNpemU7IH0KLSAgICB2b2lkIGNsZWFyQXJy
YXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNpemUgPSAw
OyB9Ci0gICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBhcnJheUlu
Zm9ybWF0aW9uVHlwZSA9IHQ7IH0KLSAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJp
eCAmJiAhc3RydWN0dXJlOyB9Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5n
KFRCYXNpY1R5cGUgdCkgewotICAgICAgICBzd2l0Y2ggKHQpIHsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50
IjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAg
ICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidFNh
bXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1
Y3R1cmUiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICByZXR1cm4gInVua25vd24gdHlwZSI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29uc3QgY2hh
ciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBUVHlwZTo6Z2V0QmFzaWNTdHJpbmco
dHlwZSk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9Ci0gICAgY29uc3QgY2hhciog
Z2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKTsgfQotICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgeyByZXR1cm4gc3RydWN0
dXJlOyB9Ci0KKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9
CisgICAgdm9pZCBzZXROb21pbmFsU2l6ZShpbnQgcykgeyBzaXplID0gczsgfQorICAgIC8vIEZ1
bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQogICAgIGludCBnZXRPYmplY3RTaXpl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGludCB0b3RhbFNpemU7CkBAIC0yNDUsNyArMTg2LDQ1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAgICB9CiAKKyAgICBib29s
IGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAg
dm9pZCBzZXRNYXRyaXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KKworICAgIGJvb2wgaXNBcnJh
eSgpIGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGludCBnZXRB
cnJheVNpemUoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemU7IH0KKyAgICB2b2lkIHNldEFycmF5
U2l6ZShpbnQgcykgeyBhcnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KKyAgICBpbnQgZ2V0
TWF4QXJyYXlTaXplICgpIGNvbnN0IHsgcmV0dXJuIG1heEFycmF5U2l6ZTsgfQorICAgIHZvaWQg
c2V0TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBj
bGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgbWF4QXJyYXlT
aXplID0gMDsgfQorICAgIHZvaWQgc2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUqIHQpIHsg
YXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KKworICAgIGJv
b2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9CisgICAg
Ym9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFz
dHJ1Y3R1cmU7IH0KKwogICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4g
c3RydWN0dXJlOyB9CisgICAgdm9pZCBzZXRTdHJ1Y3QoVFR5cGVMaXN0KiBzKSB7IHN0cnVjdHVy
ZSA9IHM7IH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVybiAqdHlwZU5hbWU7Cisg
ICAgfQorICAgIHZvaWQgc2V0VHlwZU5hbWUoY29uc3QgVFN0cmluZyYgbikKKyAgICB7CisgICAg
ICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBmaWVsZE5hbWUgIT0gMDsgfQorICAgIGNvbnN0
IFRTdHJpbmcmIGdldEZpZWxkTmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3NlcnQoZmll
bGROYW1lKTsKKyAgICAgICAgcmV0dXJuICpmaWVsZE5hbWU7CisgICAgfQorICAgIHZvaWQgc2V0
RmllbGROYW1lKGNvbnN0IFRTdHJpbmcmIG4pCisgICAgeworICAgICAgICBmaWVsZE5hbWUgPSBO
ZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgIH0KKwogICAgIFRTdHJpbmcmIGdldE1hbmds
ZWROYW1lKCkgewogICAgICAgICBpZiAoIW1hbmdsZWQpIHsKICAgICAgICAgICAgIG1hbmdsZWQg
PSBOZXdQb29sVFN0cmluZygiIik7CkBAIC0yNTUsNiArMjM0LDcgQEAgcHVibGljOgogCiAgICAg
ICAgIHJldHVybiAqbWFuZ2xlZDsKICAgICB9CisKICAgICBib29sIHNhbWVFbGVtZW50VHlwZShj
b25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSBy
aWdodC50eXBlICAgJiYKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAg
JiYKQEAgLTI4Miw2ICsyNjIsMTAgQEAgcHVibGljOgogCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CisKKyAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IDo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25T
dHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9
CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpn
ZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVT
dHJpbmcoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjk1LDExICsyNzksMTIgQEAgcHJvdGVj
dGVkOgogICAgIHVuc2lnbmVkIGludCBtYXRyaXggIDogMTsKICAgICB1bnNpZ25lZCBpbnQgYXJy
YXkgICA6IDE7CiAgICAgaW50IGFycmF5U2l6ZTsKKyAgICBpbnQgbWF4QXJyYXlTaXplOworICAg
IFRUeXBlKiBhcnJheUluZm9ybWF0aW9uVHlwZTsKIAogICAgIFRUeXBlTGlzdCogc3RydWN0dXJl
OyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKICAgICBtdXRhYmxlIGludCBzdHJ1
Y3R1cmVTaXplOwotICAgIGludCBtYXhBcnJheVNpemU7Ci0gICAgVFR5cGUqIGFycmF5SW5mb3Jt
YXRpb25UeXBlOworCiAgICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZvciBzdHJ1
Y3R1cmUgZmllbGQgbmFtZXMKICAgICBUU3RyaW5nICptYW5nbGVkOwogICAgIFRTdHJpbmcgKnR5
cGVOYW1lOyAgICAgICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQpJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBpbnQgUGFQYXJzZVN0
cmluZ3MoY2hhciogYXJndltdLCBpbnQgc3RyCiAgICAKICAgICBpZiAoKmNwcC0+UGFTdHJMZW4g
Pj0gMCkgeyAgICAKICAgICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250
ZXh0TG9jYWwpKTsKLSAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VD
b250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVy
cm9ycyA+IDApCisgICAgICAgIGlmIChyZXQgfHwgY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBw
YXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwu
bnVtRXJyb3JzID4gMCkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBQYVBhcnNlU3RyaW5n
cyhjaGFyKiBhcmd2W10sIGludCBzdHIKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgeXll
cnJvcihjaGFyICpzKSAKK3ZvaWQgeXllcnJvcihjb25zdCBjaGFyICpzKSAKIHsKICAgICBpZiAo
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkFmdGVyRU9GKSB7CiAgICAgICAgIGlmIChjcHAt
PnRva2Vuc0JlZm9yZUVPRiA9PSAxKSB7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFu
Zy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9u
IDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBjb21waWxlci90b29scy4gUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4
CiAjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2Nh
bCkpCiAjZGVmaW5lIFlZTEVYX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCiAjZGVmaW5lIFlZX0RF
Q0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQot
ZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7CitleHRlcm4gdm9pZCB5eWVycm9yKGNvbnN0IGNo
YXIqKTsKIAogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCkBAIC0zMTEsNyArMzExLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCksICQxLT5pc01hdHJpeCgpKSk7
CiAKICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNv
bnN0KQotICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZp
ZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRR
dWFsaWZpZXIoRXZxQ29uc3QpOwogICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpICYm
ICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgICAgICAk
JC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwg
RXZxQ29uc3QsICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CiAgICAgICAgIGVsc2UgaWYgKCQxLT5p
c01hdHJpeCgpKQpAQCAtMzg5LDcgKzM4OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpIHsKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAg
VFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAg
ICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwog
ICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwg
RXJyb3IiLCAiIik7CiAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC00MTMsNyArNDEzLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUs
IG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMg
c3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50
ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKQEAgLTY3Myw3ICs2NzMsNyBAQCBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0g
RU9wTnVsbCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwg
ImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKCQxLnR5
cGUpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAi
Y2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIp
OwogICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAg
ICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dEZsb2F0OwpAQCAtMTAwNywxMiArMTAwNywxMiBAQCBkZWNsYXJhdGlvbgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wZXJhdG9yKEVP
cFByb3RvdHlwZSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0T3AoRU9wUHJvdG90eXBlKTsKICAg
ICAgICAgJCQgPSBwcm90b3R5cGU7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3Qg
U0VNSUNPTE9OIHsKICAgICAgICAgaWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAgICAgICAg
ICQxLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3BlcmF0b3IoRU9wRGVjbGFyYXRpb24pOworICAgICAg
ICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CiAgICAgICAg
ICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOwogICAgIH0KICAgICB8IFBSRUNJU0lPTiBwcmVjaXNp
b25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKQEAgLTE3OTUs
MTkgKzE3OTUsMjQgQEAgc3RydWN0X2RlY2xhcmF0aW9uCiAgICAgICAgIH0KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vdyBh
c3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8gQ2FyZWZ1bCBu
b3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBhcnJheS1u
ZXNzCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0VHlwZSgk
MS50eXBlLCAkMS5zaXplLCAkMS5tYXRyaXgsICQxLnVzZXJEZWYpOworICAgICAgICAgICAgVFR5
cGUqIHR5cGUgPSAoKiQkKVtpXS50eXBlOworICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBl
KCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoJDEuc2l6ZSk7Cisg
ICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoJDEubWF0cml4KTsKIAogICAgICAgICAgICAgLy8g
ZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAgICAgICAgICAgaWYgKCgqJCQpW2ldLnR5
cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewogICAg
ICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDEubGlu
ZSwgJDEpKQogICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICAo
KiQkKVtpXS50eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlm
ICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGVOYW1l
KCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAgICAgICAgICAgIHR5cGUtPnNldEFy
cmF5U2l6ZSgkMS5hcnJheVNpemUpOworICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKKyAg
ICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0KCkpOwor
ICAgICAgICAgICAgICAgIHR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1l
KCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIDsKQEAgLTE4NzMsNyAr
MTg3OCw3IEBAIGNvbXBvdW5kX3N0YXRlbWVudAogICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFD
RSB7ICQkID0gMDsgfQogICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5w
b3AoKTsgfSBSSUdIVF9CUkFDRSB7CiAgICAgICAgIGlmICgkMyAhPSAwKQotICAgICAgICAgICAg
JDMtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQzLT5zZXRPcChFT3BT
ZXF1ZW5jZSk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQogICAgIDsKQEAgLTE4OTAsNyArMTg5
NSw3IEBAIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKICAgICB9CiAgICAgfCBMRUZU
X0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKICAgICAgICAgaWYgKCQyKQotICAg
ICAgICAgICAgJDItPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQyLT5z
ZXRPcChFT3BTZXF1ZW5jZSk7CiAgICAgICAgICQkID0gJDI7CiAgICAgfQogICAgIDsKSW5kZXg6
IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsOCArMjAzLDEw
IEBAIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxv
Y2F0b3IpCiAKICAgICBUSW50ZXJtTm9kZSgpIDogbGluZSgwKSB7fQotICAgIHZpcnR1YWwgVFNv
dXJjZUxvYyBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkgeyBsaW5lID0gbDsgfQorCisgICAgVFNvdXJjZUxvYyBn
ZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQorICAgIHZvaWQgc2V0TGluZShUU291cmNl
TG9jIGwpIHsgbGluZSA9IGw7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKikgPSAwOwogICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVkKCkg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29u
c3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KQEAgLTIxNSw2ICsyMTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVFNvdXJj
ZUxvYyBsaW5lOwogfTsKQEAgLTIzMywyMiArMjM2LDIzIEBAIHN0cnVjdCBUSW50ZXJtTm9kZVBh
aXIgewogY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKIHB1YmxpYzoK
ICAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9Ci0gICAgdmly
dHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsgcmV0dXJuIHRoaXM7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQot
ICAgIHZpcnR1YWwgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9
Ci0gICAgdmlydHVhbCBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQot
Ci0gICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZ2V0QmFzaWNUeXBlKCk7IH0KLSAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQotICAgIHZpcnR1YWwgVFBy
ZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigp
OyB9Ci0gICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBl
LmdldE5vbWluYWxTaXplKCk7IH0KLSAgICB2aXJ0dWFsIGludCBnZXRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZS5nZXRJbnN0YW5jZVNpemUoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01hdHJp
eCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9Ci0g
ICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0IHsgcmV0dXJuIHR5cGUu
Z2V0QmFzaWNTdHJpbmcoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygp
ICBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CisgICAgdmlydHVh
bCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICB2b2lk
IHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBjb25zdCBUVHlwZSYg
Z2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSogZ2V0VHlwZVBvaW50
ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBj
b25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1YWxpZmllciBnZXRR
dWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9CisgICAgVFBy
ZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigp
OyB9CisgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXROb21p
bmFsU2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuaXNNYXRyaXgoKTsgfQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBl
LmlzQXJyYXkoKTsgfQorICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlz
VmVjdG9yKCk7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1Nj
YWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVy
biB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CiAgICAg
VFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29tcGxl
dGVTdHJpbmcoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC0yNjYsMTMgKzI3MCwxNiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB0ZXN0KGFUZXN0KSwKICAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJtaW5h
bCksCiAgICAgICAgICAgICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorCiAgICAgdmlydHVhbCBUSW50
ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAgVEludGVybU5vZGUgKmdldElu
aXQoKSB7IHJldHVybiBpbml0OyB9CiAgICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7IHJldHVy
biBib2R5OyB9CiAgICAgVEludGVybVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVzdDsgfQog
ICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsgfQogICAg
IGJvb2wgdGVzdEZpcnN0KCkgeyByZXR1cm4gZmlyc3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJ
bnRlcm1Ob2RlICppbml0OwogICAgIFRJbnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBjb2RlIHRv
IGxvb3Agb3ZlcgpAQCAtMjg5LDkgKzI5NiwxMiBAQCBwdWJsaWM6CiAgICAgVEludGVybUJyYW5j
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogZSkgOgogICAgICAgICAgICAgZmxvd09wKG9w
KSwKICAgICAgICAgICAgIGV4cHJlc3Npb24oZSkgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsg
cmV0dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0
dXJuIGV4cHJlc3Npb247IH0KKwogcHJvdGVjdGVkOgogICAgIFRPcGVyYXRvciBmbG93T3A7CiAg
ICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0
dXJuIGV4cDsiIHN0YXRlbWVudHMKQEAgLTMwNywxMCArMzE3LDEzIEBAIHB1YmxpYzoKICAgICAv
LyBpdCBpcyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1i
b2wKICAgICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRU
eXBlJiB0KSA6IAogICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wg
PSBzeW07fSAKLSAgICB2aXJ0dWFsIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9Ci0g
ICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRTeW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1i
b2w7ICB9CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQorICAgIGNvbnN0
IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQorCiAgICAgdmly
dHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKICAgICB2aXJ0dWFsIFRJbnRl
cm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKwogcHJvdGVjdGVk
OgogICAgIGludCBpZDsKICAgICBUU3RyaW5nIHN5bWJvbDsKQEAgLTMxOSwxMSArMzMyLDE1IEBA
IHByb3RlY3RlZDoKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1U
eXBlZCB7CiBwdWJsaWM6CiAgICAgVEludGVybUNvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiAq
dW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIHVuaW9uQXJy
YXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9CisKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlv
bkFycmF5UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAg
dm9pZCBzZXRVbmlvbkFycmF5UG9pbnRlcihDb25zdGFudFVuaW9uICpjKSB7IHVuaW9uQXJyYXlQ
b2ludGVyID0gYzsgfQorCiAgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXND
b25zdGFudFVuaW9uKCkgIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVy
c2UoVEludGVybVRyYXZlcnNlciogKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZm9sZChU
T3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOworICAgIHZpcnR1YWwgdm9pZCB0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisKKyAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgogICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOwogfTsKQEAgLTMzNCw5ICszNTEsMTEgQEAg
cHJvdGVjdGVkOgogY2xhc3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7
CiBwdWJsaWM6CiAgICAgVE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAg
ICB2b2lkIHNldE9wKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQorCiAgICAgYm9vbCBtb2RpZmll
c1N0YXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJikgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CiAgICAgVEludGVybU9wZXJhdG9y
KFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9ICAgCkBA
IC0zNDksMTMgKzM2OCwxNiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVi
bGljIFRJbnRlcm1PcGVyYXRvciB7CiBwdWJsaWM6CiAgICAgVEludGVybUJpbmFyeShUT3BlcmF0
b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Iobykge30KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2Uo
VEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRlcm1UeXBl
ZCogbikgeyBsZWZ0ID0gbjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlw
ZWQqIG4pIHsgcmlnaHQgPSBuOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldExlZnQo
KSBjb25zdCB7IHJldHVybiBsZWZ0OyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldFJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gcmlnaHQ7IH0KKwogICAgIHZpcnR1YWwgVEludGVybUJpbmFy
eSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgYm9vbCBw
cm9tb3RlKFRJbmZvU2luayYpOworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJh
dmVyc2VyKik7CisKKyAgICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQgPSBu
OyB9CisgICAgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9Cisg
ICAgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQorICAgIFRJ
bnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQorICAgIGJvb2wg
cHJvbW90ZShUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogbGVm
dDsKICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OwpAQCAtMzY4LDExICszOTAsMTQgQEAgY2xhc3Mg
VEludGVybVVuYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYQogcHVibGljOgogICAgIFRJbnRlcm1V
bmFyeShUT3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVy
YW5kKDApIHt9CiAgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRv
cihvKSwgb3BlcmFuZCgwKSB7fQorCiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1U
cmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlwZWQqIG8p
IHsgb3BlcmFuZCA9IG87IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgp
IHsgcmV0dXJuIG9wZXJhbmQ7IH0KICAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFy
eU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9T
aW5rJik7CisKKyAgICB2b2lkIHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQg
PSBvOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsg
fSAgICAKKyAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7CisKIHByb3RlY3RlZDoKICAgICBU
SW50ZXJtVHlwZWQqIG9wZXJhbmQ7CiB9OwpAQCAtMzg3LDIxICs0MTIsMjQgQEAgcHVibGljOgog
ICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRl
ZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSB7IH0KICAgICBUSW50ZXJtQWdncmVnYXRlKFRP
cGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9CiAgICAg
flRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorCiAgICAgdmlydHVh
bCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9Ci0gICAg
dmlydHVhbCBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBu
OyB9Ci0gICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZTsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9
Ci0gICAgdmlydHVhbCBUUXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1cm4gcXVh
bGlmaWVyOyB9CisKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4g
c2VxdWVuY2U7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0g
bjsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9
CisKKyAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KKyAg
ICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIFRRdWFs
aWZpZXJMaXN0JiBnZXRRdWFsaWZpZXIoKSB7IHJldHVybiBxdWFsaWZpZXI7IH0KICAgICB2b2lk
IHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KLSAgICB2b2lkIHNldERlYnVn
KGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4g
b3B0aW1pemU7IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAg
ICBib29sIGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KICAgICB2b2lkIGFkZFRvUHJhZ21h
VGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpOwogICAgIGNvbnN0IFRQcmFnbWFUYWJs
ZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogcHJv
dGVjdGVkOgogICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAv
LyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0
b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVy
YXRvcgpAQCAtNDIzLDEyICs0NTEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgVEludGVybVR5
cGVkKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVC
bG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQogICAgIFRJbnRlcm1TZWxlY3Rpb24o
VEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxz
ZUIsIGNvbnN0IFRUeXBlJiB0eXBlKSA6CiAgICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSks
IGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9
CisKICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAg
Ym9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNUeXBlKCkg
IT0gRWJ0Vm9pZDsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGNvbmRpdGlvbjsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldFRy
dWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQotICAgIHZpcnR1YWwgVEludGVy
bU5vZGUqIGdldEZhbHNlQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9Ci0gICAg
dmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0
aGlzOyB9CisgICAgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbjsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVy
biB0cnVlQmxvY2s7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlv
bk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQq
IGNvbmRpdGlvbjsKICAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOwpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
cGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIzICsxMiwzMSBAQAogLy8KIGNs
YXNzIFRDb25zdFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKIHB1YmxpYzoK
LSAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNv
bnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1i
b2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0
KSwKLSAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFu
dFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3lt
VGFibGUpLCBlcnJvcihmYWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQotCXsK
LQkJaW5kZXggPSAwOwotCX0KKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1Vu
aW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5m
b1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KQorICAgICAgICA6
IGVycm9yKGZhbHNlKSwKKyAgICAgICAgICBpbmRleCgwKSwKKyAgICAgICAgICB1bmlvbkFycmF5
KGNVbmlvbiksCisgICAgICAgICAgdHlwZSh0KSwKKyAgICAgICAgICBjb25zdHJ1Y3RvclR5cGUo
Y29uc3RydWN0VHlwZSksCisgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbShzaW5nbGVDb25z
dFBhcmFtKSwKKyAgICAgICAgICBpbmZvU2luayhzaW5rKSwKKyAgICAgICAgICBzeW1ib2xUYWJs
ZShzeW1UYWJsZSksCisgICAgICAgICAgc2l6ZSgwKSwKKyAgICAgICAgICBpc01hdHJpeChmYWxz
ZSksCisgICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgfQogCi0JYm9vbCBlcnJvcjsKKyAg
ICBib29sIGVycm9yOwogCiBwcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKik7Ci0Jdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsK
LQlib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0JYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0U2VsZWN0
aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFnZ3JlZ2F0
ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotCWJvb2wgdmlzaXRMb29wKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTG9vcCopOwotCWJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJ
bnRlcm1CcmFuY2gqKTsKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAg
ICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCB2aXNpdCwgVEludGVybUJyYW5jaCopOwogCiAgICAgaW50IGluZGV4OwogICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0
b20uYwkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2F0b20uYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBv
cmF0aW9uLgogCkBAIC02MjQsNyArNjE5LDcgQEAgc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRv
bVRhYmxlICphdGFibAogCiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50
IGh0c2l6ZSkKIHsKLSAgICBpbnQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgaHRz
aXplID0gaHRzaXplIDw9IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKICAgICBp
ZiAoIUluaXRTdHJpbmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpKQpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jb21waWxlLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMp
IDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9jcHAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2NwcC5jCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvY3BwLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9j
cHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5o
CShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5j
CShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
c3RydWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnku
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5j
CShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVt
b3J5LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShy
ZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlv
bi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZp
c2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
IApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJ
KHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVw
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmMJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2Jh
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xv
YmFscy5oCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3Ivc2xnbG9iYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
eW1ib2xzLmMJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApAQCAtMTU3LDcgKzE1Miw3IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNv
dXJjZUxvYyAqbG9jLCBTY29wZSAKIHsKICAgICBTeW1ib2wgKmxTeW1iOwogICAgIGNoYXIgKnBj
aDsKLSAgICBpbnQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgbFN5bWIgPSAoU3lt
Ym9sICopIG1lbV9BbGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKICAgICBsU3lt
Yi0+bGVmdCA9IE5VTEw7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rv
a2Vucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmMJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci90b2tlbnMuYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENv
cnBvcmF0aW9uLgogCkBAIC0yMTAsNyArMjA1LDcgQEAgdm9pZCBEZWxldGVUb2tlblN0cmVhbShU
b2tlblN0cmVhbSAqcFRvawogdm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50
IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBjb25zdCBjaGFyICpzOwotICAg
IHVuc2lnbmVkIGNoYXIgKnN0cj1OVUxMOworICAgIGNoYXIgKnN0cj1OVUxMOwogCiAgICAgaWYg
KHRva2VuID4gMjU2KQogICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoKHRv
a2VuICYgMHg3ZikgKyAweDgwKSk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci90b2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJ
RElBIENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDY2NTQ5
KQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
OCArMjMsMTIgQEAgbmFtZXNwYWNlIGVnbAogewogRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNl
Q29udGV4dCkgOiBtRGMoZGV2aWNlQ29udGV4dCkKIHsKKyAgICBtRDNkOU1vZHVsZSA9IE5VTEw7
CisgICAgCiAgICAgbUQzZDkgPSBOVUxMOworICAgIG1EM2Q5ZXggPSBOVUxMOwogICAgIG1EZXZp
Y2UgPSBOVUxMOworICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogCiAgICAgbUFkYXB0ZXIgPSBE
M0RBREFQVEVSX0RFRkFVTFQ7CiAKQEAgLTUxLDcgKzU1LDM4IEBAIGJvb2wgRGlzcGxheTo6aW5p
dGlhbGl6ZSgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1EM2Q5ID0gRGly
ZWN0M0RDcmVhdGU5KEQzRF9TREtfVkVSU0lPTik7CisgICAgbUQzZDlNb2R1bGUgPSBMb2FkTGli
cmFyeShURVhUKCJkM2Q5LmRsbCIpKTsKKyAgICBpZiAobUQzZDlNb2R1bGUgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHRlcm1pbmF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdHlwZWRlZiBJRGlyZWN0M0Q5KiAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlGdW5jKShV
SU5UKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlGdW5jIERpcmVjdDNEQ3JlYXRlOVB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1
bGUsICJEaXJlY3QzRENyZWF0ZTkiKSk7CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5UHRyID09
IE5VTEwpCisgICAgeworICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlF
eEZ1bmMpKFVJTlQsIElEaXJlY3QzRDlFeCoqKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMg
RGlyZWN0M0RDcmVhdGU5RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4
RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsK
KworICAgIC8vIFVzZSBEaXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5n
cywgdGhpcyB2ZXJzaW9uIGlzIGxlc3MKKyAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0
IGNvbnRleHQsIGZvciBleGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKKyAgICAvLyBkZXNr
dG9wLiBEaXJlY3QzRDlFeCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIg
aWYgc3VpdGFibGUgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChEaXJlY3QzRENyZWF0
ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19WRVJTSU9O
LCAmbUQzZDlleCkpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1EM2Q5ZXgpOworICAgICAgICBt
RDNkOWV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZtRDNkOSkpOworICAgICAgICBBU1NFUlQobUQzZDkpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOVB0cihEM0RfU0RLX1ZFUlNJ
T04pOworICAgIH0KIAogICAgIGlmIChtRDNkOSkKICAgICB7CkBAIC02OSw4NiArMTA0LDkxIEBA
IGJvb2wgRGlzcGxheTo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbiA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRDNkOSA9IE5VTEw7CisgICAg
ICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lO
SVRJQUxJWkVELCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtTWluU3dhcEludGVydmFsID0gNDsKLSAgICAgICAgICAgIG1NYXhTd2FwSW50
ZXJ2YWwgPSAwOwogCi0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50
ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEUpIHttTWluU3dhcEludGVydmFs
ID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtTWF4U3dhcEludGVydmFsLCAwKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMu
UHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpICAgICAgIHtt
TWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAxKTt9Ci0gICAgICAgICAgICBp
ZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZB
TF9UV08pICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZh
bCwgMik7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTt9
Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNE
UFJFU0VOVF9JTlRFUlZBTF9USFJFRSkgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4o
bU1pblN3YXBJbnRlcnZhbCwgMyk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dh
cEludGVydmFsLCAzKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9u
SW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHttTWluU3dhcEludGVy
dmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBz
dGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9CisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwg
PSA0OworICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKIAotICAgICAgICAgICAgY29uc3Qg
RDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgICAgICAgICAgLy8gIEQzREZNVF9BMlIxMEcx
MEIxMCwgICAvLyBUaGUgY29sb3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVs
cyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBz
a2lwcGVkIGEgY29sb3VyIHZhbHVlLgotICAgICAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwK
LSAgICAgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAgICAgICAgIEQzREZNVF9Y
MVI1RzVCNSwKLSAgICAgICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAgICAgIH07
CisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVT
RU5UX0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWlu
U3dhcEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50
ZXJ2YWwsIDApO30KKyAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFs
cyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgo
bU1heFN3YXBJbnRlcnZhbCwgMSk7fQorICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0
aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pICAgICAgIHttTWluU3dhcElu
dGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7IG1NYXhTd2FwSW50ZXJ2YWwg
PSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTt9CisgICAgICAgIGlmIChtRGV2aWNlQ2Fw
cy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKSAgICAg
e21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsgbU1heFN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KKyAgICAgICAgaWYg
KG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxf
Rk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWws
IDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7fQog
Ci0gICAgICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAotICAgICAg
ICAgICAgICAgIEQzREZNVF9EMzIsCi0gICAgICAgICAgICAvLyAgRDNERk1UX0QxNVMxLAotICAg
ICAgICAgICAgICAgIEQzREZNVF9EMjRTOCwKLSAgICAgICAgICAgICAgICBEM0RGTVRfRDI0WDgs
Ci0gICAgICAgICAgICAvLyAgRDNERk1UX0QyNFg0UzQsCi0gICAgICAgICAgICAgICAgRDNERk1U
X0QxNiwKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAgICAgICAg
IC8vICBEM0RGTVRfRDI0RlM4Ci0gICAgICAgICAgICB9OworICAgICAgICBjb25zdCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgRDNERk1U
X0ExUjVHNUI1LAorICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xv
cl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllU
RSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFs
dWUuCisgICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgICAgICBEM0RGTVRfUjVH
NkI1LAorICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgRDNERk1UX1g4
UjhHOEI4CisgICAgICAgIH07CiAKLSAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnRE
aXNwbGF5TW9kZTsKLSAgICAgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFk
YXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOworICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVw
dGhTdGVuY2lsRm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAvLyAgRDNERk1UX0QxNl9M
T0NLQUJMRSwKKyAgICAgICAgICAgIEQzREZNVF9EMzIsCisgICAgICAgIC8vICBEM0RGTVRfRDE1
UzEsCisgICAgICAgICAgICBEM0RGTVRfRDI0UzgsCisgICAgICAgICAgICBEM0RGTVRfRDI0WDgs
CisgICAgICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKKyAgICAgICAgICAgIEQzREZNVF9EMTYsCisg
ICAgICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKKyAgICAgICAgLy8gIEQzREZNVF9EMjRG
UzgKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKKyAgICAg
ICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgICAgICBtRDNkOS0+R2V0
QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKIAotICAg
ICAgICAgICAgZm9yIChpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHNpemVvZihy
ZW5kZXJUYXJnZXRGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3JtYXRJbmRleCsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3Jt
YXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKyAgICAgICAgQ29uZmlnU2V0
IGNvbmZpZ1NldDsKIAotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCByZW5kZXJU
YXJnZXRGb3JtYXQpOworICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdElu
ZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZv
cm1hdEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKworICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVu
Y2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3Jt
YXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVuY2lsSW5kZXgg
PSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRzKSAvIHNp
emVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgICAgICAg
ICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0
aFN0ZW5jaWxJbmRleF07CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBk
ZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
RDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhT
dGVuY2lsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0Us
IGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0
ZW5jaWxGb3JtYXQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRh
cHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdl
dEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBFbnVtZXJhdGUgbXVs
dGktc2FtcGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZW51bWVy
YXRlIG11bHRpLXNhbXBsaW5nCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
ZmlnU2V0LmFkZChjdXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1NYXhTd2Fw
SW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnU2V0LmFkZChjdXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1NYXhT
d2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAwKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBH
aXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5h
bGx5Ci0gICAgICAgICAgICBFR0xpbnQgaW5kZXggPSAxOwotICAgICAgICAgICAgZm9yIChDb25m
aWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAh
PSBjb25maWdTZXQubVNldC5lbmQoKTsgY29uZmlnKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOwotICAgICAgICAgICAgICAg
IGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lEID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgaW5kZXgr
KzsKKyAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0
b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICBFR0xpbnQgaW5kZXggPSAxOworICAgICAgICBm
b3IgKENvbmZpZ1NldDo6SXRlcmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsg
Y29uZmlnICE9IGNvbmZpZ1NldC5tU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOworICAgICAgICAgICAgY29u
ZmlndXJhdGlvbi5tQ29uZmlnSUQgPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4Kys7CiAKLSAg
ICAgICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24pOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0
aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4NSw2ICsyMjUsMjQgQEAgdm9pZCBEaXNwbGF5Ojp0
ZXJtaW5hdGUoKQogICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwogICAgICAgICBtRDNkOSA9IE5V
TEw7CiAgICAgfQorCisgICAgaWYgKG1EZXZpY2VXaW5kb3cpCisgICAgeworICAgICAgICBEZXN0
cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOworICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsK
KyAgICB9CisgICAgCisgICAgaWYgKG1EM2Q5ZXgpCisgICAgeworICAgICAgICBtRDNkOWV4LT5S
ZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5ZXggPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRDNk
OU1vZHVsZSkKKyAgICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EM2Q5TW9kdWxlKTsKKyAgICAg
ICAgbUQzZDlNb2R1bGUgPSBOVUxMOworICAgIH0KIH0KIAogdm9pZCBEaXNwbGF5OjpzdGFydFNj
ZW5lKCkKQEAgLTI1NCwxMzIgKzMxMiw3NCBAQCBib29sIERpc3BsYXk6OmdldENvbmZpZ0F0dHJp
YihFR0xDb25maWcgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVN1cmZhY2UgKkRpc3BsYXk6OmNy
ZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCitib29sIERp
c3BsYXk6OmNyZWF0ZURldmljZSgpCiB7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9u
ID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgd2luZG93
TmFtZVtdID0gVEVYVCgiQW5nbGVIaWRkZW5XaW5kb3ciKTsKKyAgICBzdGF0aWMgY29uc3QgVENI
QVIgY2xhc3NOYW1lW10gPSBURVhUKCJTVEFUSUMiKTsKKworICAgIG1EZXZpY2VXaW5kb3cgPSBD
cmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRvd05hbWUsIFdT
X0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVMTCwgR2V0
TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsKIAogICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBw
cmVzZW50UGFyYW1ldGVycyA9IHswfTsKIAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0
aFN0ZW5jaWxGb3JtYXQgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAg
IC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFj
ZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJz
LgorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRf
VU5LTk9XTjsKICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBjb25maWd1cmF0aW9uLT5tUmVu
ZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9
IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDA7Ci0gICAgcHJl
c2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IGNvbmZpZ3VyYXRpb24tPm1E
ZXB0aFNpemUgPyBUUlVFIDogRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwog
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5o
RGV2aWNlV2luZG93ID0gd2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxl
UXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05F
OyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmlj
ZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVRdWFsaXR5ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBE
M0RNVUxUSVNBTVBMRV9OT05FOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbklu
dGVydmFsID0gY29udmVydEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwpOwotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisgICAgcHJlc2VudFBhcmFtZXRl
cnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5XaW5kb3dlZCA9IFRSVUU7CiAKLSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hh
aW4gPSBOVUxMOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0g
TlVMTDsKKyAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8
IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7CiAKLSAgICBpZiAoIW1EZXZpY2UpCisgICAgSFJF
U1VMVCByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
bURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQ
Uk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1E
ZXZpY2UpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICB7Ci0gICAgICAgIERXT1JEIGJlaGF2aW9yRmxh
Z3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hBTkdFUzsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9CiAKLSAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgd2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRF
WFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAm
bURldmljZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmVzdWx0
ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5k
b3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywg
JnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZh
Y2UqKU5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgd2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJF
X1ZFUlRFWFBST0NFU1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAg
ICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAg
ICAgaWYgKG1EZXZpY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkdldFN3YXBDaGFpbigwLCAmc3dhcENoYWluKTsK
LSAgICAgICAgICAgIG1EZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJmRlcHRoU3RlbmNp
bFN1cmZhY2UpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1TdXJm
YWNlU2V0LmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2Ug
YWxyZWFkeSBleGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFjZXMvd2luZG93cyBjdXJy
ZW50bHkgaW4gdXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQotICAgICAgICAgICAgLy8gYSBzZXBhcmF0
ZSBzd2FwIGNoYWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBh
cmFtZXRlcnMsICZzd2FwQ2hhaW4pOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVS
Ul9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3
YXAgY2hhaW5zLiBPdXQgb2YgbWVtb3J5LiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgLy8g
Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
IGEgZGVwdGhzdGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKLSAgICAgICAgICAgIC8vIENyZWF0ZURl
dmljZSwgc28gd2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgotICAgICAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwg
JmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgc3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbi4gT3V0IG9mIG1l
bW9yeS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVn
bDo6U3VyZmFjZSopTlVMTCk7Ci0gICAgICAgICAgICB9CisgICAgLy8gUGVybWFuZW50IG5vbi1k
ZWZhdWx0IHN0YXRlcworICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BS
SVRFRU5BQkxFLCBUUlVFKTsKIAotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlm
IHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3VyZmFjZXMgaW4g
dXNlLCB0aGVuIGFsbCB0aGUgc3VyZmFjZXMvd2luZG93cwotICAgICAgICAgICAgLy8gaGF2ZSBi
ZWVuIGRlc3Ryb3llZCwgYW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdpbmFsbHkgY3Jl
YXRlZCBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IKLSAgICAgICAgICAgIC8vIHVzZSB3aXRoIHRo
ZSBuZXcgc3VyZmFjZSB3ZSBhcmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgbVNjZW5lU3RhcnRl
ZCA9IGZhbHNlOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2V0IHByZXNlbnRhdGlvbiBwYXJhbWV0ZXJzIGZv
ciBkZXZpY2UuIE91dCBvZiBtZW1vcnkuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAo
bURldmljZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU2NlbmVTdGFydGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZzd2FwQ2hh
aW4pOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJmRl
cHRoU3RlbmNpbFN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgU3VyZmFjZSAqc3VyZmFjZSA9IE5VTEw7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBp
ZiAoc3dhcENoYWluKQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMs
IHN3YXBDaGFpbiwgZGVwdGhTdGVuY2lsU3VyZmFjZSwgY29uZmlndXJhdGlvbik7Ci0gICAgICAg
IG1TdXJmYWNlU2V0Lmluc2VydChzdXJmYWNlKTsKK1N1cmZhY2UgKkRpc3BsYXk6OmNyZWF0ZVdp
bmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCit7CisgICAgY29uc3Qg
Q29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKIAotICAgICAg
ICBzd2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5l
dyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdyk7CisgICAgbVN1cmZhY2VTZXQu
aW5zZXJ0KHN1cmZhY2UpOwogCiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLUVHTENvbnRleHQg
RGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQorRUdMQ29udGV4
dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiB7CiAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZp
ZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRsZSk7CiAKLSAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcpOworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0KTsKICAgICBtQ29udGV4dFNl
dC5pbnNlcnQoY29udGV4dCk7CiAKICAgICByZXR1cm4gY29udGV4dDsKQEAgLTQ2OCw0ICs0Njgs
MjMgQEAgRDNEQ0FQUzkgRGlzcGxheTo6Z2V0RGV2aWNlQ2FwcygpCiB7CiAgICAgcmV0dXJuIG1E
ZXZpY2VDYXBzOwogfQorCit2b2lkIERpc3BsYXk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAoaW50IG11
bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUlu
ZGV4LCBOVUxMKTsKKworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhd
ID0gU1VDQ0VFREVEKHJlc3VsdCk7CisgICAgfQorfQorCitib29sIERpc3BsYXk6OmdldENvbXBy
ZXNzZWRUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3Bs
YXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJy
ZW50RGlzcGxheU1vZGUpOworCisgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMSkpOworfQogfQpJbmRleDogQU5HTEUv
c3JjL2xpYkVHTC9EaXNwbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRGlzcGxheQogICAgIGJvb2wgZ2V0
Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAq
dmFsdWUpOwogCiAgICAgZWdsOjpTdXJmYWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2lu
ZG93LCBFR0xDb25maWcgY29uZmlnKTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdM
Q29uZmlnIGNvbmZpZ0hhbmRsZSk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENv
bmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwogCiAg
ICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQg
ZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtNjAsMTYgKzYwLDIyIEBA
IGNsYXNzIERpc3BsYXkKIAogICAgIHZpcnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNl
KCk7CiAgICAgdmlydHVhbCBEM0RDQVBTOSBnZXREZXZpY2VDYXBzKCk7CisgICAgdmlydHVhbCB2
b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNh
bXBsZUFycmF5KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0
KCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlzcGxheSk7
CiAgICAgY29uc3QgSERDIG1EYzsKIAorICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7CisgICAgCiAg
ICAgVUlOVCBtQWRhcHRlcjsKICAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwotICAgIElEaXJl
Y3QzRDkgKm1EM2Q5OworICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFm
dGVyIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCisgICAgSURpcmVjdDNEOUV4ICptRDNkOWV4
OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KICAgICBJRGly
ZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworICAgIEhX
TkQgbURldmljZVdpbmRvdzsKIAogICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKICAgICBHTGludCBt
U3dhcEludGVydmFsOwpAQCAtODQsNiArOTAsOCBAQCBjbGFzcyBEaXNwbGF5CiAKICAgICB0eXBl
ZGVmIHN0ZDo6c2V0PGdsOjpDb250ZXh0Kj4gQ29udGV4dFNldDsKICAgICBDb250ZXh0U2V0IG1D
b250ZXh0U2V0OworCisgICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKIH07CiB9CiAKSW5kZXg6IEFO
R0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1cmZh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw5ICsxNywxMSBAQAogCiBuYW1lc3BhY2UgZWds
CiB7Ci1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3YXBDaGFp
bjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwgY29uc3QgQ29u
ZmlnICpjb25maWcpIAotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hhaW4oc3dhcENo
YWluKSwgbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZpZykKK1N1cmZh
Y2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQg
d2luZG93KSAKKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5k
b3cod2luZG93KQogeworICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWwg
PSBOVUxMOwogICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVM
TDsKICAgICBtRmxpcFRleHR1cmUgPSBOVUxMOwpAQCAtMzAsNDIgKzMyLDcgQEAgU3VyZmFjZTo6
U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBJRGlyZQogICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xf
QkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwog
Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5BZGRSZWYo
KTsKLSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZ
UEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKLQotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3Jp
cHRpb247Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAg
ICAgICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNj
cmlwdGlvbi5IZWlnaHQ7Ci0KLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlz
cGxheS0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVSZW5kZXJUYXJnZXQobVdpZHRoLCBtSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIGRlc2Ny
aXB0aW9uLk11bHRpU2FtcGxlVHlwZSwgZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVRdWFsaXR5LCBG
QUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGVycm9yKEVHTF9CQURfQUxMT0MpOwotCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShtV2lkdGgsIG1IZWlnaHQsIDEs
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX0RFRkFV
TFQsICZtRmxpcFRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgICAgIGVycm9y
KEVHTF9CQURfQUxMT0MpOwotCi0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXNldFN3YXBD
aGFpbigpOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC0xMDYsMjAgKzczLDEyMSBAQCBT
dXJmYWNlOjp+U3VyZmFjZSgpCiAgICAgfQogfQogCi1IV05EIFN1cmZhY2U6OmdldFdpbmRvd0hh
bmRsZSgpCit2b2lkIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKIHsKLSAgICBpZiAobVN3YXBD
aGFpbikKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNl
KCk7CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07
CisKKyAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gbUNvbmZp
Zy0+bURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
Q291bnQgPSAxOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29u
ZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1
dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRvd0hhbmRsZSgp
OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxl
bWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEaXNw
bGF5Ojpjb252ZXJ0SW50ZXJ2YWwobUNvbmZpZy0+bU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJl
c2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICBSRUNUIHdpbmRvd1JlY3Q7
CisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVjdCkp
CisgICAgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gd2luZG93UmVjdC5yaWdo
dCAtIHdpbmRvd1JlY3QubGVmdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVp
Z2h0ID0gd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcDsKKworICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmc3dhcENo
YWluKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpOworCisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hh
aW5zOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
KTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3VyZmFjZSA9
IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFt
ZXRlcnMuTXVsdGlTYW1wbGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNF
LCAmZGVwdGhTdGVuY2lsU3VyZmFjZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgewotICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7
Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1l
dGVycyk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFz
ZSgpOwogCi0gICAgICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93Owor
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5l
dyBzd2FwIGNoYWluOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DKTsKICAgICB9CiAKLSAgICByZXR1cm4gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuTXVsdGlTYW1wbGVUeXBlLCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxp
dHksIEZBTFNFLCAmcmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFpbi0+UmVs
ZWFzZSgpOworICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSBmb3IgbmV3IHN3
YXAgY2hhaW46ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqZmxpcFRleHR1cmUgPSBOVUxMOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmZmxpcFRleHR1cmUsIE5VTEwpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAg
ICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2Ut
PlJlbGVhc2UoKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGZsaXAgdGV4dHVyZSBmb3IgbmV3IHN3YXAgY2hhaW46ICUw
OGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MpOworICAg
IH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpiYWNrQnVmZmVyID0gTlVMTDsKKyAgICBzd2Fw
Q2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZiYWNrQnVm
ZmVyKTsKKworICAgIGlmIChtU3dhcENoYWluKSBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAg
aWYgKG1EZXB0aFN0ZW5jaWwpIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICBpZiAobUJh
Y2tCdWZmZXIpIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQp
IG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICBpZiAobUZsaXBUZXh0dXJlKSBtRmxpcFRl
eHR1cmUtPlJlbGVhc2UoKTsKKworICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJXaWR0aDsKKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodDsKKworICAgIG1Td2FwQ2hhaW4gPSBzd2FwQ2hhaW47CisgICAgbURlcHRoU3RlbmNpbCA9
IGRlcHRoU3RlbmNpbFN1cmZhY2U7CisgICAgbUJhY2tCdWZmZXIgPSBiYWNrQnVmZmVyOworICAg
IG1SZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7CisgICAgbUZsaXBUZXh0dXJlID0gZmxpcFRl
eHR1cmU7CisKKyAgICAvLyBUaGUgZmxpcCBzdGF0ZSBibG9jayByZWNvcmRlZCBtRmxpcFRleHR1
cmUgc28gaXQgaXMgbm93IGludmFsaWQuCisgICAgcmVsZWFzZVJlY29yZGVkU3RhdGUoZGV2aWNl
KTsKK30KKworSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQoreworICAgIHJldHVybiBt
V2luZG93OwogfQogCi12b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit2b2lkIFN1
cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Up
CiB7CiAgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucwogICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwpAQCAtMTM4LDE2ICsy
MDYsMTggQEAgdm9pZCBTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSQogICAgIGRl
dmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxF
Q1RBUkcxKTsKICAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xP
UkFSRzEsIEQzRFRBX1RFWFRVUkUpOwogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUo
MSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1
cmUoMCwgc291cmNlKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7IC8vIFRoZSBh
Y3R1YWwgdGV4dHVyZSB3aWxsIGNoYW5nZSBhZnRlciByZXNpemluZy4gQnV0IHRoZSBwcmUtZmxp
cCBzdGF0ZSBibG9jayBtdXN0IHNhdmUvcmVzdG9yZSB0aGUgdGV4dHVyZS4KICAgICBkZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CiAg
ICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZf
UE9JTlQpOwogICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRV
UkUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJF
U1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwg
RDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwogICAgIGRldmljZS0+U2V0RlZG
KEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CiAKICAgICBkZXZpY2UtPlNldFN0cmVhbVNv
dXJjZUZyZXEoMCwgMSk7IC8vIERyYXdQcmltaXRpdmVVUCBvbmx5IGNhcmVzIGFib3V0IHN0cmVh
bSAwLCBub3QgdGhlIHJlc3QuCiB9CiAKLXZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQordm9pZCBT
dXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCiB7CiAgICAg
SFJFU1VMVCBocjsKIApAQCAtMTU4LDcgKzIyOCw3IEBAIHZvaWQgU3VyZmFjZTo6YXBwbHlGbGlw
U3RhdGUoSURpcmVjdDNERGUKICAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0
aGUgb3JpZ2luYWwgc3RhdGUgZWFjaCBlbnRyeS4KICAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2lu
U3RhdGVCbG9jaygpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIHdy
aXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAgIHdyaXRlUmVj
b3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UpOwogICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVC
bG9jaygmbVByZUZsaXBTdGF0ZSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhy
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwogCkBA
IC0xNzEsNyArMjQxLDcgQEAgdm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0RE
ZQogICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CiAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKIAotICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoZGV2
aWNlLCBzb3VyY2UpOworICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoZGV2aWNlKTsK
IAogICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBTdGF0ZSk7CiAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMjIzLDI5ICsyOTMsODggQEAgdm9pZCBTdXJm
YWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNERGV2aQogICAgIH0KIH0KIAorLy8gT24gdGhlIG5l
eHQgZmxpcCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBzdGF0ZSB0byBiZSByZWNvcmRlZCBmcm9tIHNj
cmF0Y2guCisvLyBJbiBwYXJ0aWN1bGFyIHdlIG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgZmxpcCB0
ZXh0dXJlIGNoYW5nZXMuCit2b2lkIFN1cmZhY2U6OnJlbGVhc2VSZWNvcmRlZFN0YXRlKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSkKK3sKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7CisgICAg
ICAgIG1GbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgbUZsaXBTdGF0ZSA9IE5VTEw7Cisg
ICAgfQorCisgICAgaWYgKG1QcmVGbGlwU3RhdGUpCisgICAgeworICAgICAgICBtUHJlRmxpcFN0
YXRlLT5SZWxlYXNlKCk7CisgICAgICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOworICAgIH0KK30K
KworYm9vbCBTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpCit7CisgICAgUkVDVCBjbGll
bnQ7CisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0V2lkdGgoKSAhPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdCB8
fCBnZXRIZWlnaHQoKSAhPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcCkKKyAgICB7CisgICAg
ICAgIHJlc2V0U3dhcENoYWluKCk7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVnbDo6U3Vy
ZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQorICAgICAgICB7CisgICAg
ICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQoKSwgc3RhdGljX2Nhc3Q8
ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBi
b29sIFN1cmZhY2U6OnN3YXAoKQogewogICAgIGlmIChtU3dhcENoYWluKQogICAgIHsKKyAgICAg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKmZsaXBUZXh0dXJlID0gbUZsaXBUZXh0dXJlOworICAgICAg
ICBmbGlwVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7CisgICAgICAgIHJlbmRlclRhcmdldC0+QWRkUmVm
KCk7CisKKyAgICAgICAgRUdMaW50IG9sZFdpZHRoID0gbVdpZHRoOworICAgICAgICBFR0xpbnQg
b2xkSGVpZ2h0ID0gbUhlaWdodDsKKworICAgICAgICBjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpOwor
CiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2Uo
KTsKIAogICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0gICAgICAg
IG1GbGlwVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7CisgICAg
ICAgIGZsaXBUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKIAog
ICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVj
dChtUmVuZGVyVGFyZ2V0LCBOVUxMLCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05F
KTsKKyAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChyZW5kZXJUYXJnZXQsIE5VTEwsIHRleHR1
cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICByZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsKIAotICAgICAgICBhcHBseUZsaXBTdGF0ZShkZXZpY2UsIG1GbGlwVGV4dHVyZSk7
CisgICAgICAgIGFwcGx5RmxpcFN0YXRlKGRldmljZSk7CisgICAgICAgIGRldmljZS0+U2V0VGV4
dHVyZSgwLCBmbGlwVGV4dHVyZSk7CisKKyAgICAgICAgZmxvYXQgeHNjYWxlID0gKGZsb2F0KW1X
aWR0aCAvIG9sZFdpZHRoOworICAgICAgICBmbG9hdCB5c2NhbGUgPSAoZmxvYXQpbUhlaWdodCAv
IG9sZEhlaWdodDsKIAogICAgICAgICAvLyBSZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24g
aW50byB0aGUgYmFjayBidWZmZXIKLSAgICAgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7ICAgICAw
IC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGZ9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4w
ZiwgMS4wZiwgMS4wZiwgMS4wZn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0
aCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAu
MGYsIDEuMGYsIDAuMGYsIDAuMGZ9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKyAgICAgICAg
Ly8gVGV4Y29vcmRzIGFyZSBjaG9zZW4gdG8gcGluIGEgcG90ZW50aWFsbHkgcmVzaXplZCBpbWFn
ZSBpbnRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciB3aXRob3V0IHNjYWxpbmcuCisgICAgICAgIGZs
b2F0IHF1YWRbNF1bNl0gPSB7eyAgICAgMCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAx
LjBmLCAwLjBmLCAgIDEuMGYgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
bVdpZHRoIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIHhzY2FsZSwgMS4wZiAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCBtSGVp
Z2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmLXlzY2FsZX0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyAgICAgMCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAx
LjBmLCAwLjBmLCAgIDEuMGYteXNjYWxlfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2CiAKICAg
ICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKICAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0
aXZlVVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKIAor
ICAgICAgICBmbGlwVGV4dHVyZS0+UmVsZWFzZSgpOwogICAgICAgICB0ZXh0dXJlU3VyZmFjZS0+
UmVsZWFzZSgpOwogCiAgICAgICAgIHJlc3RvcmVTdGF0ZShkZXZpY2UpOwpAQCAtMjY0LDYgKzM5
Myw3IEBAIGJvb2wgU3VyZmFjZTo6c3dhcCgpCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBB
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBDb25maWc7CiBjbGFzcyBT
dXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJl
Y3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkqIGRlcHRoU3RlbmNp
bCwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNw
bGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdyk7CiAKICAgICB+U3Vy
ZmFjZSgpOwogCkBAIC00MiwyMCArNDIsMjUgQEAgY2xhc3MgU3VyZmFjZQogICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5
OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKmNvbnN0IG1Td2FwQ2hhaW47CisgICAgSURpcmVj
dDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tC
dWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1GbGlw
VGV4dHVyZTsKIAotICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHJlc2V0U3dhcENoYWlu
KCk7CisgICAgYm9vbCBjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpOworCisgICAgdm9pZCBhcHBseUZs
aXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwogICAgIHZvaWQgcmVzdG9yZVN0YXRl
KElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlw
U3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNl
KTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UpOworICAgIHZvaWQgcmVsZWFzZVJlY29yZGVkU3RhdGUoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlKTsKICAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKICAgICBJRGly
ZWN0M0RTdGF0ZUJsb2NrOSAqbVByZUZsaXBTdGF0ZTsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bVByZUZsaXBCYWNrQnVmZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRo
U3RlbmNpbDsKIAorICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cg
dGhhdCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KICAgICBjb25zdCBlZ2w6OkNvbmZpZyAq
bUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgKICAgICBF
R0xpbnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UKICAgICBF
R0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQpJbmRleDog
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJF
R0wvbGliRUdMLmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVH
TC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw3ICs3NzIsNyBAQCBFR0xDb250ZXh0IF9fc3Rk
Y2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRF
WFQ7CiAgICAgICAgIH0KIAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5j
cmVhdGVDb250ZXh0KGNvbmZpZyk7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGRpc3Bs
YXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpKTsKIAogICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKICAgICB9CkBA
IC04MjQsOSArODI0LDggQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdM
RAogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3Bs
YXkqPihkcHkpOwogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oY3R4KTsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlz
cGxheS0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIERXT1JEIHBhc3NlczsKIAotICAgICAgICBpZiAo
IWRldmljZSB8fCBkZXZpY2UtPlZhbGlkYXRlRGV2aWNlKCZwYXNzZXMpID09IEQzREVSUl9ERVZJ
Q0VMT1NUKQorICAgICAgICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxl
dmVsKCkgIT0gRDNEX09LKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdM
X0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpJbmRleDogQU5HTEUvc3JjL2xp
YkVHTC9saWJFR0wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdM
LnZjcHJvagkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJ
CQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5
LmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZHhndWlkLmxpYiINCiAJCQkJTGlu
a0luY3JlbWVudGFsPSIyIg0KIAkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiIN
CiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KQEAgLTE0MCw3ICsxNDAsNyBA
QAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0
aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVz
PSJkeGd1aWQubGliIg0KIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCU1vZHVsZURlZmlu
aXRpb25GaWxlPSJsaWJFR0wuZGVmIg0KIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRy
dWUiDQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvQmxpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiwxMiArMjMyLDEyIEBA
IGJvb2wgQmxpdDo6c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY28KIAogYm9vbCBCbGl0Ojpz
ZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKQogewotICAgIHJldHVybiBzZXRTaGFkZXI8
SURpcmVjdDNEVmVydGV4U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0VmVydGV4U2hhZGVy
UHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVj
dDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJl
Y3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwz
KCkgPyAidnNfM18wIiA6ICJ2c18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4
U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKIH0KIAogYm9vbCBC
bGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCiB7Ci0gICAgcmV0dXJuIHNldFNo
YWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPmdldFBpeGVsU2hh
ZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGly
ZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGly
ZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwz
KCkgPyAicHNfM18wIiA6ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxT
aGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7CiB9CiAKIFJFQ1QgQmxp
dDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0CkBAIC0z
MjUsNiArMzI1LDcgQEAgYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudQog
ICAgIHsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICBjYXNlIEdMX1JHQkE6
CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgogICAgICAgY2FzZSBHTF9SR0I6CiAgICAgICBjYXNl
IEdMX0FMUEhBOgogICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJf
UFNfQ09NUE9ORU5UTUFTSyk7CkBAIC0zNTEsNiArMzUyLDcgQEAgYm9vbCBCbGl0OjpzZXRGb3Jt
YXRDb252ZXJ0U2hhZGVycyhHTGVudQogICAgIHsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgogICAgICAg
ICBwc0NvbnN0MFtYXSA9IDE7CiAgICAgICAgIHBzQ29uc3QwW1pdID0gMTsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyArMTMsNyBA
QAogbmFtZXNwYWNlIGdsCiB7CiAKLUJ1ZmZlcjo6QnVmZmVyKCkKK0J1ZmZlcjo6QnVmZmVyKEdM
dWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBtQ29udGVudHMgPSBOVUxMOwog
ICAgIG1TaXplID0gMDsKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gNjY1NDkpCisr
KyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCwxNCAr
MTgsMTUgQEAKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCiAKIG5hbWVz
cGFjZSBnbAogewogCi1jbGFzcyBCdWZmZXIKK2NsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dE9iamVjdAogewogICBwdWJsaWM6Ci0gICAgQnVmZmVyKCk7CisgICAgZXhwbGljaXQgQnVmZmVy
KEdMdWludCBpZCk7CiAKICAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKIApJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuY3BwCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJsaWJH
TEVTdjIvbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL0JsaXQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCkBAIC0zMyw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBnbAogewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnKQorQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29u
ZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KQogICAgIDogbUNvbmZpZyhjb25m
aWcpCiB7CiAgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKQEAgLTEw
MywzNyArMTA0LDM5IEBAIENvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmYK
ICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogICAgIG1TdGF0ZS5kZXB0aE1hc2sg
PSB0cnVlOwogCisgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAg
bVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKKyAgICAg
ICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7CisgICAgfQor
CiAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6CiAgICAgLy8g
SW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAgaGF2
ZSB0d29kaW1lbnNpb25hbAogICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZlY3Rv
cnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgogICAgIC8vIEluIG9yZGVyIHRo
YXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJl
IHRyZWF0ZWQgYXMgdGV4dHVyZQogICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVzIGFy
ZSAwLgogCi0gICAgbVRleHR1cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKHRoaXMpOwotICAgIG1U
ZXh0dXJlQ3ViZU1hcFplcm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgbVRleHR1
cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKDApOworICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8gPSBu
ZXcgVGV4dHVyZUN1YmVNYXAoMCk7CiAKICAgICBtQ29sb3JidWZmZXJaZXJvID0gTlVMTDsKLSAg
ICBtRGVwdGhidWZmZXJaZXJvID0gTlVMTDsKLSAgICBtU3RlbmNpbGJ1ZmZlclplcm8gPSBOVUxM
OworICAgIG1EZXB0aFN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKIAogICAgIG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyID0gMDsKLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOwotICAgIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsKKyAgICBiaW5k
RWxlbWVudEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKICAgICBi
aW5kVGV4dHVyZTJEKDApOwotICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5kUmVhZEZy
YW1lYnVmZmVyKDApOworICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRl
cmJ1ZmZlcigwKTsKIAogICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBF
X0NPVU5UOyB0eXBlKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2Ft
cGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQ
RV9DT1VOVDsgdHlwZSsrKQotICAgIHsKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBl
XSA9IE5VTEw7CiAgICAgfQogCkBAIC0xNTUsNjUgKzE1OCw3MiBAQCBDb250ZXh0OjpDb250ZXh0
KGNvbnN0IGVnbDo6Q29uZmlnICpjb25mCiAKICAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsK
IAorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0
YXRlID0gTlVMTDsKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCiBDb250ZXh0Ojp+Q29u
dGV4dCgpCiB7Ci0gICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLQotICAgIGZvciAoaW50
IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgaWYgKG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1JbmNvbXBs
ZXRlVGV4dHVyZXNbdHlwZV07CisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7CisgICAgICAg
IGlmIChwcm9ncmFtT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0
LT5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0g
MDsKICAgICB9CiAKLSAgICBkZWxldGUgbVRleHR1cmUyRFplcm87Ci0gICAgZGVsZXRlIG1UZXh0
dXJlQ3ViZU1hcFplcm87Ci0KLSAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKLSAgICBkZWxl
dGUgbURlcHRoYnVmZmVyWmVybzsKLSAgICBkZWxldGUgbVN0ZW5jaWxidWZmZXJaZXJvOwotCi0g
ICAgZGVsZXRlIG1CdWZmZXJCYWNrRW5kOwotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7
Ci0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtQmxpdDsKLQotICAg
IHdoaWxlICghbUJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZyYW1lYnVmZmVyTWFw
LmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigp
LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdp
bigpLT5maXJzdCk7CiAgICAgfQogCi0gICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQor
ICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0
ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwogICAgIH0K
IAotICAgIHdoaWxlICghbVNoYWRlck1hcC5lbXB0eSgpKQorICAgIGZvciAoaW50IHR5cGUgPSAw
OyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCiAgICAgewotICAgICAgICBkZWxl
dGVTaGFkZXIobVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGZvciAoaW50IHNh
bXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykK
KyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBs
ZXJdLnNldChOVUxMKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHdoaWxlICghbUZyYW1lYnVm
ZmVyTWFwLmVtcHR5KCkpCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZ
UEVfQ09VTlQ7IHR5cGUrKykKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFt
ZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdOwogICAgIH0KIAotICAgIHdoaWxlICghbVJlbmRlcmJ1ZmZlck1hcC5lbXB0
eSgpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5iZWdpbigp
LT5maXJzdCk7CisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5kQnVmZmVy
LnNldChOVUxMKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCi0g
ICAgewotICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsK
LSAgICB9CisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUuZWxl
bWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUudGV4dHVyZTJELnNldChOVUxM
KTsKKyAgICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOworICAgIG1TdGF0ZS5yZW5k
ZXJidWZmZXIuc2V0KE5VTEwpOworCisgICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOworICAgIGRl
bGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1CdWZmZXJCYWNrRW5kOwor
ICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7CisgICAgZGVsZXRlIG1JbmRleERhdGFNYW5h
Z2VyOworICAgIGRlbGV0ZSBtQmxpdDsKIAogICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRl
KQogICAgIHsKICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwogICAg
IH0KKworICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDb250ZXh0
OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFj
ZSkKQEAgLTIyOSw2ICsyMzksMzQgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRp
c3BsYXkgKgogICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2Vy
KHRoaXMsIG1CdWZmZXJCYWNrRW5kKTsKICAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsK
IAorICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0KKyAgICAg
ICAgeworICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgRDNERk1UX1g4
UjhHOEI4LAorICAgICAgICAgICAgRDNERk1UX1I1RzZCNSwKKyAgICAgICAgICAgIEQzREZNVF9E
MjRTOAorICAgICAgICB9OworCisgICAgICAgIGludCBtYXggPSAwOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JN
QVQpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkg
PSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07CisgICAgICAgICAgICBk
aXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwgbXVs
dGlzYW1wbGVBcnJheSk7CisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRlckJ1
ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKKworICAgICAgICAgICAgZm9yIChp
bnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNE
TVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1heCA9IGo7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7CisK
KyAgICAgICAgbVN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzID0gZGlzcGxheS0+Z2V0Q29tcHJl
c3NlZFRleHR1cmVTdXBwb3J0KCk7CisKICAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwog
CiAgICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwpAQCAtMjQ4LDE5ICsyODYsMTEgQEAgdm9p
ZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3Rl
bmNpbCgpOwogCi0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1
ZmZlcigpOwogICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZm
ZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7Ci0gICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyWmVy
byA9IG5ldyBEZXB0aGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIFN0ZW5jaWxidWZmZXIgKnN0
ZW5jaWxidWZmZXJaZXJvID0gbmV3IFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsKKyAgICBE
ZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVu
Y2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVy
byA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxi
dWZmZXJaZXJvKTsKIAogICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOwot
ICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOwotICAgIHNldERlcHRoYnVm
ZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOwotICAgIHNldFN0ZW5jaWxidWZmZXJaZXJvKHN0ZW5j
aWxidWZmZXJaZXJvKTsKLQotICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3JidWZmZXIoR0xf
UkVOREVSQlVGRkVSLCAwKTsKLSAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRoYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgMCk7Ci0gICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVuY2lsYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgMCk7CiAKICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNl
KCk7CiAKQEAgLTI2OSwxNiArMjk5LDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6
OkRpc3BsYXkgKgogICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19WRVJTSU9O
KDMsIDApKQotICAgIHsKLSAgICAgICAgbVBzUHJvZmlsZSA9ICJwc18zXzAiOwotICAgICAgICBt
VnNQcm9maWxlID0gInZzXzNfMCI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGVnbDo6RGlzcGxheSBn
dWFyYW50ZWVzIHN1cHBvcnQgZm9yIGF0IGxlYXN0IDIuMAotICAgIHsKLSAgICAgICAgbVBzUHJv
ZmlsZSA9ICJwc18yXzAiOwotICAgICAgICBtVnNQcm9maWxlID0gInZzXzJfMCI7Ci0gICAgfQor
ICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lv
biA9PSBEM0RQU19WRVJTSU9OKDMsIDApOwogCiAgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKIH0K
QEAgLTMwMCw2ICszMjEsMTIgQEAgdm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAg
ICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRy
dWU7CiAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Gcm9udEZhY2VEaXJ0eSA9
IHRydWU7CisKKyAgICBpZiAobUJ1ZmZlckJhY2tFbmQgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1CdWZmZXJCYWNrRW5kLT5pbnZhbGlkYXRlKCk7CisgICAgfQogfQogCiB2b2lkIENvbnRleHQ6
OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQg
YWxwaGEpCkBAIC02NzEsMTkgKzY5OCwyNCBAQCB2b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBs
ZXIoaW50IGFjdGl2CiAgICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7CiB9CiAKLUdM
dWludCBDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0CitHTHVpbnQgQ29udGV4
dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRl
LnJlYWRGcmFtZWJ1ZmZlcjsKK30KKworR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZl
ckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5mcmFtZWJ1ZmZlcjsKKyAgICBy
ZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKIH0KIAogR0x1aW50IENvbnRleHQ6OmdldFJl
bmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZm
ZXI7CisgICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsKIH0KIAogR0x1aW50IENv
bnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRl
LmFycmF5QnVmZmVyOworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKIH0KIAog
dm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0sIGJvb2wgZW5hYmxlZCkKQEAgLTY5NiwxMCArNzI4LDEwIEBAIGNvbnN0IEF0dHJpYnV0ZVN0
YXRlICZDb250ZXh0OjpnZXRWZXJ0ZXgKICAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZVthdHRyaWJOdW1dOwogfQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xl
bnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmli
U3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQg
c2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCiB7Ci0g
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlciA9IGJvdW5k
QnVmZmVyOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZm
ZXIuc2V0KGJvdW5kQnVmZmVyKTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV0ubVNpemUgPSBzaXplOwogICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
VHlwZSA9IHR5cGU7CiAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3Jt
YWxpemVkID0gbm9ybWFsaXplZDsKQEAgLTczOCw3MiArNzcwLDI5IEBAIEdMaW50IENvbnRleHQ6
OmdldFVucGFja0FsaWdubWVudCgpIGNvbnMKICAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdu
bWVudDsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKIEdMdWludCBDb250
ZXh0OjpjcmVhdGVCdWZmZXIoKQogewotICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwotCi0g
ICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5kKCkpCi0g
ICAgewotICAgICAgICBoYW5kbGUrKzsKLSAgICB9Ci0KLSAgICBtQnVmZmVyTWFwW2hhbmRsZV0g
PSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Y3JlYXRlQnVmZmVyKCk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRlci9wcm9n
cmFtIG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCitHTHVp
bnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGhhbmRsZSA9
IDE7Ci0KLSAgICB3aGlsZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5l
bmQoKSB8fCBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkpICAg
Ly8gU2hhcmVkIG5hbWUgc3BhY2UKLSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQot
ICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVy
TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgbVNo
YWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAg
fQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiBoYW5kbGU7CisgICAgcmV0
dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0oKTsKIH0KIAotLy8gUmV0dXJucyBh
biB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dy
YW0oKQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKIHsKLSAgICB1
bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtUHJvZ3JhbU1hcC5maW5kKGhh
bmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0g
bVNoYWRlck1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQotICAgIHsKLSAgICAgICAg
aGFuZGxlKys7Ci0gICAgfQotCi0gICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQcm9ncmFt
KCk7Ci0KLSAgICByZXR1cm4gaGFuZGxlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5j
cmVhdGVTaGFkZXIodHlwZSk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFt
ZQogR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIHVuc2lnbmVkIGludCBo
YW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKSAhPSBtVGV4
dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQotICAgIG1U
ZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxMOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5j
cmVhdGVUZXh0dXJlKCk7Cit9CiAKLSAgICByZXR1cm4gaGFuZGxlOworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZl
ciBuYW1lCkBAIC04MjEsODUgKzgxMCw0NCBAQCBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVi
dWZmZXIoKQogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHJl
bmRlcmJ1ZmZlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtUmVuZGVyYnVmZmVy
TWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAg
ICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVM
TDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KIHZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVy
KEdMdWludCBidWZmZXIpCiB7Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3Qg
PSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKLQotICAgIGlmIChidWZmZXJPYmplY3QgIT0gbUJ1
ZmZlck1hcC5lbmQoKSkKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZl
cikpCiAgICAgewogICAgICAgICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsKLQotICAgICAgICBkZWxl
dGUgYnVmZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVy
T2JqZWN0KTsKICAgICB9CisgICAgCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVy
KGJ1ZmZlcik7CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIp
CiB7Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZp
bmQoc2hhZGVyKTsKLQotICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIGlmICghc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmlzQXR0YWNoZWQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25kOwotICAg
ICAgICAgICAgbVNoYWRlck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZs
YWdGb3JEZWxldGlvbigpOwotICAgICAgICB9Ci0gICAgfQorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0o
R0x1aW50IHByb2dyYW0pCiB7Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVj
dCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9iamVjdCAh
PSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtICE9IG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1P
YmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1PYmpl
Y3QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lk
IENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCiB7Ci0gICAgVGV4dHVyZU1h
cDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0K
LSAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICBpZiAobVJl
c291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKICAgICB7CiAgICAgICAgIGRldGFj
aFRleHR1cmUodGV4dHVyZSk7CisgICAgfQogCi0gICAgICAgIGlmICh0ZXh0dXJlICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQ7Ci0gICAg
ICAgIH0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworfQog
Ci0gICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOwordm9pZCBDb250ZXh0
OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAobVJl
c291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisgICAgeworICAg
ICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKICAgICB9CisgICAgCisgICAg
bVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAK
IHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQpAQCAt
OTE1LDMwNyArODYzLDE4NiBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWlu
dCBmCiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQg
cmVuZGVyYnVmZmVyKQorQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkK
IHsKLSAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlck9iamVjdCA9IG1S
ZW5kZXJidWZmZXJNYXAuZmluZChyZW5kZXJidWZmZXIpOwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgZGV0YWNo
UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICAgICAgZGVsZXRlIHJlbmRlcmJ1ZmZl
ck9iamVjdC0+c2Vjb25kOwotICAgICAgICBtUmVuZGVyYnVmZmVyTWFwLmVyYXNlKHJlbmRlcmJ1
ZmZlck9iamVjdCk7Ci0gICAgfQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZm
ZXIoaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCiB7
Ci0gICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAg
ICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKLSAgICB9Ci0KLSAgICBtU3Rh
dGUuYXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNoYWRlcihoYW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1
aW50IGhhbmRsZSkKIHsKLSAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIp
KQotICAgIHsKLSAgICAgICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOwotICAg
IH0KLQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgcmV0dXJu
IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0
OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4
dHVyZShHTHVpbnQgaGFuZGxlKQogewotICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0
ZXh0dXJlICE9IDApCi0gICAgewotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IG5ldyBU
ZXh0dXJlMkQodGhpcyk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnRleHR1cmUyRCA9IHRleHR1cmU7
Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVy
ZShoYW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQg
dGV4dHVyZSkKK1JlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpCiB7Ci0gICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkK
LSAgICB7Ci0gICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmVDdWJlTWFw
KHRoaXMpOwotICAgIH0KLQotICAgIG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9IHRleHR1cmU7Ci0K
LSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0gPSB0ZXh0dXJlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJi
dWZmZXIoaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIoR0x1aW50
IGZyYW1lYnVmZmVyKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigp
CiB7Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAg
fQotCi0gICAgbVN0YXRlLmZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgcmV0dXJuIGdl
dEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIpOwogfQogCi12b2lkIENvbnRleHQ6
OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK0ZyYW1lYnVmZmVyICpDb250
ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIoKQogewotICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAm
JiAhZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBtUmVuZGVy
YnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSBuZXcgUmVuZGVyYnVmZmVyKCk7Ci0gICAgfQotCi0g
ICAgbVN0YXRlLnJlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlcjsKKyAgICByZXR1cm4gZ2V0RnJh
bWVidWZmZXIobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29udGV4dDo6dXNl
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3ZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVmZmVyKHVu
c2lnbmVkIGludCBidWZmZXIpCiB7Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1
cnJlbnRQcm9ncmFtKCk7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0
aW9uKGJ1ZmZlcik7CiAKLSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQ
cm9ncmFtOwotICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAg
ICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBv
bmx5IGdldHMgZmxhZ2dlZC4KLQotICAgIGlmIChwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW1PYmpl
Y3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkpCi0gICAgewotICAgICAgICBkZWxldGVQcm9ncmFt
KHByaW9yUHJvZ3JhbSk7Ci0gICAgfQorICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVm
ZmVyKGJ1ZmZlcikpOwogfQogCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFt
ZWJ1ZmZlciAqYnVmZmVyKQordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVu
c2lnbmVkIGludCBidWZmZXIpCiB7Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsKLSAg
ICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci19CisgICAgbVJlc291cmNlTWFuYWdlci0+
Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CiAKLXZvaWQgQ29udGV4dDo6c2V0Q29sb3Ji
dWZmZXJaZXJvKENvbG9yYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1Db2xvcmJ1ZmZl
clplcm87Ci0gICAgbUNvbG9yYnVmZmVyWmVybyA9IGJ1ZmZlcjsKKyAgICBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKLXZvaWQgQ29udGV4dDo6
c2V0RGVwdGhidWZmZXJaZXJvKERlcHRoYnVmZmVyICpidWZmZXIpCit2b2lkIENvbnRleHQ6OmJp
bmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCiB7Ci0gICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclpl
cm87Ci0gICAgbURlcHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKLX0KKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfMkQpOwogCi12b2lk
IENvbnRleHQ6OnNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIgKmJ1ZmZlcikKLXsK
LSAgICBkZWxldGUgbVN0ZW5jaWxidWZmZXJaZXJvOwotICAgIG1TdGVuY2lsYnVmZmVyWmVybyA9
IGJ1ZmZlcjsKLX0KKyAgICBtU3RhdGUudGV4dHVyZTJELnNldChnZXRUZXh0dXJlKHRleHR1cmUp
KTsKIAotdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXIoUmVuZGVyYnVmZmVyICpidWZmZXIp
Ci17Ci0gICAgZGVsZXRlIG1SZW5kZXJidWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl07Ci0g
ICAgbVJlbmRlcmJ1ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXSA9IGJ1ZmZlcjsKKyAgICBt
U3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNl
dChtU3RhdGUudGV4dHVyZTJELmdldCgpKTsKIH0KIAotQnVmZmVyICpDb250ZXh0OjpnZXRCdWZm
ZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFw
KEdMdWludCB0ZXh0dXJlKQogewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1
ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfQ1VCRSk7CiAK
LVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAg
U2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKTsKKyAg
ICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogCi0gICAg
aWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaGFkZXItPnNlY29u
ZDsKLSAgICB9CisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfQ1VCRV1bbVN0YXRl
LmFjdGl2ZVNhbXBsZXJdLnNldChtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOwogfQogCi1Q
cm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCit2b2lkIENv
bnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewotICAgIFBy
b2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7Ci0K
LSAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFt
ZWJ1ZmZlcikpCiAgICAgewotICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgICAg
ICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7CiAgICAg
fQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKHVuc2lnbmVkIGludCBoYW5kbGUp
Ci17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKSByZXR1cm4gTlVMTDsKLQotICAgIFRleHR1cmVNYXA6
Oml0ZXJhdG9yIHRleHR1cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhhbmRsZSk7CiAKLSAgICBpZiAo
dGV4dHVyZSA9PSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdGV4dHVyZS0+c2Vjb25k
OwotICAgIH0KKyAgICBtU3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CiB9CiAK
LUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxl
KQordm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikK
IHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZm
ZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZl
ck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNl
CisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCiAgICAgewotICAgICAgICBy
ZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1l
YnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwogICAgIH0KKworICAgIG1TdGF0ZS5kcmF3RnJh
bWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKIH0KIAotUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRS
ZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRl
cmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQogewotICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRl
cmF0b3IgcmVuZGVyYnVmZmVyID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisgICAg
bVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZl
cik7CiAKLSAgICBpZiAocmVuZGVyYnVmZmVyID09IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHJlbmRlcmJ1ZmZlci0+c2Vjb25kOwotICAgIH0KKyAgICBtU3RhdGUucmVuZGVy
YnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSk7CiB9CiAKLUNvbG9yYnVm
ZmVyICpDb250ZXh0OjpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0
Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewotICAgIGlmIChoYW5kbGUgIT0gMCkKKyAg
ICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAgIG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2gg
YmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4K
KworICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKICAgICB7Ci0gICAgICAgIFJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisgICAgICAg
IFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dy
YW0pOworICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0
UHJvZ3JhbShwcmlvclByb2dyYW0pOwogCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVu
ZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgIGlmIChuZXdQcm9ncmFtKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JidWZmZXIqPihyZW5k
ZXJidWZmZXIpOworICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChvbGRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAg
ICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAgIC8v
IFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRhcmdl
dHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlclplcm87Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CiB9CiAKLURlcHRoYnVm
ZmVyICpDb250ZXh0OjpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0
OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKIHsKLSAgICBpZiAoaGFu
ZGxlICE9IDApCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGdl
dFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVu
ZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxEZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGlu
aXRpYWwgcmVuZGVyIHRhcmdldHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclplcm87Ci0gICAgfQorICAgIGRlbGV0ZSBtRnJh
bWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOworfQogCi0g
ICAgcmV0dXJuIE5VTEw7Cit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVu
ZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKKyAgICByZW5kZXJi
dWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKIH0KIAotU3RlbmNpbGJ1ZmZl
ciAqQ29udGV4dDo6Z2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQorRnJhbWVidWZmZXIg
KkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCiB7Ci0gICAgaWYg
KGhhbmRsZSAhPSAwKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIg
PSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3Ig
ZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOwogCi0gICAgICAgIGlm
IChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0ZW5jaWxidWZmZXIqPihyZW5k
ZXJidWZmZXIpOwotICAgICAgICB9CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZl
ck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJaZXJvOworICAgICAgICByZXR1
cm4gZnJhbWVidWZmZXItPnNlY29uZDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAog
QnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCiB7Ci0gICAgcmV0dXJuIGdldEJ1ZmZl
cihtU3RhdGUuYXJyYXlCdWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0
KCk7CiB9CiAKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKIHsKLSAg
ICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpOworICAgIHJldHVy
biBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwogfQogCiBQcm9ncmFtICpDb250ZXh0
OjpnZXRDdXJyZW50UHJvZ3JhbSgpCiB7Ci0gICAgcmV0dXJuIGdldFByb2dyYW0obVN0YXRlLmN1
cnJlbnRQcm9ncmFtKTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbSht
U3RhdGUuY3VycmVudFByb2dyYW0pOwogfQogCiBUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1
cmUyRCgpCiB7Ci0gICAgaWYgKG1TdGF0ZS50ZXh0dXJlMkQgPT0gMCkgICAvLyBTcGVjaWFsIGNh
c2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0
YXJnZXQKKyAgICBpZiAobVN0YXRlLnRleHR1cmUyRC5pZCgpID09IDApICAgLy8gU3BlY2lhbCBj
YXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBvbiB0aGUg
dGFyZ2V0CiAgICAgewogICAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm87CiAgICAgfQogCi0g
ICAgcmV0dXJuIChUZXh0dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmUyRCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KG1TdGF0ZS50ZXh0dXJlMkQuZ2V0KCkpOwog
fQogCiBUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQogewotICAg
IGlmIChtU3RhdGUudGV4dHVyZUN1YmVNYXAgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVm
ZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKKyAg
ICBpZiAobVN0YXRlLnRleHR1cmVDdWJlTWFwLmlkKCkgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6
IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJn
ZXQKICAgICB7CiAgICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOwogICAgIH0KIAot
ICAgIHJldHVybiAoVGV4dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmVDdWJl
TWFwKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihtU3RhdGUudGV4
dHVyZUN1YmVNYXAuZ2V0KCkpOwogfQogCiBUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4
dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBHTHVp
bnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07CisgICAgR0x1
aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7CiAK
ICAgICBpZiAodGV4aWQgPT0gMCkKICAgICB7CkBAIC0xMjI3LDEyICsxMDU0LDcgQEAgVGV4dHVy
ZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIGdldFRleHR1cmUodGV4aWQpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6
Z2V0RnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUuZnJh
bWVidWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxl
cl0uZ2V0KCk7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBH
TGJvb2xlYW4gKnBhcmFtcykKQEAgLTEyODMsNyArMTEwNSw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0
RmxvYXR2KEdMZW51bSBwbmFtZSwgR0wKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0FM
SUFTRURfUE9JTlRfU0laRV9SQU5HRToKICAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURf
UE9JTlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX1BP
SU5UX1NJWkVfUkFOR0VfTUFYOworICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0c1NoYWRlck1v
ZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDogZ2w6OkFMSUFT
RURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2Ug
R0xfREVQVEhfUkFOR0U6CiAgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVhcjsKQEAgLTEz
MjYsMTMgKzExNDgsMTMgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUs
IAogICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFt
cyA9IGdsOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9SRU5ERVJCVUZGRVJfU0laRTsgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTlVN
X1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTOiAvKiBubyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAg
ICBicmVhazsKICAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5v
IHNoYWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5hcnJheUJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlcjsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQklORElORzogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVidWZmZXI7
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklO
RElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpw
YXJhbXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOworICAg
ICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAvLyBub3cgZXF1
aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKKyAgICAgIGNhc2Ug
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
cmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFQURf
RlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1l
YnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJf
QklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzYzLDgg
KzExODUsNjMgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAg
ICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdM
X01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhU
VVJFX1NJWkU7ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQX1RFWFRV
UkVfU0laRTsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBhdCBjdXJyZW50LCBvbmx5IEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQgYW5kIAorICAgICAgICAgICAgICAgIC8vIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIGFyZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNh
bXBsZXMoKTsKKyAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCisgICAgICBjYXNl
IEdMX1NBTVBMRVM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1
ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVTOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZm
ZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBh
cmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgpAQCAtMTM3NCw2ICsxMjUxLDE1IEBAIGJvb2wg
Q29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgIHBhcmFtc1sx
XSA9IG1heERpbWVuc2lvbjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHBhcmFtc1swXSA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7CisgICAg
ICAgICAgICAgICAgcGFyYW1zWzFdID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdM
X1ZJRVdQT1JUOgogICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwogICAgICAg
ICBwYXJhbXNbMV0gPSBtU3RhdGUudmlld3BvcnRZOwpAQCAtMTM5Myw3ICsxMjc5LDcgQEAgYm9v
bCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9CTFVF
X0JJVFM6CiAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6CiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigp
OwogICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpOwogCiAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCkBAIC0x
NDE0LDggKzEzMDAsOCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwg
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgogICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIo
KTsKLSAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5j
aWxidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CiAK
ICAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICAgICAgICAgIHsKQEAgLTE0MjksOCAr
MTMxNSw4IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7Ci0g
ICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RGVwdGhTdGVu
Y2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KTsKIAogICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCiAgICAgICAgICAgICB7CkBAIC0x
NDUwLDcgKzEzMzYsNyBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwg
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfMkRdW21TdGF0ZS5h
Y3RpdmVTYW1wbGVyXTsKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1
cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKQEAg
LTE0NjEsNyArMTM0Nyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1l
LCAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3Rh
dGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJU
ZXh0dXJlW1NBTVBMRVJfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgpAQCAtMTU1Miw2ICsxNDM4LDE5IEBA
IGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfU0FNUExFU19BTkdMRToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICp0eXBl
ID0gR0xfSU5UOworICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBl
ID0gR0xfSU5UOwpAQCAtMTYyNiw3ICsxNTI1LDcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRl
clRhcmdldChib29sIGlnbgogewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERl
dmljZSgpOwogCi0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVi
dWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJh
bWVidWZmZXIoKTsKIAogICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJP
YmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsK
QEAgLTE2MzYsMjAgKzE1MzUsMzUgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChi
b29sIGlnbgogICAgIH0KIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKIAogICAgIHVuc2ln
bmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJl
bmRlclRhcmdldFNlcmlhbCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0
KDAsIHJlbmRlclRhcmdldCk7CiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0g
cmVuZGVyVGFyZ2V0U2VyaWFsOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAv
LyBTY2lzc29yIGFyZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0g
dGhpcyBpcyBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KKyAgICB9CisK
KyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdl
dERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5j
aWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERl
cHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
RGVwdGhidWZmZXJTZXJpYWwoKTsKLSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxp
ZWREZXB0aGJ1ZmZlclNlcmlhbCkKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxp
ZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAorICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1B
cHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0RGVw
dGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwogICAgICAgICBtQXBwbGllZERlcHRoYnVm
ZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CiAgICAgfQogCiAgICAgRDNEVklFV1BP
UlQ5IHZpZXdwb3J0OwpAQCAtMTY5MCw3ICsxNjA0LDggQEAgYm9vbCBDb250ZXh0OjphcHBseVJl
bmRlclRhcmdldChib29sIGlnbgogICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lz
c29yWSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUu
c2Npc3NvcldpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWSAr
IG1TdGF0ZS5zY2lzc29ySGVpZ2h0fTsKLQorICAgICAgICAgICAgcmVjdC5yaWdodCA9IHN0ZDo6
bWluKHN0YXRpY19jYXN0PFVJTlQ+KHJlY3QucmlnaHQpLCBkZXNjLldpZHRoKTsKKyAgICAgICAg
ICAgIHJlY3QuYm90dG9tID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8VUlOVD4ocmVjdC5ib3R0b20p
LCBkZXNjLkhlaWdodCk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0
KTsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RF
TkFCTEUsIFRSVUUpOwogICAgICAgICB9CkBAIC0xNjk4LDcgKzE2MTMsNyBAQCBib29sIENvbnRl
eHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHsKICAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsK
ICAgICB9CiAKQEAgLTE3MTAsNyArMTYyNSw3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJU
YXJnZXQoYm9vbCBpZ24KICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQu
V2lkdGgsIDEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwogICAgICAgICBwcm9ncmFtT2JqZWN0LT5z
ZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIChHTGZsb2F0KikmeHkpOwogCi0gICAgICAg
IEdMaW50IHdpbmRvdyA9IHByb2dyYW1PYmplY3QtPmdldER4V2luZG93TG9jYXRpb24oKTsKKyAg
ICAgICAgR0xpbnQgd2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhWaWV3cG9ydExvY2F0aW9u
KCk7CiAgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIu
MGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4w
ZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRZICsg
bVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07CkBAIC0xNzQ4LDYgKzE2NjMsOCBAQCB2b2lk
IENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgR0xpbnQgYWx3YXlzRnJv
bnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwogICAgIHByb2dyYW1PYmplY3QtPnNldFVu
aWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAorICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCiAgICAgaWYg
KG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCiAgICAgewogICAgICAgICBpZiAo
bVN0YXRlLmN1bGxGYWNlKQpAQCAtMTc2NCw3ICsxNjgxLDcgQEAgdm9pZCBDb250ZXh0OjphcHBs
eVN0YXRlKEdMZW51bSBkcmF3TW9kZQogCiAgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpCiAgICAg
ewotICAgICAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCkKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0
aFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05P
TkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkVOQUJMRSwgRDNEWkJfVFJVRSk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykp
OwpAQCAtMTgyNiw3ICsxNzQzLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBk
cmF3TW9kZQogCiAgICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkp
CiAgICAgewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGhhc1N0ZW5jaWwoKSkK
KyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+aGFz
U3RlbmNpbCgpKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKQEAgLTE4NDQsOCArMTc2
MSw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5j
aWwgcmVmCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJh
bWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVy
ID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0
aFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVu
Y2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7CiAKICAgICAgICAgICAgIGRldmljZS0+
U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lM
V1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3Jp
dGVtYXNrKTsKQEAgLTE4OTcsNyArMTgxMyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShH
TGVudW0gZHJhd01vZGUKICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZp
bGwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIg
PSBnZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRl
cHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVw
dGhidWZmZXIoKTsKICAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVE
RVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKQEAgLTE5
MTQsNyArMTgzMCw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUK
ICAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7CiAgICAgfQogCi0gICAg
aWYgKG1Db25maWctPm1NdWx0aVNhbXBsZSAhPSAwICYmIG1TYW1wbGVTdGF0ZURpcnR5KQorICAg
IGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aXNNdWx0aXNhbXBsZSgpICYmIG1TYW1wbGVTdGF0ZURp
cnR5KQogICAgIHsKICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCiAg
ICAgICAgIHsKQEAgLTE5MjMsNyArMTgzOSwzNCBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUo
R0xlbnVtIGRyYXdNb2RlCiAKICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKICAg
ICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVu
dGVkLiIpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRUFOVElBTElBUywgVFJVRSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7
CisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVmOworCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2Ft
cGxlcygpOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYXNr
IDw8PSAxOworCisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgKz0gMS4wZjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hc2sgfD0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZUludmVydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXNr
ID0gfm1hc2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
TVVMVElTQU1QTEVBTlRJQUxJQVMsIEZBTFNFKTsKICAgICAgICAgfQogCiAgICAgICAgIG1TYW1w
bGVTdGF0ZURpcnR5ID0gZmFsc2U7CkBAIC0yMDA1LDcgKzE5NDgsNyBAQCBHTGVudW0gQ29udGV4
dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoY29uc3QgCiAvLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBl
bGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQogR0xlbnVtIENv
bnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pCiB7Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxp
ZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwgZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIpLCBpbmRpY2VzLCBpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFu
YWdlci0+cHJlUmVuZGVyVmFsaWRhdGUobW9kZSwgdHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50
QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7CiAKICAgICBpZiAoZXJyID09
IEdMX05PX0VSUk9SKQogICAgIHsKQEAgLTIwOTIsNyArMjAzNSwxOCBAQCB2b2lkIENvbnRleHQ6
OmFwcGx5VGV4dHVyZXMoKQogCiB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
Z2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFk
RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmIChnZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgfQorCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVy
LT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKIApAQCAtMjE1NSw2ICsyMTA5LDE5IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCAKIAogICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20g
LSByZWN0LnRvcDsgaisrKQogICAgIHsKKyAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZN
VF9BOFI4RzhCOCAmJgorICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAg
ICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCisgICAgICAgICAg
ICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCisg
ICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCisgICAg
ICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAg
ICBzb3VyY2UgKyBqICogbG9jay5QaXRjaCwKKyAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdo
dCAtIHJlY3QubGVmdCkgKiA0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKysp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGZsb2F0IHI7CkBAIC0yMjQzLDYgKzIyMTAsNDYgQEAg
dm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVz
dFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIg
KyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRj
aCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzRfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBk
ZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0
aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93
czoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAg
ICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAg
ICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg
ICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8ICAgICAg
ICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAorICAgICAgICAgICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhl
IGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25k
LCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1
dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAorICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwg
NCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsg
MC41ZikgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6CisgICAgICAgICAgICAg
ICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNm
ZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB0
aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIC8vICAg
MTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0
ICAgIDMgICAgMiAgICAxICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3Jk
ICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQg
ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBm
aXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAg
ICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9y
dCldID0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSAr
IDAuNWYpIDw8IDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
IGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUCiAgICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICAgICAgIHsKQEAgLTIyNjcsNyAr
MjI3NCw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCAKIAogdm9p
ZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAgIGlmICghZnJhbWVi
dWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKQEAgLTIyOTksMjIgKzIzMDYsMjQgQEAgdm9pZCBD
b250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERl
cHRoU3RlbmNpbCgpOwotCiAgICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKIAotICAg
IGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZGVwdGhTdGVuY2lsKQorICAg
IGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgRDNEU1VS
RkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7Ci0K
ICAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICB1bnNpZ25l
ZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwot
ICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAg
ICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCisgICAgICAgIGlmIChmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOworCisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUo
ZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVu
Y2lsU2l6ZSkgLSAxOworCisgICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lM
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjE4LDcgKzI2MjcsOCBA
QCB2b2lkIENvbnRleHQ6OmZpbmlzaCgpCiAgICAgICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICpz
YXZlZFN0YXRlID0gTlVMTDsKICAgICAgICAgZGV2aWNlLT5DcmVhdGVTdGF0ZUJsb2NrKEQzRFNC
VF9BTEwsICZzYXZlZFN0YXRlKTsKIAotICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNE
SVNTVUVfQkVHSU4pOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG9jY2x1c2lvblF1ZXJ5LT5J
c3N1ZShEM0RJU1NVRV9CRUdJTik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CiAKICAgICAgICAgLy8gUmVuZGVyIHNvbWV0aGluZyBvdXRzaWRlIHRoZSByZW5kZXIgdGFyZ2V0
CiAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKQEAgLTI2MjksNyAr
MjYzOSw4IEBAIHZvaWQgQ29udGV4dDo6ZmluaXNoKCkKICAgICAgICAgZGlzcGxheS0+c3RhcnRT
Y2VuZSgpOwogICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9QT0lOVExJU1Qs
IDEsIGRhdGEsIHNpemVvZihkYXRhKSk7CiAKLSAgICAgICAgb2NjbHVzaW9uUXVlcnktPklzc3Vl
KEQzRElTU1VFX0VORCk7CisgICAgICAgIHJlc3VsdCA9IG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShE
M0RJU1NVRV9FTkQpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAg
ICAgIHdoaWxlIChvY2NsdXNpb25RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZM
VVNIKSA9PSBTX0ZBTFNFKQogICAgICAgICB7CkBAIC0yNjYzLDE1ICsyNjc0LDE2IEBAIHZvaWQg
Q29udGV4dDo6Zmx1c2goKQogCiAgICAgaWYgKGV2ZW50UXVlcnkpCiAgICAgewotICAgICAgICBl
dmVudFF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGV2ZW50UXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgcmVzdWx0ID0gZXZlbnRRdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKyAgICAgICAgZXZlbnRRdWVyeS0+UmVsZWFzZSgpOwog
Ci0gICAgICAgIHdoaWxlIChldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFf
RkxVU0gpID09IFNfRkFMU0UpCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxP
U1QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90
aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAotICAgICAgICAgICAgU2xl
ZXAoMCk7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQot
Ci0gICAgICAgIGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKICAgICB9CiB9CiAKQEAgLTI3NDIsMTQg
KzI3NTQsNDMgQEAgR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKICAgICByZXR1cm4gR0xfTk9f
RVJST1I7CiB9CiAKLWNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldFBpeGVsU2hhZGVyUHJvZmlsZSgp
Citib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9y
dGVkU2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwor
fQorCitpbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZv
cm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVBzUHJvZmlsZTsKKyAg
ICBpZiAocmVxdWVzdGVkID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVzdGVkOwor
ICAgIH0KKworICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3Ig
aXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0ciA9PSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKworICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZf
U0FNUExFUzsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0g
RDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQogCi1jb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCkKK2Jvb2wgQ29udGV4dDo6c3VwcG9y
dHNDb21wcmVzc2VkVGV4dHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtVnNQcm9maWxlOwor
ICAgIHJldHVybiBtU3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXM7CiB9CiAKIHZvaWQgQ29udGV4
dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCkBAIC0yNzU4LDIxICsyNzk5LDIxIEBAIHZv
aWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIKICAgICAvLyBJZiBhIGJ1ZmZl
ciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRo
YXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQKICAgICAvLyAoaS5lLiBpbiB0aGUgdGhy
ZWFkIHRoYXQgY2FsbGVkIERlbGV0ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8gemVyby4KIAotICAg
IGlmIChtU3RhdGUuYXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIGlmIChtU3RhdGUuYXJyYXlC
dWZmZXIuaWQoKSA9PSBidWZmZXIpCiAgICAgewotICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIg
PSAwOworICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAg
IGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICBpZiAobVN0YXRl
LmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLnNldChOVUxMKTsKICAgICB9CiAKICAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRy
aWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQogICAgIHsKLSAgICAgICAg
aWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIgPT0gYnVm
ZmVyKQorICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlciA9IDA7CisgICAgICAgICAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3ODcsOSArMjgyOCw5IEBAIHZvaWQgQ29udGV4dDo6
ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHUKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBs
ZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1w
bGVyXSA9PSB0ZXh0dXJlKQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0
eXBlXVtzYW1wbGVyXS5pZCgpID09IHRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAg
ICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc5OSwxMSArMjg0MCwxNyBAQCB2
b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1CiAgICAgLy8gYXMgaWYgRnJh
bWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBm
b3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKICAgICAvLyBpbWFnZSB3YXMg
YXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAgIEZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIg
KnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVy
ICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIGlmIChmcmFt
ZWJ1ZmZlcikKKyAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQogICAgIHsKLSAgICAgICAgZnJhbWVi
dWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7CisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+
ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVy
ICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBk
cmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0y
ODEzLDkgKzI4NjAsMTQgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQg
ZgogICAgIC8vIElmIGEgZnJhbWVidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhl
IHRhcmdldCBGUkFNRUJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKICAgICAvLyBC
aW5kRnJhbWVidWZmZXIgaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1F
QlVGRkVSIGFuZCBmcmFtZWJ1ZmZlciBvZiB6ZXJvLgogCi0gICAgaWYgKG1TdGF0ZS5mcmFtZWJ1
ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBm
cmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7CisgICAg
fQorCisgICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCiAgICAg
ewotICAgICAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAgICAgIGJpbmREcmF3RnJhbWVidWZm
ZXIoMCk7CiAgICAgfQogfQogCkBAIC0yODI1LDcgKzI4NzcsNyBAQCB2b2lkIENvbnRleHQ6OmRl
dGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgCiAgICAgLy8gSWYgYSByZW5kZXJidWZmZXIgdGhhdCBp
cyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRo
b3VnaCBCaW5kUmVuZGVyYnVmZmVyCiAgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUg
dGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgogCi0gICAgaWYgKG1TdGF0ZS5y
ZW5kZXJidWZmZXIgPT0gcmVuZGVyYnVmZmVyKQorICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVy
LmlkKCkgPT0gcmVuZGVyYnVmZmVyKQogICAgIHsKICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigw
KTsKICAgICB9CkBAIC0yODM1LDExICsyODg3LDE3IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVu
ZGVyYnVmZmVyKEdMdWludCAKICAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3Ig
ZWFjaCBhdHRhY2htZW50CiAgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0
YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKnJl
YWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpk
cmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChyZWFkRnJh
bWVidWZmZXIpCisgICAgeworICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1
ZmZlcihyZW5kZXJidWZmZXIpOworICAgIH0KIAotICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICBp
ZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIp
CiAgICAgewotICAgICAgICBmcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlcik7CisgICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRl
cmJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yODU5LDcgKzI5MTcsNyBAQCBUZXh0dXJlICpDb250
ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBjYXNlIFNBTVBMRVJfMkQ6
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQg
PSBuZXcgVGV4dHVyZTJEKHRoaXMpOworICAgICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21w
bGV0ZTJkID0gbmV3IFRleHR1cmUyRChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwog
ICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgR0xfUkdCQSwgMSwgMSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQg
PSBpbmNvbXBsZXRlMmQ7CiAgICAgICAgICAgICB9CkBAIC0yODY3LDcgKzI5MjUsNyBAQCBUZXh0
dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBjYXNlIFNB
TVBMRVJfQ1VCRToKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAg
KmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAgICAgICAgICAg
ICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAoVGV4
dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKIAogICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VQb3NYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIDEsIGNvbG9yKTsKICAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdl
TmVnWCgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xv
cik7CkBAIC0yOTExLDIzICsyOTY5LDYgQEAgYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShH
TGVudW0gZHJhdwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBDb250ZXh0OjpoYXNTdGVu
Y2lsKCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0KQotICAgIHsKLSAgICAgICAgU3Rl
bmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
U2l6ZSgpID4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
dm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0
ICp2YWx1ZXMpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7
CkBAIC0yOTQyLDYgKzI5ODMsMjIgQEAgdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1
aW50IGluZAogCiB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogeworICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7CisgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOworICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CisKKyAgICBpZiAoc3VwcG9ydHND
b21wcmVzc2VkVGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKKyAgICB9CisKKyAgICBpZiAoZ2V0
TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAiOworICAgIH0KKwogICAg
IGlmIChtQnVmZmVyQmFja0VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKICAgICB7CiAgICAgICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsKQEAgLTI5
NTksMTMgKzMwMTYsMjg1IEBAIGNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmlu
ZygKICAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwogfQogCit2b2lkIENvbnRl
eHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gx
LCBHTGludCBzcmNZMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RY
MCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZm
ZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVm
ZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8
fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFIHx8CisgICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21w
bGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgfQorCisg
ICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIFJFQ1Qg
c291cmNlUmVjdDsKKyAgICBSRUNUIGRlc3RSZWN0OworCisgICAgaWYgKHNyY1gwIDwgc3JjWDEp
CisgICAgeworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKKyAgICAgICAgc291cmNl
UmVjdC5yaWdodCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7CisgICAg
ICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0
WDE7CisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKKyAgICAgICAgZGVzdFJlY3Qu
cmlnaHQgPSBkc3RYMDsKKyAgICB9CisKKyAgICAvLyBBcmd1bWVudHMgdG8gU3RyZXRjaFJlY3Qg
bXVzdCBiZSBpbiBEM0Qtc3R5bGUgKDAtdG9wKSBjb29yZGluYXRlcywgc28gd2UgbXVzdCAKKyAg
ICAvLyBmbGlwIG91ciBZLXZhbHVlcyBoZXJlCisgICAgaWYgKHNyY1kwIDwgc3JjWTEpCisgICAg
eworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kxOworICAgICAgICBkZXN0UmVjdC5i
b3R0b20gPSBkc3RZMTsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMDsKKyAgICAgICAg
ZGVzdFJlY3QudG9wID0gZHN0WTA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkw
OworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kxOworICAgICAgICBkZXN0UmVjdC50b3Ag
PSBkc3RZMTsKKyAgICB9CisKKyAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VS
ZWN0OworICAgIFJFQ1QgZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKKworICAgIGlmICht
U3RhdGUuc2Npc3NvclRlc3QpCisgICAgeworICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRz
IG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRl
c3QKKyAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0
eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCogb2YgdGhlCisgICAgICAgIC8vIHJlY3Qgd2ls
bCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3NvclksIHJhdGhlciB0aGFuIHRoZSBib3R0b20uCisg
ICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgeERpZmYgPSBtU3RhdGUuc2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0Owor
ICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKKyAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5z
Y2lzc29yV2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0
LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOworICAgICAg
ICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUu
c2Npc3NvcldpZHRoOworICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4
RGlmZjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Np
c3NvclkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29y
WSAtIGRlc3RSZWN0LnRvcDsKKyAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1T
dGF0ZS5zY2lzc29yWTsKKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlE
aWZmOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5z
Y2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBp
bnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20gLSAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNj
aXNzb3JIZWlnaHQpOworICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0
YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgICAgICBzb3VyY2VT
Y2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOworICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9
IGZhbHNlOworCisgICAgUkVDVCBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJl
Y3Q7CisgICAgUkVDVCBkZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKKworICAg
IC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8g
YmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCisgICAgLy8gdGhl
IGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2VzLgorICAgIGlmIChzb3VyY2VUcmltbWVkUmVj
dC5sZWZ0IDwgMCkKKyAgICB7CisgICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVk
UmVjdC5sZWZ0OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7CisgICAgfQorCisgICAgaW50IHJlYWRCdWZm
ZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsK
KyAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0SGVpZ2h0KCk7CisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKKyAgICBpbnQgZHJhd0J1ZmZlckhl
aWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7CisK
KyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCisgICAg
eworICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZm
ZXJXaWR0aDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lk
dGg7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKKyAgICB9CisKKyAg
ICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5RGlm
ZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0
LnRvcCA9IDA7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7CisgICAgfQor
CisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCisg
ICAgeworICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFk
QnVmZmVySGVpZ2h0OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVm
ZmVySGVpZ2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAg
IH0KKworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCisgICAgeworICAgICAgICBp
bnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7CisgICAgICAgIGRlc3RUcmltbWVk
UmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsK
KyAgICB9CisKKyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRo
KQorICAgIHsKKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJh
d0J1ZmZlcldpZHRoOworICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVy
V2lkdGg7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOworICAgIH0K
KworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5
RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOworICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
dG9wID0gMDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOworICAgIH0K
KworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKKyAg
ICB7CisgICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVm
ZmVySGVpZ2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhl
aWdodDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgIH0K
KworICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKKyAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSB8fAorICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkRnJhbWVidWZmZXItPmdl
dENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkgfHwgCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5i
b3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1
ZmZlcigpLT5nZXRIZWlnaHQoKSB8fAorICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+
Z2V0V2lkdGgoKSB8fAorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0
VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRl
c3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCisgICAgeworICAgICAgICBwYXJ0aWFsQnVmZmVyQ29w
eSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkg
IT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSB8fAorICAgICAgICAgICAg
cmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0
RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgYmxpdFJl
bmRlclRhcmdldCA9IHRydWU7CisKKyAgICB9CisKKyAgICBpZiAobWFzayAmIChHTF9ERVBUSF9C
VUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKKyAgICB7CisgICAgICAgIERlcHRo
U3RlbmNpbGJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKKyAgICAgICAgRGVwdGhTdGVuY2ls
YnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOworCisgICAgICAgIC8vIFdlIHN1cHBvcnQgT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0
dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQorICAgICAgICAv
LyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1
ZmZlci4KKworICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBk
cmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBibGl0RGVw
dGhTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVy
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAorICAgICAg
ICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNE
Rm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZv
cm1hdCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWFkRFNC
dWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAg
ICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29w
eSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBh
bmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5
IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAorICAgICAgICB9CisKKyAgICAgICAg
aWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwg
CisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygp
ICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQg
fHwgYmxpdERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxh
eSA9IGdldERpc3BsYXkoKTsKKyAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKworICAgICAg
ICBpZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFy
Z2V0KCksICZzb3VyY2VUcmltbWVkUmVjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSwg
JmRlc3RUcmltbWVkUmVjdCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1l
YnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwg
RDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVk
OiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogfQogCiBleHRlcm4g
IkMiCiB7Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIG5l
dyBnbDo6Q29udGV4dChjb25maWcpOworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmln
LCBzaGFyZUNvbnRleHQpOwogfQogCiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gNjY1NDkpCisrKyBB
TkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDgg
QEAKIC8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5n
IGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwogLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0
IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgogCi0j
aWZuZGVmIElOQ0xVREVfQ09OVEVYVF9IXwotI2RlZmluZSBJTkNMVURFX0NPTlRFWFRfSF8KKyNp
Zm5kZWYgTElCR0xFU1YyX0NPTlRFWFRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8K
IAogI2RlZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CkBAIC0xOSw2ICsx
OSw4IEBACiAjaW5jbHVkZSA8bWFwPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1JlZkNvdW50T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBlZ2wKIHsKQEAgLTQwLDkgKzQyLDEx
IEBAIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOwogY2xhc3MgRnJhbWVi
dWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXI7CitjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwog
Y2xhc3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5jaWxidWZm
ZXI7CitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsK
IGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBCdWZmZXJCYWNrRW5kOwpAQCAtNjcsMTUg
KzcxLDggQEAgZW51bQogY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9
IDEuMGY7CiBjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4wZjsK
IGNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwotY29uc3Qg
ZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWCA9IDEuMGY7Ci0KLWVudW0gU2FtcGxl
clR5cGUKLXsKLSAgICBTQU1QTEVSXzJELAotICAgIFNBTVBMRVJfQ1VCRSwKLQotICAgIFNBTVBM
RVJfVFlQRV9DT1VOVAotfTsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
QVhfU00yID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhf
U00zID0gNjQuMGY7CiAKIHN0cnVjdCBDb2xvcgogewpAQCAtOTAsNyArODcsNyBAQCBjbGFzcyBB
dHRyaWJ1dGVTdGF0ZQogewogICBwdWJsaWM6CiAgICAgQXR0cmlidXRlU3RhdGUoKQotICAgICAg
ICA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlk
ZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1Cb3VuZEJ1ZmZlcigwKSwgbUVuYWJsZWQoZmFsc2UpCisg
ICAgICAgIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBt
U3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUVuYWJsZWQoZmFsc2UpCiAgICAgewogICAgICAg
ICBtQ3VycmVudFZhbHVlWzBdID0gMDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7CkBA
IC0xMDUsNyArMTAyLDcgQEAgY2xhc3MgQXR0cmlidXRlU3RhdGUKICAgICBHTHNpemVpIG1TdHJp
ZGU7IC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsK
IAotICAgIEdMdWludCBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQ
b2ludGVyIGlzIGNhbGxlZC4KKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZl
cjsgLy8gQ2FwdHVyZWQgd2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIgaXMgY2FsbGVkLgogCiAgICAg
Ym9vbCBtRW5hYmxlZDsgLy8gRnJvbSBFbmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5CiAK
QEAgLTE4MCwxNiArMTc3LDE3IEBAIHN0cnVjdCBTdGF0ZQogICAgIGJvb2wgZGVwdGhNYXNrOwog
CiAgICAgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBzZWxlY3Rv
ciAtIEdMX1RFWFRVUkUwCi0gICAgR0x1aW50IGFycmF5QnVmZmVyOwotICAgIEdMdWludCBlbGVt
ZW50QXJyYXlCdWZmZXI7Ci0gICAgR0x1aW50IHRleHR1cmUyRDsKLSAgICBHTHVpbnQgdGV4dHVy
ZUN1YmVNYXA7Ci0gICAgR0x1aW50IGZyYW1lYnVmZmVyOwotICAgIEdMdWludCByZW5kZXJidWZm
ZXI7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKKyAgICBCaW5kaW5n
UG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlPiB0ZXh0dXJlMkQ7CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gdGV4dHVyZUN1
YmVNYXA7CisgICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQgZHJhd0ZyYW1l
YnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOwog
ICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKIAogICAgIEF0dHJpYnV0ZVN0YXRlIHZlcnRleEF0
dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMdWludCBzYW1wbGVyVGV4dHVyZVtT
QU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKICAgICBH
TGludCBwYWNrQWxpZ25tZW50OwpAQCAtMTk4LDcgKzE5Niw3IEBAIHN0cnVjdCBTdGF0ZQogY2xh
c3MgQ29udGV4dAogewogICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAq
Y29uZmlnKTsKKyAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwogCiAgICAgfkNvbnRleHQoKTsKIApAQCAtMjc2LDE0
ICsyNzQsMTUgQEAgY2xhc3MgQ29udGV4dAogCiAgICAgdm9pZCBzZXRBY3RpdmVTYW1wbGVyKGlu
dCBhY3RpdmUpOwogCi0gICAgR0x1aW50IGdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3Q7Cisg
ICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBn
ZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0UmVuZGVyYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBj
b25zdDsKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtLCBib29sIGVuYWJsZWQpOwogICAgIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZnZXRWZXJ0
ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKLSAgICB2b2lkIHNldFZlcnRl
eEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwg
R0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBH
TGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXpl
ZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQg
KmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAK
QEAgLTI5NSwzMyArMjk0LDM2IEBAIGNsYXNzIENvbnRleHQKICAgICB2b2lkIHNldFBhY2tBbGln
bm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29u
c3Q7CiAKKyAgICAvLyBUaGVzZSBjcmVhdGUgIGFuZCBkZXN0cm95IG1ldGhvZHMgYXJlIG1lcmVs
eSBwYXNzLXRocm91Z2hzIHRvIAorICAgIC8vIFJlc291cmNlTWFuYWdlciwgd2hpY2ggb3ducyB0
aGVzZSBvYmplY3QgdHlwZXMKICAgICBHTHVpbnQgY3JlYXRlQnVmZmVyKCk7CiAgICAgR0x1aW50
IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwotICAgIEdMdWludCBjcmVhdGVGcmFtZWJ1ZmZl
cigpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKIAogICAgIHZvaWQgZGVsZXRl
QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFk
ZXIpOwogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBk
ZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CiAKKyAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBD
b250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKKyAgICBHTHVpbnQg
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBm
cmFtZWJ1ZmZlcik7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsK
ICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9p
ZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGJpbmRUZXh0dXJlQ3Vi
ZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVm
ZmVyKTsKKyAgICB2b2lkIGJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsK
ICAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CiAgICAgdm9p
ZCB1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKIAogICAgIHZvaWQgc2V0RnJhbWVidWZmZXJa
ZXJvKEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRDb2xvcmJ1ZmZlclpl
cm8oQ29sb3JidWZmZXIgKnJlbmRlcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1ZmZlclpl
cm8oRGVwdGhidWZmZXIgKmRlcHRoQnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXJa
ZXJvKFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxCdWZmZXIpOwotICAgIHZvaWQgc2V0UmVuZGVyYnVm
ZmVyKFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0UmVuZGVyYnVm
ZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpOwogCiAgICAgdm9p
ZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpOwog
CkBAIC0zMzEsOSArMzMzLDYgQEAgY2xhc3MgQ29udGV4dAogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWlu
dCBoYW5kbGUpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5k
bGUpOwotICAgIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAg
ICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgU3RlbmNp
bGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKIAogICAgIEJ1ZmZlciAq
Z2V0QXJyYXlCdWZmZXIoKTsKICAgICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwpA
QCAtMzQxLDcgKzM0MCw4IEBAIGNsYXNzIENvbnRleHQKICAgICBUZXh0dXJlMkQgKmdldFRleHR1
cmUyRCgpOwogICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgIFRl
eHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1wbGVyVHlw
ZSB0eXBlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1
ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFt
ZWJ1ZmZlcigpOwogCiAgICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpw
YXJhbXMpOwogICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1z
KTsKQEAgLTM3MywxMCArMzczLDE1IEBAIGNsYXNzIENvbnRleHQKIAogICAgIEdMZW51bSBnZXRF
cnJvcigpOwogCi0gICAgY29uc3QgY2hhciAqZ2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7Ci0gICAg
Y29uc3QgY2hhciAqZ2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpOwotCisgICAgYm9vbCBzdXBwb3J0
c1NoYWRlck1vZGVsMygpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxl
cygpIGNvbnN0OworICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQg
Zm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpnZXRFeHRlbnNp
b25TdHJpbmcoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkg
Y29uc3Q7CisKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3Jj
WTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKIAogICAgIEJsaXQgKmdldEJs
aXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQogCkBAIC0zOTYsNyArNDAxLDYgQEAgY2xhc3MgQ29u
dGV4dAogCiAgICAgYm9vbCBjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSk7CiAgICAgYm9v
bCBpc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpOwotICAgIGJvb2wgaGFzU3RlbmNpbCgp
OwogCiAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbnN0IG1Db25maWc7CiAKQEAgLTQwNiwyNyAr
NDEwLDExIEBAIGNsYXNzIENvbnRleHQKICAgICBUZXh0dXJlQ3ViZU1hcCAqbVRleHR1cmVDdWJl
TWFwWmVybzsKIAogICAgIENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJvOwotICAgIERlcHRo
YnVmZmVyICptRGVwdGhidWZmZXJaZXJvOwotICAgIFN0ZW5jaWxidWZmZXIgKm1TdGVuY2lsYnVm
ZmVyWmVybzsKLQotICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJN
YXA7Ci0gICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdM
dWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwotCi0g
ICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwotICAgIFBy
b2dyYW1NYXAgbVByb2dyYW1NYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgVGV4
dHVyZSo+IFRleHR1cmVNYXA7Ci0gICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKyAgICBEZXB0
aFN0ZW5jaWxidWZmZXIgKm1EZXB0aFN0ZW5jaWxidWZmZXJaZXJvOwogCiAgICAgdHlwZWRlZiBz
dGQ6Om1hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVi
dWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwogCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQs
IFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJl
bmRlcmJ1ZmZlck1hcDsKLQogICAgIHZvaWQgaW5pdEV4dGVuc2lvblN0cmluZygpOwogICAgIHN0
ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7CiAKQEAgLTQzNSw3ICs0MjMsNyBAQCBjbGFzcyBD
b250ZXh0CiAgICAgSW5kZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1hbmFnZXI7CiAKICAgICBC
bGl0ICptQmxpdDsKLQorICAgIAogICAgIFRleHR1cmUgKm1JbmNvbXBsZXRlVGV4dHVyZXNbU0FN
UExFUl9UWVBFX0NPVU5UXTsKIAogICAgIC8vIFJlY29yZGVkIGVycm9ycwpAQCAtNDUwLDkgKzQz
OCwxMiBAQCBjbGFzcyBDb250ZXh0CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbTsK
ICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CiAgICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBs
aWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsKIAotICAgIGNvbnN0IGNoYXIgKm1Qc1Byb2ZpbGU7Ci0g
ICAgY29uc3QgY2hhciAqbVZzUHJvZmlsZTsKKyAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVs
MzsKKyAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsK
KyAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIGJvb2wgbVN1cHBvcnRzQ29t
cHJlc3NlZFRleHR1cmVzOwogCiAgICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncwogICAgIGJvb2wg
bUNsZWFyU3RhdGVEaXJ0eTsKQEAgLTQ3MSwxMyArNDYyLDE1IEBAIGNsYXNzIENvbnRleHQKICAg
ICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKIAogICAgIEQz
RENBUFM5IG1EZXZpY2VDYXBzOworCisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5h
Z2VyOwogfTsKIH0KIAogZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1
c2UgYnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcpOworZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KTsKIHZvaWQgZ2xEZXN0
cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CiB2b2lkIGdsTWFrZUN1cnJlbnQoZ2w6
OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpz
dXJmYWNlKTsKIGdsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCk7CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMv
bGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsODUgKzE2LDEw
OSBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKKwogRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKCkKIHsK
ICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtQ29sb3JidWZmZXJIYW5kbGUg
PSAwOwotCiAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbURlcHRoYnVmZmVy
SGFuZGxlID0gMDsKLQogICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbVN0
ZW5jaWxidWZmZXJIYW5kbGUgPSAwOwogfQogCiBGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkK
IHsKKyAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtRGVwdGhidWZmZXJQ
b2ludGVyLnNldChOVUxMKTsKKyAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwor
fQorCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVt
IHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Q29udGV4dCgpOworICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKwor
ICAgIGlmICh0eXBlID09IEdMX05PTkUpCisgICAgeworICAgICAgICBidWZmZXIgPSBOVUxMOwor
ICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7CisgICAg
ICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworICAgIH0KKyAg
ICBlbHNlIGlmIChJc1RleHR1cmVUYXJnZXQodHlwZSkpCisgICAgeworICAgICAgICBidWZmZXIg
PSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldENvbG9yYnVmZmVyKHR5cGUpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBidWZmZXI7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdM
ZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCiB7CiAgICAgbUNvbG9yYnVmZmVyVHlwZSA9
IHR5cGU7Ci0gICAgbUNvbG9yYnVmZmVySGFuZGxlID0gY29sb3JidWZmZXI7CisgICAgbUNvbG9y
YnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7
CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgZGVwdGhidWZmZXIpCiB7CiAgICAgbURlcHRoYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbURl
cHRoYnVmZmVySGFuZGxlID0gZGVwdGhidWZmZXI7CisgICAgbURlcHRoYnVmZmVyUG9pbnRlci5z
ZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7CiB9CiAKIHZvaWQgRnJh
bWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVm
ZmVyKQogewogICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbVN0ZW5jaWxidWZm
ZXJIYW5kbGUgPSBzdGVuY2lsYnVmZmVyOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQo
bG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIpKTsKIH0KIAogdm9pZCBGcmFt
ZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKIHsKLSAgICBpZiAobUNvbG9y
YnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5
cGUpKQorICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc1Rl
eHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAgICAgewogICAgICAgICBtQ29sb3JidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICAg
ICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1EZXB0
aGJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJU
eXBlKSkKKyAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNU
ZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgIHsKICAgICAgICAgbURlcHRoYnVm
ZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7CisgICAg
ICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3Rl
bmNpbGJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1
ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJl
ICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgIHsKICAgICAgICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJIYW5k
bGUgPSAwOworICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIH0K
IH0KIAogdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJi
dWZmZXIpCiB7Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlckhhbmRsZSA9PSByZW5kZXJidWZmZXIgJiYg
bUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1Db2xvcmJ1ZmZl
clBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCiAgICAgewogICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsK
LSAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbUNvbG9yYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRsZSA9PSBy
ZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVm
ZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgewogICAgICAgICBtRGVwdGhidWZmZXJU
eXBlID0gR0xfTk9ORTsKLSAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAg
bURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2ls
YnVmZmVySGFuZGxlID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xf
UkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5k
ZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7
CiAgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2ls
YnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKICAgICB9CiB9CiAKIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKCkKIHsKLSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZm
ZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRl
ci5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1ZmZlcikKICAgICB7CkBAIC0xMDYsNyArMTMwLDcg
QEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogCiBJRGlyZWN0M0RT
dXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgUmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKICAgICBpZiAoY29sb3Ji
dWZmZXIpCiAgICAgewpAQCAtMTE2LDEwICsxNDAsMjYgQEAgSURpcmVjdDNEU3VyZmFjZTkgKkZy
YW1lYnVmZmVyOjpnZXRSZW5kZQogICAgIHJldHVybiBOVUxMOwogfQogCitJRGlyZWN0M0RTdXJm
YWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIAor
ICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQorICAgIHsKKyAgICAgICAgZGVwdGhzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIH0KKworICAgIGlmIChk
ZXB0aHN0ZW5jaWxidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhzdGVuY2lsYnVm
ZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwog
dW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCiB7Ci0gICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIERlcHRoYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRs
ZSk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIu
Z2V0KCk7CiAKICAgICBpZiAoZGVwdGhidWZmZXIpCiAgICAgewpAQCAtMTI5LDcwICsxNjksNTgg
QEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcgogICAgIHJldHVybiAw
OwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgp
Cit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKQogewot
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBEZXB0aGJ1
ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJI
YW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVy
UG9pbnRlci5nZXQoKTsKIAotICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICBpZiAoc3RlbmNpbGJ1
ZmZlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gMDsKIH0KIAogQ29sb3JidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRDb2xvcmJ1ZmZlcigpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Q29udGV4dCgpOwotICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IE5VTEw7Cisg
ICAgUmVuZGVyYnVmZmVyICpyYiA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBp
ZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9OT05FKQorICAgIGlmIChyYiAhPSBOVUxMICYmIHJi
LT5pc0NvbG9yYnVmZmVyKCkpCiAgICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICBjb2xvcmJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Db2xvcmJ1ZmZlclR5
cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgY29sb3JidWZmZXIgPSBjb250
ZXh0LT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3JidWZmZXJIYW5kbGUpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q29sb3JidWZmZXIqPihyYi0+Z2V0U3RvcmFnZSgpKTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKG1D
b2xvcmJ1ZmZlckhhbmRsZSktPmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlclR5cGUpOwotICAg
IH0KLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyOworICAgICAgICByZXR1cm4gTlVM
TDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAotRGVwdGhidWZmZXIgKkZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXREZXB0aGJ1ZmZlcigpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOwotICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRo
YnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpyYiA9IG1EZXB0
aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgZGVwdGhidWZm
ZXItPmlzRGVwdGhidWZmZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNEZXB0aGJ1
ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGVwdGhTdGVuY2lsYnVmZmVyKj4ocmItPmdldFN0b3JhZ2UoKSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAg
IHJldHVybiBOVUxMOwogfQogCi1TdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVm
ZmVyKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0g
ICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZm
ZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqcmIgPSBtU3RlbmNp
bGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBzdGVuY2ls
YnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNT
dGVuY2lsYnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlcjsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERlcHRoU3RlbmNpbGJ1ZmZlcio+KHJiLT5nZXRTdG9y
YWdlKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xv
cmJ1ZmZlclR5cGUoKQpAQCAtMjEyLDI1ICsyNDAsNTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXRTdGVuY2lsYnVmZmVyVHlwZQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVy
SGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVySGFuZGxlOworICAgIHJldHVybiBt
Q29sb3JidWZmZXJQb2ludGVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKQogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJIYW5kbGU7CisgICAg
cmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJI
YW5kbGU7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpOwogfQogCi1HTGVu
dW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCitib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVu
Y2lsKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Cisg
ICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgRGVw
dGhTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigp
OwogCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2JqZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+IDA7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVidWZm
ZXI6OmlzTXVsdGlzYW1wbGUoKQoreworICAgIC8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Y29tcGxldGUsIGF0dGFjaG1lbnQgc2FtcGxlcyBtYXkgYmUgbWlzbWF0Y2hlZCwgYW5kIGl0Cisg
ICAgLy8gY2Fubm90IGJlIHVzZWQgYXMgYSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlci4gSWYgaXQg
aXMgY29tcGxldGUsIGl0IGlzIHJlcXVpcmVkIHRvCisgICAgLy8gaGF2ZSBhIGNvbG9yIGF0dGFj
aG1lbnQsIGFuZCBhbGwgaXRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIg
b2Ygc2FtcGxlcywKKyAgICAvLyBzbyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSBjb2xv
cmJ1ZmZlciB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhlIGZyYW1lYnVmZmVyIGlzCisgICAgLy8g
bXVsdGlzYW1wbGVkLgorICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSAmJiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgPiAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkK
K3sKICAgICBpbnQgd2lkdGggPSAwOwogICAgIGludCBoZWlnaHQgPSAwOworICAgIGludCBzYW1w
bGVzID0gLTE7CiAKICAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsK
QEAgLTI0NiwxMyArMzA1LDI5IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkK
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5
cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVy
LT5nZXRGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAg
ICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0g
Y29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXIt
PmdldFNhbXBsZXMoKTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgIH0KKworICAg
IERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOworICAgIERlcHRoU3RlbmNp
bGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IE5VTEw7CiAKICAgICBpZiAobURlcHRoYnVmZmVyVHlw
ZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0g
Y29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKyAgICAgICAgZGVw
dGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhidWZmZXIp
CiAgICAgICAgIHsKQEAgLTI3MywxMSArMzQ4LDI4IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29t
cGxldGVuZXNzKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQorCisgICAgICAgIGlmIChzYW1wbGVz
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdl
dFNhbXBsZXMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRo
YnVmZmVyLT5nZXRTYW1wbGVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGRlcHRoYnVmZmVyLT5nZXRGb3Jt
YXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgU3RlbmNp
bGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0ZW5j
aWxidWZmZXJIYW5kbGUpOworICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZl
cigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKICAgICAgICAgewpAQCAtMjk4LDgg
KzM5MCw2NiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7
CiAgICAgICAgIH0KKworICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTVVMVElTQU1QTEVfQU5HTEU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChJ
c1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKElzQ29tcHJlc3NlZChzdGVuY2lsYnVmZmVyLT5nZXRGb3JtYXQoKSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZl
clR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5E
RVJCVUZGRVIpCisgICAgeworICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldEZvcm1hdCgpICE9
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8CisgICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5n
ZXRGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAorICAgICAgICAgICAgZGVw
dGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Cit9
CisKK0RlZmF1bHRGcmFtZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVmZmVyICpj
b2xvciwgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpCit7CisgICAgbUNvbG9yYnVm
ZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKKyAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfUkVO
REVSQlVGRkVSOworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKKwor
ICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG5ldyBSZW5kZXJidWZmZXIoMCwgY29sb3IpKTsK
KworICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyID0gbmV3IFJlbmRl
cmJ1ZmZlcigwLCBkZXB0aFN0ZW5jaWwpOworICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGRl
cHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7CisgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChk
ZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworfQorCitpbnQgRnJhbWVidWZmZXI6OmdldFNhbXBs
ZXMoKQoreworICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAor
R0xlbnVtIERlZmF1bHRGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK3sKICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7CiB9CisKIH0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxOSArMTUsMjIgQEAKICNpbmNsdWRlIDxkM2Q5
Lmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9SZWZDb3VudE9iamVjdC5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFJlbmRlcmJ1ZmZl
cjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2ls
YnVmZmVyOworY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwogCiBjbGFzcyBGcmFtZWJ1ZmZlcgog
ewogICBwdWJsaWM6CiAgICAgRnJhbWVidWZmZXIoKTsKIAotICAgIH5GcmFtZWJ1ZmZlcigpOwor
ICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7CiAKICAgICB2b2lkIHNldENvbG9yYnVmZmVyKEdM
ZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwogICAgIHZvaWQgc2V0RGVwdGhidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7CkBAIC00MSwxMCArNDQsMTEgQEAgY2xh
c3MgRnJhbWVidWZmZXIKIAogICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwo
KTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKyAgICB1bnNpZ25l
ZCBpbnQgZ2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpOwogCiAgICAgQ29sb3JidWZmZXIgKmdldENv
bG9yYnVmZmVyKCk7Ci0gICAgRGVwdGhidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7Ci0gICAgU3Rl
bmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAq
Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZm
ZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0
RGVwdGhidWZmZXJUeXBlKCk7CkBAIC01NCwyMCArNTgsMzkgQEAgY2xhc3MgRnJhbWVidWZmZXIK
ICAgICBHTHVpbnQgZ2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICBHTHVpbnQgZ2V0U3RlbmNp
bGJ1ZmZlckhhbmRsZSgpOwogCi0gICAgR0xlbnVtIGNvbXBsZXRlbmVzcygpOworICAgIGJvb2wg
aGFzU3RlbmNpbCgpOworICAgIGJvb2wgaXNNdWx0aXNhbXBsZSgpOworICAgIGludCBnZXRTYW1w
bGVzKCk7CiAKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVi
dWZmZXIpOworICAgIHZpcnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwogCi0gICAgR0x1aW50
IG1Db2xvcmJ1ZmZlckhhbmRsZTsKKyAgcHJvdGVjdGVkOgogICAgIEdMZW51bSBtQ29sb3JidWZm
ZXJUeXBlOworICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9p
bnRlcjsKIAotICAgIEdMdWludCBtRGVwdGhidWZmZXJIYW5kbGU7CiAgICAgR0xlbnVtIG1EZXB0
aGJ1ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZm
ZXJQb2ludGVyOwogCi0gICAgR0x1aW50IG1TdGVuY2lsYnVmZmVySGFuZGxlOwogICAgIEdMZW51
bSBtU3RlbmNpbGJ1ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBt
U3RlbmNpbGJ1ZmZlclBvaW50ZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRnJhbWVidWZmZXIpOworCisgICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5kZXJi
dWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OworfTsKKworY2xhc3MgRGVm
YXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBE
ZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJhbWVidWZm
ZXIpOwogfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KSW5k
ZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFVu
aWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHMKIHsKIH0KIAotUHJvZ3JhbTo6
UHJvZ3JhbSgpCitQcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1
aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSkK
IHsKICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxM
OwpAQCAtNjIsNiArNjIsOCBAQCBQcm9ncmFtOjpQcm9ncmFtKCkKIAogICAgIG1EZWxldGVTdGF0
dXMgPSBmYWxzZTsKIAorICAgIG1SZWZDb3VudCA9IDA7CisKICAgICBtU2VyaWFsID0gaXNzdWVT
ZXJpYWwoKTsKIH0KIApAQCAtNzEsMTIgKzczLDEyIEBAIFByb2dyYW06On5Qcm9ncmFtKCkKIAog
ICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4U2hh
ZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0K
IAogICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GcmFn
bWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgp
OwogICAgIH0KIH0KIApAQCAtOTAsNyArOTIsNyBAQCBib29sIFByb2dyYW06OmF0dGFjaFNoYWRl
cihTaGFkZXIgKnNoYWRlCiAgICAgICAgIH0KIAogICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZl
cnRleFNoYWRlciopc2hhZGVyOwotICAgICAgICBtVmVydGV4U2hhZGVyLT5hdHRhY2goKTsKKyAg
ICAgICAgbVZlcnRleFNoYWRlci0+YWRkUmVmKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKHNoYWRl
ci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7CkBAIC0xMDAsNyArMTAy
LDcgQEAgYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAgICAgICB9
CiAKICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7Ci0g
ICAgICAgIG1GcmFnbWVudFNoYWRlci0+YXR0YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRl
ci0+YWRkUmVmKCk7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIApAQCAtMTE2LDcg
KzExOCw3IEBAIGJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGUKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXIt
PmRldGFjaCgpOworICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgIG1W
ZXJ0ZXhTaGFkZXIgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUo
KSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCkBAIC0xMjYsNyArMTI4LDcgQEAgYm9vbCBQcm9ncmFt
OjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAg
bUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5V
TEw7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKQEAgLTExOTUsNiArMTE5NywxMCBA
QCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBD
b250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGJvb2wgc20zID0gY29udGV4dC0+
c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMg
PSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOworCiAgICAgbVZlcnRleEhMU0wgKz0gInN0
cnVjdCBWU19JTlBVVFxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iOwogCkBAIC0xMjI4LDEy
ICsxMjM0LDE3IEBAIGJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICB7CiAgICAgICAg
IGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8g
MyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKIAotICAgICAgICBtVmVydGV4SExTTCArPSAi
ICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiBURVhD
T09SRCIgKyBzdHIocikgKyAiO1xuIjsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdT
ZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwogICAgIH0KIAogICAgIGlmIChtRnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsK
KyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZh
cnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYg
KG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIG1W
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwogICAgIH0K
IAogICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgpAQCAtMTI2Miw2ICsxMjczLDExIEBAIGJvb2wg
UHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIK
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7CiAKKyAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20z
KQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQorCiAgICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCiAgICAgewogICAgICAgICBtVmVydGV4SExTTCArPSAiICAg
IG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CkBAIC0xMzQ1LDcgKzEzNjEs
NyBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7
Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsg
IiA6IFRFWENPT1JEIiArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExT
TCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAi
O1xuIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEz
NTQsOSArMTM3MCwxNCBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAKICAgICBpZiAo
bUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKICAgICB7Ci0gICAgICAgIG1QaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVy
cykgKyAiO1xuIjsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29v
cmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9
CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAg
IHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVY
Q09PUkQwO1xuIjsKICAgICB9Ci0gICAgICAgIAorCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+
bVVzZXNGcm9udEZhY2luZykKICAgICB7CiAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9h
dCB2RmFjZSA6IFZGQUNFO1xuIjsKQEAgLTEzNzUsMTIgKzEzOTYsMTcgQEAgYm9vbCBQcm9ncmFt
OjpsaW5rVmFyeWluZ3MoKQogICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQogICAgIHsKICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlu
cHV0LmdsX0ZyYWdDb29yZC53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJh
Z0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfV2luZG93LnggKyBk
eF9XaW5kb3cuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55
ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1dpbmRvdy55ICsgZHhfV2luZG93
Lnc7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9WaWV3cG9ydC54ICsgZHhfVmlld3BvcnQuejtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0Lmds
X0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnkgKyBkeF9WaWV3cG9ydC53O1xuIgog
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCiAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7CiAgICAgfQogCisgICAg
aWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAg
ICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gZmxvYXQyKGlucHV0LmdsX1Bv
aW50Q29vcmQueCwgMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55KTtcbiI7CisgICAgfQorCiAg
ICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKICAgICB7CiAgICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwg
KGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4w
KSk7XG4iOwpAQCAtMTQ0NywxMCArMTQ3Myw2IEBAIHZvaWQgUHJvZ3JhbTo6bGluaygpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgp
OwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhTaGFk
ZXJQcm9maWxlKCk7Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+Z2V0
UGl4ZWxTaGFkZXJQcm9maWxlKCk7Ci0KICAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVy
LT5nZXRITFNMKCk7CiAgICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7
CiAKQEAgLTE0NTksNiArMTQ4MSwxMCBAQCB2b2lkIFByb2dyYW06OmxpbmsoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAg
ICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxl
ID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7
CisKICAgICBJRDNEWEJ1ZmZlciAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0
ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKICAgICBJ
RDNEWEJ1ZmZlciAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExTTC5jX3N0
cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKIApAQCAtMTUwMyw3ICsxNTI5
LDcgQEAgdm9pZCBQcm9ncmFtOjpsaW5rKCkKICAgICAgICAgICAgIG1EZXB0aFJhbmdlRmFyTG9j
YXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7CiAg
ICAgICAgICAgICBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigi
Z2xfRGVwdGhSYW5nZS5kaWZmIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9u
ID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIsIHRydWUpOwotICAgICAgICAgICAgbUR4
V2luZG93TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1dpbmRvdyIsIHRydWUpOwor
ICAgICAgICAgICAgbUR4Vmlld3BvcnRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
Vmlld3BvcnQiLCB0cnVlKTsKICAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOwogICAgICAgICAg
ICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ci
LCB0cnVlKTsKICAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIsIHRydWUpOwpAQCAtMjM1NSwxMyArMjM4MSwx
MyBAQCB2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgewogICAgICAgICBp
ZiAobUZyYWdtZW50U2hhZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFk
ZXItPmRldGFjaCgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAg
ICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKG1WZXJ0ZXhTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXIt
PmRldGFjaCgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgICAg
ICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDEyLDcg
KzI0MzgsNyBAQCB2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgbURlcHRo
UmFuZ2VOZWFyTG9jYXRpb24gPSAtMTsKICAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gLTE7
CiAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOwotICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gLTE7
CisgICAgbUR4Vmlld3BvcnRMb2NhdGlvbiA9IC0xOwogICAgIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbiA9IC0xOwogICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKICAgICBtRHhQb2ludHNP
ckxpbmVzTG9jYXRpb24gPSAtMTsKQEAgLTI0MzgsNiArMjQ2NCwyNiBAQCBib29sIFByb2dyYW06
OmlzVmFsaWRhdGVkKCkgY29uc3QgCiAgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CiB9CiAKK3ZvaWQg
UHJvZ3JhbTo6cmVsZWFzZSgpCit7CisgICAgbVJlZkNvdW50LS07CisKKyAgICBpZiAobVJlZkNv
dW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKKyAgICB7CisgICAgICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmFk
ZFJlZigpCit7CisgICAgbVJlZkNvdW50Kys7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpn
ZXRSZWZDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZWZDb3VudDsKK30KKwogdW5zaWdu
ZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TZXJpYWw7
CkBAIC0yNzM3LDkgKzI3ODMsOSBAQCBHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24o
KSBjb25zCiAgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247CiB9CiAKLUdMaW50IFByb2dyYW06
OmdldER4V2luZG93TG9jYXRpb24oKSBjb25zdAorR0xpbnQgUHJvZ3JhbTo6Z2V0RHhWaWV3cG9y
dExvY2F0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUR4V2luZG93TG9jYXRpb247CisgICAg
cmV0dXJuIG1EeFZpZXdwb3J0TG9jYXRpb247CiB9CiAKIEdMaW50IFByb2dyYW06OmdldER4SGFs
ZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJv
Z3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZp
c2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw2ICsyMCw3IEBACiAKIG5hbWVzcGFjZSBnbAogeworY2xhc3MgUmVzb3VyY2VN
YW5hZ2VyOwogY2xhc3MgRnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiAKQEAg
LTU1LDcgKzU2LDcgQEAgc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgogY2xhc3MgUHJvZ3JhbQogewog
ICBwdWJsaWM6Ci0gICAgUHJvZ3JhbSgpOworICAgIFByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAogICAgIH5Qcm9ncmFtKCk7CiAKQEAgLTk3LDcgKzk4
LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIEdMaW50IGdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24o
KSBjb25zdDsKICAgICBHTGludCBnZXREZXB0aFJhbmdlRmFyTG9jYXRpb24oKSBjb25zdDsKICAg
ICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFdpbmRv
d0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhWaWV3cG9ydExvY2F0aW9uKCkgY29u
c3Q7CiAgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKICAgICBH
TGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeFBvaW50
c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwpAQCAtMTE5LDYgKzEyMCw5IEBAIGNsYXNzIFByb2dy
YW0KICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKICAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZvaWQgcmVs
ZWFzZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwogICAgIHZvaWQg
ZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0
OwogCkBAIC0yMDQsNyArMjA4LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIEdMaW50IG1EZXB0aFJh
bmdlTmVhckxvY2F0aW9uOwogICAgIEdMaW50IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247CiAgICAg
R0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhXaW5kb3dMb2NhdGlvbjsKKyAg
ICBHTGludCBtRHhWaWV3cG9ydExvY2F0aW9uOwogICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVM
b2NhdGlvbjsKICAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwogICAgIEdMaW50IG1EeFBv
aW50c09yTGluZXNMb2NhdGlvbjsKQEAgLTIxNCw5ICsyMTgsMTQgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIGNoYXIgKm1JbmZvTG9nOwogICAgIGJvb2wgbVZhbGlkYXRlZDsKIAorICAgIHVuc2lnbmVk
IGludCBtUmVmQ291bnQ7CisKICAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKIAogICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CisKKyAgICBSZXNvdXJjZU1hbmFnZXIgKm1S
ZXNvdXJjZU1hbmFnZXI7CisgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CiB9OwogfQogCkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZWZDb3VudE9iamVjdC5jcHA6IERl
ZmluZXMgdGhlIGdsOjpSZWZDb3VudE9iamVjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMKKy8v
IGxpZmVjeWNsZSBzdXBwb3J0IGZvciBHTCBvYmplY3RzIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBC
aW5kT2JqZWN0IHNjaGVtZSwgYnV0CisvLyB0aGF0IG5lZWQgdG8gYmUgcmVmZXJlbmNlIGNvdW50
ZWQgZm9yIGNvcnJlY3QgY3Jvc3MtY29udGV4dCBkZWxldGlvbi4KKy8vIChDb25jcmV0ZWx5LCB0
ZXh0dXJlcywgYnVmZmVycyBhbmQgcmVuZGVyYnVmZmVycy4pCisKKyNpbmNsdWRlICJSZWZDb3Vu
dE9iamVjdC5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworUmVmQ291bnRPYmplY3Q6OlJlZkNvdW50
T2JqZWN0KEdMdWludCBpZCkKK3sKKyAgICBtSWQgPSBpZDsKKyAgICBtUmVmQ291bnQgPSAwOwor
fQorCitSZWZDb3VudE9iamVjdDo6flJlZkNvdW50T2JqZWN0KCkKK3sKK30KKwordm9pZCBSZWZD
b3VudE9iamVjdDo6YWRkUmVmKCkgY29uc3QKK3sKKyAgICBtUmVmQ291bnQrKzsKK30KKwordm9p
ZCBSZWZDb3VudE9iamVjdDo6cmVsZWFzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1SZWZDb3Vu
dCA+IDApOworCisgICAgaWYgKC0tbVJlZkNvdW50ID09IDApCisgICAgeworICAgICAgICBkZWxl
dGUgdGhpczsKKyAgICB9Cit9CisKK3ZvaWQgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6
c2V0KFJlZkNvdW50T2JqZWN0ICpuZXdPYmplY3QpCit7CisgICAgLy8gYWRkUmVmIGZpcnN0IGlu
IGNhc2UgbmV3T2JqZWN0ID09IG1PYmplY3QgYW5kIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNl
IHRvIGl0LgorICAgIGlmIChuZXdPYmplY3QgIT0gTlVMTCkgbmV3T2JqZWN0LT5hZGRSZWYoKTsK
KyAgICBpZiAobU9iamVjdCAhPSBOVUxMKSBtT2JqZWN0LT5yZWxlYXNlKCk7CisKKyAgICBtT2Jq
ZWN0ID0gbmV3T2JqZWN0OworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNv
dW50T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9i
amVjdC5oCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVj
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBSZWZDb3VudE9iamVjdC5oOiBEZWZpbmVzIHRoZSBnbDo6UmVmQ291bnRPYmplY3QgYmFzZSBj
bGFzcyB0aGF0IHByb3ZpZGVzCisvLyBsaWZlY3ljbGUgc3VwcG9ydCBmb3IgR0wgb2JqZWN0cyB1
c2luZyB0aGUgdHJhZGl0aW9uYWwgQmluZE9iamVjdCBzY2hlbWUsIGJ1dAorLy8gdGhhdCBuZWVk
IHRvIGJlIHJlZmVyZW5jZSBjb3VudGVkIGZvciBjb3JyZWN0IGNyb3NzLWNvbnRleHQgZGVsZXRp
b24uCisvLyAoQ29uY3JldGVseSwgdGV4dHVyZXMsIGJ1ZmZlcnMgYW5kIHJlbmRlcmJ1ZmZlcnMu
KQorCisjaWZuZGVmIExJQkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXworI2RlZmluZSBMSUJHTEVT
VjJfUkVGQ09VTlRPQkpFQ1RfSF8KKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xf
QVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFzcyBSZWZDb3VudE9iamVjdAoreworICBwdWJs
aWM6CisgICAgZXhwbGljaXQgUmVmQ291bnRPYmplY3QoR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFs
IH5SZWZDb3VudE9iamVjdCgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZFJlZigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgaWQoKSBjb25z
dCB7IHJldHVybiBtSWQ7IH0KKyAgICAKKyAgcHJpdmF0ZToKKyAgICBHTHVpbnQgbUlkOworCisg
ICAgbXV0YWJsZSBzdGQ6OnNpemVfdCBtUmVmQ291bnQ7Cit9OworCitjbGFzcyBSZWZDb3VudE9i
amVjdEJpbmRpbmdQb2ludGVyCit7CisgIHByb3RlY3RlZDoKKyAgICBSZWZDb3VudE9iamVjdEJp
bmRpbmdQb2ludGVyKCkgOiBtT2JqZWN0KE5VTEwpIHsgfQorICAgIH5SZWZDb3VudE9iamVjdEJp
bmRpbmdQb2ludGVyKCkgeyBBU1NFUlQobU9iamVjdCA9PSBOVUxMKTsgfSAvLyBPYmplY3RzIGhh
dmUgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGlzIGRlc3Ryb3ll
ZCwgc28gdGhleSBtdXN0IGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cC4KKworICAgIHZvaWQgc2V0
KFJlZkNvdW50T2JqZWN0ICpuZXdPYmplY3QpOworICAgIFJlZkNvdW50T2JqZWN0ICpnZXQoKSBj
b25zdCB7IHJldHVybiBtT2JqZWN0OyB9CisKKyAgcHVibGljOgorICAgIEdMdWludCBpZCgpIGNv
bnN0IHsgcmV0dXJuIChtT2JqZWN0ICE9IE5VTEwpID8gbU9iamVjdC0+aWQoKSA6IDA7IH0KKyAg
ICBib29sIG9wZXJhdG9yICEgKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CisK
KyAgcHJpdmF0ZToKKyAgICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKK307CisKK3RlbXBsYXRl
IDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291
bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgdm9pZCBzZXQoT2JqZWN0
VHlwZSAqbmV3T2JqZWN0KSB7IFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdP
YmplY3QpOyB9CisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQor
ICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Cit9
OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXwpJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xF
L3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcz
ICsxNSwxNDggQEAKIAogbmFtZXNwYWNlIGdsCiB7Ci11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
OjptQ3VycmVudFNlcmlhbCA9IDE7Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6
bUN1cnJlbnRTZXJpYWwgPSAxOwogCi1SZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcigpCitSZW5k
ZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnN0
b3JhZ2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7Ci0gICAgbVdpZHRoID0gMDsKLSAgICBtSGVp
Z2h0ID0gMDsKLSAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vIGRlZmF1bHQgZm9ybWF0LCBuZWVk
cyB0byBiZSBvbmUgb2YgdGhlIGV4cGVjdGVkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzCi0gICAgbVNl
cmlhbCA9IGlzc3VlU2VyaWFsKCk7CisgICAgQVNTRVJUKHN0b3JhZ2UgIT0gTlVMTCk7CisgICAg
bVN0b3JhZ2UgPSBzdG9yYWdlOwogfQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQog
eworICAgIGRlbGV0ZSBtU3RvcmFnZTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzQ29sb3Ji
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+aXNDb2xvcmJ1ZmZlcigpOwor
fQorCitib29sIFJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1TdG9yYWdlLT5pc0RlcHRoYnVmZmVyKCk7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjpp
c1N0ZW5jaWxidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+aXNTdGVuY2ls
YnVmZmVyKCk7Cit9CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRl
clRhcmdldCgpCit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKK30K
KworSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sK
KyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldERlcHRoU3RlbmNpbCgpOworfQorCitpbnQgUmVuZGVy
YnVmZmVyOjpnZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRXaWR0
aCgpOworfQorCitpbnQgUmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtU3RvcmFnZS0+Z2V0SGVpZ2h0KCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6Omdl
dEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRGb3JtYXQoKTsKK30K
KworRDNERk9STUFUIFJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVN0b3JhZ2UtPmdldEQzREZvcm1hdCgpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0U2Vy
aWFsKCk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKm5ld1N0b3JhZ2UpCit7CisgICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7CisK
KyAgICBkZWxldGUgbVN0b3JhZ2U7CisgICAgbVN0b3JhZ2UgPSBuZXdTdG9yYWdlOworfQorCitS
ZW5kZXJidWZmZXJTdG9yYWdlOjpSZW5kZXJidWZmZXJTdG9yYWdlKCkKK3sKKyAgICBtU2VyaWFs
ID0gaXNzdWVTZXJpYWwoKTsKK30KKworUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZl
clN0b3JhZ2UoKQorewogfQogCi1ib29sIFJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCiti
b29sIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzQ29sb3JidWZmZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKQorYm9v
bCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc0RlcHRoYnVmZmVyKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQorYm9v
bCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKK0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRS
ZW5kZXJUYXJnZXQoKQogewogICAgIHJldHVybiBOVUxMOwogfQogCi1JRGlyZWN0M0RTdXJmYWNl
OSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQorSURpcmVjdDNEU3VyZmFjZTkgKlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7
CiB9CiAKLWludCBSZW5kZXJidWZmZXI6OmdldFdpZHRoKCkKK2ludCBSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1XaWR0aDsKIH0KIAotaW50IFJl
bmRlcmJ1ZmZlcjo6Z2V0SGVpZ2h0KCkKK2ludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRIZWln
aHQoKSBjb25zdAogewogICAgIHJldHVybiBtSGVpZ2h0OwogfQogCi12b2lkIFJlbmRlcmJ1ZmZl
cjo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OnNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIG1XaWR0aCA9IHdpZHRo
OwogICAgIG1IZWlnaHQgPSBoZWlnaHQ7CiB9CiAKLQotR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0
Rm9ybWF0KCkKK0dMZW51bSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRGb3JtYXQoKSBjb25zdAog
ewogICAgIHJldHVybiBtRm9ybWF0OwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpn
ZXRTZXJpYWwoKSBjb25zdAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEQzREZv
cm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EM0RGb3JtYXQ7Cit9CisKK0dMc2l6ZWkgUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1w
bGVzOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyaWFsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbVNlcmlhbDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRlcmJ1
ZmZlcjo6aXNzdWVTZXJpYWwoKQordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
c3VlU2VyaWFsKCkKIHsKICAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKIH0KQEAgLTk2LDM2
ICsxNzEsNTkgQEAgQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKElEaXJlY3QzRFN1cmZhYwogICAg
ICAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKIAogICAgICAgICBzZXRT
aXplKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAgICAgICBtRDNE
Rm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OworICAgICAgICBtU2FtcGxlcyA9IGVzMmR4OjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VO
S05PV047CisgICAgICAgIG1TYW1wbGVzID0gMDsKICAgICB9Ci0KIH0KIAotQ29sb3JidWZmZXI6
OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCkKK0NvbG9y
YnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKIAogICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZXMyZHg6OkNvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1S
ZW5kZXJUYXJnZXQsIE5VTEwpOworICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBlczJk
eDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIGludCBzdXBwb3J0ZWRT
YW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0
ZWRGb3JtYXQsIHNhbXBsZXMpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICBpZiAoc3VwcG9ydGVkU2Ft
cGxlcyA9PSAtMSkKICAgICB7CiAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVxdWVz
dGVkRm9ybWF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlczJkeDo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2Ft
cGxlcyksIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisKKyAgICAgICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisgICAgfQogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAg
ICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OworICAg
ICAgICBtRDNERm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBtU2FtcGxlcyA9IHN1
cHBvcnRlZFNhbXBsZXM7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHNldFNpemUo
MCwgMCk7CiAgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsKKyAgICAgICAgbUQzREZvcm1hdCA9
IEQzREZNVF9VTktOT1dOOworICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCkBAIC0x
MzcsMTIgKzIzNSwxMiBAQCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkKICAgICB9CiB9CiAK
LWJvb2wgQ29sb3JidWZmZXI6OmlzQ29sb3JidWZmZXIoKQorYm9vbCBDb2xvcmJ1ZmZlcjo6aXND
b2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMdWludCBDb2xv
cmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldFJlZFNpemUoKSBj
b25zdAogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTE1NSw3ICsyNTMsNyBA
QCBHTHVpbnQgQ29sb3JidWZmZXI6OmdldFJlZFNpemUoKQogICAgIHJldHVybiAwOwogfQogCi1H
THVpbnQgQ29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSgpCitHTHVpbnQgQ29sb3JidWZmZXI6Omdl
dEdyZWVuU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewpAQCAt
MTY4LDcgKzI2Niw3IEBAIEdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKICAgICBy
ZXR1cm4gMDsKIH0KIAotR0x1aW50IENvbG9yYnVmZmVyOjpnZXRCbHVlU2l6ZSgpCitHTHVpbnQg
Q29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKIHsKICAgICBpZiAobVJlbmRlclRhcmdl
dCkKICAgICB7CkBAIC0xODEsNyArMjc5LDcgQEAgR0x1aW50IENvbG9yYnVmZmVyOjpnZXRCbHVl
U2l6ZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0QWxwaGFT
aXplKCkKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29uc3QKIHsKICAgICBp
ZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC0xOTksNyArMjk3LDcgQEAgSURpcmVjdDNEU3Vy
ZmFjZTkgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZQogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0Owog
fQogCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3Rl
bmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6
RGVwdGhTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURl
cHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpCiB7CiAgICAgaWYgKGRlcHRoU3RlbmNpbCkKICAgICB7
CkBAIC0yMDksMTggKzMwNywzNCBAQCBEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNE
U3VyZmFjCiAgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwogCiAg
ICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7Ci0g
ICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1
ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0
aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICAg
ICAgbUZvcm1hdCA9IChkZXNjcmlwdGlvbi5Gb3JtYXQgPT0gRDNERk1UX0QxNiA/IEdMX0RFUFRI
X0NPTVBPTkVOVDE2IDogR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpOworICAgICAgICBtU2FtcGxl
cyA9IGVzMmR4OjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0
aVNhbXBsZVR5cGUpOyAKKyAgICAgICAgbUQzREZvcm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktO
T1dOOyAKKyAgICAgICAgbVNhbXBsZXMgPSAwOwogICAgIH0KIH0KIAotRGVwdGhidWZmZXI6OkRl
cHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVw
dGhTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKQog
ewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwogCiAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBEM0RNVUxUSVNB
TVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOworICAgIAorICAgIGludCBz
dXBwb3J0ZWRTYW1wbGVzID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxl
cyhEM0RGTVRfRDI0UzgsIHNhbXBsZXMpOworCisgICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0g
LTEpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRo
U3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBlczJkeDo6R2V0TXVs
dGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtRGVw
dGhTdGVuY2lsLCAwKTsKIAogICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgewpAQCAtMjM0LDE4ICszNDgsMjAg
QEAgRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IAogICAgIGlmIChtRGVw
dGhTdGVuY2lsKQogICAgIHsKICAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVy
IHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2
YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorICAgICAgICBt
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICAgIG1EM0RGb3JtYXQgPSBE
M0RGTVRfRDI0Uzg7CisgICAgICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2V0U2l6ZSgwLCAwKTsKICAgICAgICAgbUZvcm1h
dCA9IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0CisgICAgICAgIG1EM0RGb3JtYXQgPSBEM0RG
TVRfVU5LTk9XTjsKKyAgICAgICAgbVNhbXBsZXMgPSAwOwogICAgIH0KIH0KIAotRGVwdGhidWZm
ZXI6On5EZXB0aGJ1ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZm
ZXIoKQogewogICAgIGlmIChtRGVwdGhTdGVuY2lsKQogICAgIHsKQEAgLTI1MywxMiArMzY5LDE3
IEBAIERlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQogICAgIH0KIH0KIAotYm9vbCBEZXB0aGJ1
ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCitib29sIERlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1
ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGVwdGhTdGVuY2ls
YnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQog
Ci1HTHVpbnQgRGVwdGhidWZmZXI6OmdldERlcHRoU2l6ZSgpCitHTHVpbnQgRGVwdGhTdGVuY2ls
YnVmZmVyOjpnZXREZXB0aFNpemUoKSBjb25zdAogewogICAgIGlmIChtRGVwdGhTdGVuY2lsKQog
ICAgIHsKQEAgLTI3MSw4NSArMzkyLDkzIEBAIEdMdWludCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhT
aXplKCkKICAgICByZXR1cm4gMDsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQorR0x1aW50IERlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0U3RlbmNp
bFNpemUoKSBjb25zdAoreworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXRE
ZXNjKCZkZXNjcmlwdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRTdGVuY2lsU2l6
ZShkZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGly
ZWN0M0RTdXJmYWNlOSAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewog
ICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVm
ZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChkZXB0
aFN0ZW5jaWwpCitEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQogewogICAgIGlm
IChkZXB0aFN0ZW5jaWwpCiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwot
Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlv
bi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5D
SUxfSU5ERVg4OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQs
IHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBm
b3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZQorICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7
IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxp
bmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3
aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2Ug
aW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlCiAgICAgfQogfQogCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgs
IGhlaWdodCwgc2FtcGxlcykKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKLQotICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZN
VF9EMjRTOCwgRDNETVVMVElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCAw
KTsKLQotICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgaWYgKGdldERlcHRoU3RlbmNpbCgpKQogICAgIHsKLSAg
ICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5kZXJidWZmZXIg
cGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZh
bGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAgICAgfQorfQog
Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKK0RlcHRoYnVmZmVyOjp+RGVwdGhidWZm
ZXIoKQoreworfQogCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCitib29sIERlcHRoYnVmZmVyOjpp
c0RlcHRoYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXB0
aGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1N0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRo
U3RlbmNpbCkgOiBEZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChk
ZXB0aFN0ZW5jaWwpCiAgICAgewotICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAg
ICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIg
cGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlk
IHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAgICAgfQogICAgIGVsc2UK
ICAgICB7Ci0gICAgICAgIHNldFNpemUoMCwgMCk7CiAgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JB
NDsgLy9kZWZhdWx0IGZvcm1hdAogICAgIH0KIH0KIAotU3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxi
dWZmZXIoKQorU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWln
aHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwg
c2FtcGxlcykKIHsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICBpZiAoZ2V0RGVwdGhTdGVu
Y2lsKCkpCiAgICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAg
IG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJh
bWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVu
ZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9CiB9CiAKLUdMdWludCBT
dGVuY2lsYnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSgpCitTdGVuY2lsYnVmZmVyOjp+U3RlbmNpbGJ1
ZmZlcigpCiB7Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2NyaXB0aW9uKTsKLQotICAgICAgICByZXR1cm4gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2Ny
aXB0aW9uLkZvcm1hdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3RlbmNp
bGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkKK2Jvb2wgU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1
ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1JRGlyZWN0M0RTdXJmYWNlOSAqU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK2Jv
b2wgU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bURlcHRoU3RlbmNpbDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIH0KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDggKzQsOSBAQAogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKLS8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRo
ZSB2aXJ0dWFsIGdsOjpSZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkCi0vLyBjbGFz
c2VzIENvbG9yYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50
cyBHTCByZW5kZXJidWZmZXIKKy8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB3cmFwcGVy
IGNsYXNzIGdsOjpSZW5kZXJidWZmZXIsIGFzIHdlbGwgYXMgdGhlCisvLyBjbGFzcyBoaWVyYXJj
aHkgdXNlZCB0byBzdG9yZSBpdHMgY29udGVudHM6IFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIENvbG9y
YnVmZmVyLAorLy8gRGVwdGhTdGVuY2lsYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1
ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZmZXIKIC8vIG9iamVjdHMgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDgu
CiAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpAQCAtMTYsMjYgKzE3LDMzIEBA
CiAjaW5jbHVkZSA8ZDNkOS5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIGdsCiB7Ci1j
bGFzcyBSZW5kZXJidWZmZXIKKworLy8gQSBjbGFzcyBkZXJpdmVkIGZyb20gUmVuZGVyYnVmZmVy
U3RvcmFnZSBpcyBjcmVhdGVkIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorLy8gaXMg
Y2FsbGVkLiBUaGUgc3BlY2lmaWMgY29uY3JldGUgdHlwZSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhl
IGludGVybmFsIGZvcm1hdCBpcworLy8gY29sb3VyIGRlcHRoLCBzdGVuY2lsIG9yIHBhY2tlZCBk
ZXB0aC9zdGVuY2lsLgorY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6Ci0g
ICAgUmVuZGVyYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgpOwogCi0gICAgdmly
dHVhbCB+UmVuZGVyYnVmZmVyKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyU3RvcmFnZSgp
ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbG9yYnVmZmVyKCk7Ci0gICAgdmlydHVhbCBi
b29sIGlzRGVwdGhidWZmZXIoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCk7
CisgICAgdmlydHVhbCBib29sIGlzQ29sb3JidWZmZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNEZXB0aGJ1ZmZlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1N0ZW5jaWxidWZm
ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRh
cmdldCgpOwogICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgp
OwogCi0gICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKTsKLSAgICB2aXJ0dWFsIGludCBnZXRIZWln
aHQoKTsKLSAgICBHTGVudW0gZ2V0Rm9ybWF0KCk7CisgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50
IGdldFNlcmlhbCgpIGNvbnN0OwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlh
bCgpOwpAQCAtNDMsMTAgKzUxLDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlcgogICBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgR0xlbnVtIG1G
b3JtYXQ7CisgICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7CisgICAgR0xzaXplaSBtU2FtcGxlczsK
ICAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJTdG9yYWdlKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJl
bnRTZXJpYWw7CiAKQEAgLTU0LDIwICs2NCw1MiBAQCBjbGFzcyBSZW5kZXJidWZmZXIKICAgICBp
bnQgbUhlaWdodDsKIH07CiAKLWNsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZl
cgorLy8gUmVuZGVyYnVmZmVyIGltcGxlbWVudHMgdGhlIEdMIHJlbmRlcmJ1ZmZlciBvYmplY3Qu
CisvLyBJdCdzIG9ubHkgYSB3cmFwcGVyIGZvciBhIFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIGJ1dCB0
aGUgaW50ZXJuYWwgb2JqZWN0CisvLyBjYW4gY2hhbmdlIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZSBpcyBjYWxsZWQuCitjbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRP
YmplY3QKK3sKKyAgcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1
ZmZlclN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgflJlbmRlcmJ1ZmZlcigpOworCisgICAgYm9v
bCBpc0NvbG9yYnVmZmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7
CisgICAgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKSBjb25zdDsKKworICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhT
dGVuY2lsKCk7CisKKyAgICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBpbnQgZ2V0SGVpZ2h0
KCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBn
ZXREM0RGb3JtYXQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7
CisKKyAgICB2b2lkIHNldFN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSk7
CisgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqZ2V0U3RvcmFnZSgpIHsgcmV0dXJuIG1TdG9yYWdl
OyB9CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVm
ZmVyKTsKKworICAgIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKm1TdG9yYWdlOworfTsKKworY2xhc3Mg
Q29sb3JidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgQ29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7
Ci0gICAgQ29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsK
KyAgICBDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcyk7CiAKICAgICB+Q29sb3JidWZmZXIoKTsKIAotICAgIGJvb2wgaXNDb2xv
cmJ1ZmZlcigpOworICAgIGJvb2wgaXNDb2xvcmJ1ZmZlcigpIGNvbnN0OwogCi0gICAgR0x1aW50
IGdldFJlZFNpemUoKTsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCk7Ci0gICAgR0x1aW50IGdl
dEJsdWVTaXplKCk7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpOworICAgIEdMdWludCBnZXRS
ZWRTaXplKCkgY29uc3Q7CisgICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0OworICAgIEdM
dWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRBbHBoYVNpemUoKSBjb25z
dDsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKIApAQCAtNzgs
NDIgKzEyMCw1NSBAQCBjbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29sb3JidWZmZXIpOwogfTsKIAotY2xhc3MgRGVw
dGhidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhi
dWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBleHBsaWNpdCBEZXB0aFN0ZW5jaWxi
dWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgRGVwdGhTdGVuY2ls
YnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIH5E
ZXB0aGJ1ZmZlcigpOworICAgIH5EZXB0aFN0ZW5jaWxidWZmZXIoKTsKIAotICAgIGJvb2wgaXNE
ZXB0aGJ1ZmZlcigpOworICAgIHZpcnR1YWwgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OwogCi0gICAgR0x1aW50IGdl
dERlcHRoU2l6ZSgpOworICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKKyAgICBHTHVp
bnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRE
ZXB0aFN0ZW5jaWwoKTsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihEZXB0aGJ1ZmZlcik7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoU3RlbmNp
bGJ1ZmZlcik7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiB9OwogCi1j
bGFzcyBTdGVuY2lsYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgorY2xhc3MgRGVwdGhidWZm
ZXIgOiBwdWJsaWMgRGVwdGhTdGVuY2lsYnVmZmVyCiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIFN0
ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBleHBsaWNpdCBEZXB0aGJ1
ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aGJ1ZmZlcihp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAKLSAgICB+U3RlbmNpbGJ1
ZmZlcigpOworICAgIH5EZXB0aGJ1ZmZlcigpOworCisgICAgYm9vbCBpc0RlcHRoYnVmZmVyKCkg
Y29uc3Q7CisgICAgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aGJ1ZmZlcik7Cit9OwogCi0gICAgYm9v
bCBpc1N0ZW5jaWxidWZmZXIoKTsKK2NsYXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgRGVwdGhT
dGVuY2lsYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGVuY2lsYnVmZmVyKElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOworICAgIFN0ZW5jaWxidWZmZXIoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwogCi0gICAgR0x1aW50IGdldFN0ZW5j
aWxTaXplKCk7CisgICAgflN0ZW5jaWxidWZmZXIoKTsKIAotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKSBjb25zdDsKKyAg
ICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFN0ZW5jaWxidWZmZXIpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5
ICptRGVwdGhTdGVuY2lsOwogfTsKIH0KIApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3Vy
Y2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3Vy
Y2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFJlc291cmNlTWFuYWdlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZXNv
dXJjZU1hbmFnZXIgY2xhc3MsIHdoaWNoIHRyYWNrcyBhbmQgCisvLyByZXRyaWV2ZXMgb2JqZWN0
cyB3aGljaCBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIENvbnRleHRzLgorCisjaW5jbHVkZSAi
bGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1JlbmRlckJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorCituYW1lc3BhY2UgZ2wKK3sKK1Jlc291cmNlTWFuYWdl
cjo6UmVzb3VyY2VNYW5hZ2VyKCkKK3sKKyAgICBtUmVmQ291bnQgPSAxOworfQorCitSZXNvdXJj
ZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIoKQoreworICAgIHdoaWxlICghbUJ1ZmZlck1hcC5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlQnVmZmVyKG1CdWZmZXJNYXAuYmVnaW4oKS0+
Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbVByb2dyYW1NYXAuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIGRlbGV0ZVByb2dyYW0obVByb2dyYW1NYXAuYmVnaW4oKS0+Zmlyc3QpOworICAg
IH0KKworICAgIHdoaWxlICghbVNoYWRlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlU2hhZGVyKG1TaGFkZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxl
ICghbVJlbmRlcmJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUmVuZGVy
YnVmZmVyKG1SZW5kZXJidWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdo
aWxlICghbVRleHR1cmVNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRleHR1cmUo
bVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1h
bmFnZXI6OmFkZFJlZigpCit7CisgICAgbVJlZkNvdW50Kys7Cit9CisKK3ZvaWQgUmVzb3VyY2VN
YW5hZ2VyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAoLS1tUmVmQ291bnQgPT0gMCkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVm
ZmVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAg
dW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobUJ1ZmZlck1hcC5maW5kKGhh
bmRsZSkgIT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAg
IH0KKworICAgIG1CdWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCBzaGFkZXIvcHJvZ3JhbSBuYW1lCitHTHVpbnQg
UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCit7CisgICAgdW5zaWdu
ZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkg
IT0gbVNoYWRlck1hcC5lbmQoKSB8fCBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dy
YW1NYXAuZW5kKCkpICAgLy8gU2hhcmVkIG5hbWUgc3BhY2UKKyAgICB7CisgICAgICAgIGhhbmRs
ZSsrOworICAgIH0KKworICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgewor
ICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRs
ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAg
IHsKKyAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMs
IGhhbmRsZSk7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBo
YW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHByb2dyYW0vc2hhZGVyIG5hbWUKK0dM
dWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHVuc2lnbmVkIGlu
dCBoYW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBt
UHJvZ3JhbU1hcC5lbmQoKSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFw
LmVuZCgpKSAgIC8vIFNoYXJlZCBuYW1lIHNwYWNlCisgICAgeworICAgICAgICBoYW5kbGUrKzsK
KyAgICB9CisKKyAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFByb2dyYW0odGhpcywgaGFu
ZGxlKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHRl
eHR1cmUgbmFtZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlVGV4dHVyZSgpCit7Cisg
ICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobVRleHR1cmVNYXAuZmlu
ZChoYW5kbGUpICE9IG1UZXh0dXJlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7
CisgICAgfQorCisgICAgbVRleHR1cmVNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4g
aGFuZGxlOworfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1
aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFu
ZGxlKSAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7
CisgICAgfQorCisgICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJl
dHVybiBoYW5kbGU7Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1C
dWZmZXJNYXAuZmluZChidWZmZXIpOworCisgICAgaWYgKGJ1ZmZlck9iamVjdCAhPSBtQnVmZmVy
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlck9iamVjdC0+c2Vjb25kKSBidWZm
ZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyTWFwLmVyYXNlKGJ1
ZmZlck9iamVjdCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2hh
ZGVyKEdMdWludCBzaGFkZXIpCit7CisgICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXJPYmpl
Y3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChzaGFkZXJPYmplY3QgIT0g
bVNoYWRlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJPYmplY3QtPnNlY29u
ZC0+Z2V0UmVmQ291bnQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgc2hh
ZGVyT2JqZWN0LT5zZWNvbmQ7CisgICAgICAgICAgICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9i
amVjdCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBz
aGFkZXJPYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFt
KQoreworICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW1PYmplY3QgPSBtUHJvZ3JhbU1h
cC5maW5kKHByb2dyYW0pOworCisgICAgaWYgKHByb2dyYW1PYmplY3QgIT0gbVByb2dyYW1NYXAu
ZW5kKCkpCisgICAgeworICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5nZXRSZWZD
b3VudCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtT2JqZWN0
LT5zZWNvbmQ7CisgICAgICAgICAgICBtUHJvZ3JhbU1hcC5lcmFzZShwcm9ncmFtT2JqZWN0KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsgCisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sK
KyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0ZXh0dXJlT2JqZWN0ID0gbVRleHR1cmVNYXAuZmlu
ZCh0ZXh0dXJlKTsKKworICAgIGlmICh0ZXh0dXJlT2JqZWN0ICE9IG1UZXh0dXJlTWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPnNlY29uZCkgdGV4dHVyZU9iamVj
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVP
YmplY3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0
b3IgcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKHJlbmRlcmJ1ZmZl
cik7CisKKyAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5kZXJidWZmZXJNYXAuZW5k
KCkpCisgICAgeworICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQpIHJlbmRl
cmJ1ZmZlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1SZW5kZXJidWZmZXJN
YXAuZXJhc2UocmVuZGVyYnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK0J1ZmZlciAqUmVzb3Vy
Y2VNYW5hZ2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBCdWZmZXJN
YXA6Oml0ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYg
KGJ1ZmZlciA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBidWZmZXItPnNlY29uZDsK
KyAgICB9Cit9CisKK1NoYWRlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRTaGFkZXIodW5zaWduZWQg
aW50IGhhbmRsZSkKK3sKKyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJN
YXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBzaGFkZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1RleHR1cmUgKlJlc291cmNl
TWFuYWdlcjo6Z2V0VGV4dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5k
bGUgPT0gMCkgcmV0dXJuIE5VTEw7CisKKyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0ZXh0dXJl
ID0gbVRleHR1cmVNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKHRleHR1cmUgPT0gbVRleHR1
cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsKKyAgICB9Cit9CisKK1By
b2dyYW0gKlJlc291cmNlTWFuYWdlcjo6Z2V0UHJvZ3JhbSh1bnNpZ25lZCBpbnQgaGFuZGxlKQor
eworICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhh
bmRsZSk7CisKKyAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgIH0KK30KKworUmVuZGVyYnVmZmVyICpSZXNvdXJjZU1h
bmFnZXI6OmdldFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFJlbmRl
cmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5k
KGhhbmRsZSk7CisKKyAgICBpZiAocmVuZGVyYnVmZmVyID09IG1SZW5kZXJidWZmZXJNYXAuZW5k
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlbmRlcmJ1ZmZlci0+c2Vjb25kOworICAgIH0KK30KKwordm9pZCBS
ZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZm
ZXIgKmJ1ZmZlcikKK3sKKyAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBidWZmZXI7Cit9
CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQg
aW50IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIp
KQorICAgIHsKKyAgICAgICAgQnVmZmVyICpidWZmZXJPYmplY3QgPSBuZXcgQnVmZmVyKGJ1ZmZl
cik7CisgICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IGJ1ZmZlck9iamVjdDsKKyAgICAgICAg
YnVmZmVyT2JqZWN0LT5hZGRSZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2Vy
OjpjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBTYW1wbGVyVHlwZSB0eXBl
KQoreworICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCisgICAg
eworICAgICAgICBUZXh0dXJlICp0ZXh0dXJlT2JqZWN0OworCisgICAgICAgIGlmICh0eXBlID09
IFNBTVBMRVJfMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcg
VGV4dHVyZTJEKHRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0g
U0FNUExFUl9DVUJFKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3
IFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gdGV4dHVyZU9iamVjdDsK
KyAgICAgICAgdGV4dHVyZU9iamVjdC0+YWRkUmVmKCk7CisgICAgfQorfQorCit2b2lkIFJlc291
cmNlTWFuYWdlcjo6Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWludCByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKHJlbmRlcmJ1ZmZlciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVu
ZGVyYnVmZmVyKSkKKyAgICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2Jq
ZWN0ID0gbmV3IFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIsIG5ldyBDb2xvcmJ1ZmZlcigwLCAw
LCBHTF9SR0JBNCwgMCkpOworICAgICAgICBtUmVuZGVyYnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0g
PSByZW5kZXJidWZmZXJPYmplY3Q7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+YWRkUmVm
KCk7CisgICAgfQorfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2Vy
LmgJKHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBS
ZXNvdXJjZU1hbmFnZXIuaCA6IERlZmluZXMgdGhlIFJlc291cmNlTWFuYWdlciBjbGFzcywgd2hp
Y2ggdHJhY2tzIG9iamVjdHMKKy8vIHNoYXJlZCBieSBtdWx0aXBsZSBHTCBjb250ZXh0cy4KKwor
I2lmbmRlZiBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9S
RVNPVVJDRU1BTkFHRVJfSF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisKKyNpbmNsdWRlIDxtYXA+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgorCituYW1lc3BhY2UgZ2wKK3sKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNoYWRlcjsKK2NsYXNz
IFByb2dyYW07CitjbGFzcyBUZXh0dXJlOworY2xhc3MgUmVuZGVyYnVmZmVyOworCitlbnVtIFNh
bXBsZXJUeXBlCit7CisgICAgU0FNUExFUl8yRCwKKyAgICBTQU1QTEVSX0NVQkUsCisKKyAgICBT
QU1QTEVSX1RZUEVfQ09VTlQKK307CisKK2NsYXNzIFJlc291cmNlTWFuYWdlcgoreworICBwdWJs
aWM6CisgICAgUmVzb3VyY2VNYW5hZ2VyKCk7CisgICAgflJlc291cmNlTWFuYWdlcigpOworCisg
ICAgdm9pZCBhZGRSZWYoKTsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIEdMdWludCBjcmVh
dGVCdWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKKyAgICBH
THVpbnQgY3JlYXRlUHJvZ3JhbSgpOworICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CisgICAg
R0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1
aW50IGJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CisgICAg
dm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1
cmUoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCBy
ZW5kZXJidWZmZXIpOworCisgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7Cisg
ICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7CisgICAgUHJvZ3JhbSAqZ2V0UHJv
Z3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5k
bGUpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwor
ICAgIAorICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZl
ciAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2ln
bmVkIGludCBidWZmZXIpOworICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQg
dGV4dHVyZSwgU2FtcGxlclR5cGUgdHlwZSk7CisgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZlckFs
bG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5hZ2VyKTsKKworICAgIHN0ZDo6c2l6ZV90IG1S
ZWZDb3VudDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJN
YXA7CisgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdM
dWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOworCisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOworICAgIFBy
b2dyYW1NYXAgbVByb2dyYW1NYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgVGV4
dHVyZSo+IFRleHR1cmVNYXA7CisgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKworICAgIHR5
cGVkZWYgc3RkOjptYXA8R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7Cisg
ICAgUmVuZGVyYnVmZmVyTWFwIG1SZW5kZXJidWZmZXJNYXA7Cit9OworCit9CisKKyNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3Bw
CShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQCBuYW1lc3BhY2UgZ2wKIHZvaWQgKlNoYWRlcjo6
bUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwogdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIg
PSBOVUxMOwogCi1TaGFkZXI6OlNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxl
KSA6IG1IYW5kbGUoaGFuZGxlKSwgbUNvbnRleHQoY29udGV4dCkKK1NoYWRlcjo6U2hhZGVyKFJl
c291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRsZSks
IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKICAgICBtU291cmNlID0gTlVMTDsKICAgICBt
SGxzbCA9IE5VTEw7CkBAIC0zNSwyMSArMzUsMjIgQEAgU2hhZGVyOjpTaGFkZXIoQ29udGV4dCAq
Y29udGV4dCwgR0x1aW50IAogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBUQnVpbHRJblJlc291cmNlIHJlc291cmNlczsKLSAgICAgICAgICAgIHJlc291cmNlcy5t
YXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAgICAgcmVzb3Vy
Y2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7
Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlOR19W
RUNUT1JTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
ID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2Vz
Lm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOwotICAgICAgICAg
ICAgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKKyAgICAgICAg
ICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZSgmcmVzb3VyY2VzKTsKKyAgICAgICAgICAgIHJlc291
cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOworICAgICAgICAgICAg
cmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlM7CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFS
WUlOR19WRUNUT1JTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgICAgICAgICAgcmVz
b3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUzsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0
cyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOworICAg
ICAgICAgICAgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKIAog
ICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExh
bmdGcmFnbWVudCwgRVNoU3BlY0dMRVMyLCAmcmVzb3VyY2VzKTsKICAgICAgICAgICAgIG1WZXJ0
ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3BlY0dM
RVMyLCAmcmVzb3VyY2VzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1BdHRhY2hDb3VudCA9
IDA7CisgICAgbVJlZkNvdW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CiB9CiAK
QEAgLTE4NywyNCArMTg4LDI0IEBAIGNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCiAgICAg
cmV0dXJuIG1IbHNsOwogfQogCi12b2lkIFNoYWRlcjo6YXR0YWNoKCkKK3ZvaWQgU2hhZGVyOjph
ZGRSZWYoKQogewotICAgIG1BdHRhY2hDb3VudCsrOworICAgIG1SZWZDb3VudCsrOwogfQogCi12
b2lkIFNoYWRlcjo6ZGV0YWNoKCkKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlKCkKIHsKLSAgICBtQXR0
YWNoQ291bnQtLTsKKyAgICBtUmVmQ291bnQtLTsKIAotICAgIGlmIChtQXR0YWNoQ291bnQgPT0g
MCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3Rh
dHVzKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQtPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKKyAg
ICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOwogICAgIH0KIH0K
IAotYm9vbCBTaGFkZXI6OmlzQXR0YWNoZWQoKSBjb25zdAordW5zaWduZWQgaW50IFNoYWRlcjo6
Z2V0UmVmQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBtQXR0YWNoQ291bnQgPiAwOworICAg
IHJldHVybiBtUmVmQ291bnQ7CiB9CiAKIGJvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxldGlv
bigpIGNvbnN0CkBAIC0yNjIsNiArMjYzLDggQEAgdm9pZCBTaGFkZXI6OnBhcnNlVmFyeWluZ3Mo
KQogCiAgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFH
X0NPT1JEIikgIT0gTlVMTDsKICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHN0cnN0cihtSGxz
bCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNQb2ludFNp
emUgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX1NJWkUiKSAhPSBOVUxMOworICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX0NPT1JEIikg
IT0gTlVMTDsKICAgICB9CiB9CiAKQEAgLTQxNSw3ICs0MTgsNyBAQCBib29sIFNoYWRlcjo6Y29t
cGFyZVZhcnlpbmcoY29uc3QgVmFyeWluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WZXJ0ZXhT
aGFkZXI6OlZlcnRleFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IFNo
YWRlcihjb250ZXh0LCBoYW5kbGUpCitWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJj
ZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRs
ZSkKIHsKIH0KIApAQCAtNDc5LDcgKzQ4Miw3IEBAIHZvaWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0
dHJpYnV0ZXMoKQogICAgIH0KIH0KIAotRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKENv
bnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRsZSkK
K0ZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIs
IEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKIHsKIH0KIApJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaXN0
PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgZ2wKIHsK
QEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgU2hhZGVyCiAgICAgZnJpZW5kIFByb2dyYW07CiAKICAg
cHVibGljOgotICAgIFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKyAg
ICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAogICAg
IHZpcnR1YWwgflNoYWRlcigpOwogCkBAIC02Myw5ICs2Myw5IEBAIGNsYXNzIFNoYWRlcgogICAg
IGJvb2wgaXNDb21waWxlZCgpOwogICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKIAotICAgIHZv
aWQgYXR0YWNoKCk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLSAgICBib29sIGlzQXR0YWNoZWQoKSBj
b25zdDsKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworICAgIHVuc2ln
bmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwogICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRp
b24oKSBjb25zdDsKICAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwogCkBAIC04Miw4ICs4Miw4
IEBAIGNsYXNzIFNoYWRlcgogICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZh
cnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOwogCiAgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7
Ci0gICAgaW50IG1BdHRhY2hDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMg
dGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KLSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8g
RmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBs
b25nZXIgaW4gdXNlCisgICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsgICAgIC8vIE51bWJlciBv
ZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KKyAgICBib29sIG1E
ZWxldGVTdGF0dXM7ICAgICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIg
Y2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCiAKICAgICBjaGFyICptU291cmNl
OwogICAgIGNoYXIgKm1IbHNsOwpAQCAtOTMsOCArOTMsMTAgQEAgY2xhc3MgU2hhZGVyCiAKICAg
ICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAgICBi
b29sIG1Vc2VzUG9pbnRTaXplOworICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwogCi0gICAgQ29u
dGV4dCAqbUNvbnRleHQ7CisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwog
CiAgICAgc3RhdGljIHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOwogICAgIHN0YXRpYyB2b2lkICpt
VmVydGV4Q29tcGlsZXI7CkBAIC0xMjEsNyArMTIzLDcgQEAgY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgogICAgIGZyaWVuZCBQcm9ncmFtOwogCiAgIHB1YmxpYzoKLSAgICBWZXJ0
ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisgICAgVmVydGV4U2hh
ZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CiAKICAgICB+VmVy
dGV4U2hhZGVyKCk7CiAKQEAgLTE0MCw3ICsxNDIsNyBAQCBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBw
dWJsaWMgU2hhZGVyCiBjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKICAg
cHVibGljOgotICAgIEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5k
bGUpOworICAgIEZyYWdtZW50U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSk7CiAKICAgICB+RnJhZ21lbnRTaGFkZXIoKTsKIApJbmRleDogQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuY3BwCShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbmFtZXNwYWNlIGdsCiB7CiAK
IFRleHR1cmU6OkltYWdlOjpJbWFnZSgpCi0gIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHko
ZmFsc2UpLCBzdXJmYWNlKE5VTEwpCisgIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHkoZmFs
c2UpLCBzdXJmYWNlKE5VTEwpLCBmb3JtYXQoR0xfTk9ORSkKIHsKIH0KIApAQCAtMzIsMTMgKzMy
LDE2IEBAIFRleHR1cmU6OkltYWdlOjp+SW1hZ2UoKQogICBpZiAoc3VyZmFjZSkgc3VyZmFjZS0+
UmVsZWFzZSgpOwogfQogCi1UZXh0dXJlOjpUZXh0dXJlKENvbnRleHQgKmNvbnRleHQpIDogbUNv
bnRleHQoY29udGV4dCkKK1RleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2Jq
ZWN0KGlkKQogewogICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7CiAg
ICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKICAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7CiAgICAg
bVdyYXBUID0gR0xfUkVQRUFUOwogCisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0gMDsK
KwogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKICAgICBtRGlydHkgPSB0cnVlOwogICAgIG1J
c1JlbmRlcmFibGUgPSBmYWxzZTsKQEAgLTUxLDcgKzU0LDggQEAgVGV4dHVyZTo6flRleHR1cmUo
KQogCiBCbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKIHsKLSAgICByZXR1cm4gbUNvbnRleHQt
PmdldEJsaXR0ZXIoKTsKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAg
IHJldHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBvbiBz
dWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQpAQCAt
MTczLDcgKzE3NywxNSBAQCBHTHVpbnQgVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKIC8vIFNl
bGVjdHMgYW4gaW50ZXJuYWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1hZ2UK
IEQzREZPUk1BVCBUZXh0dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKLSAgICBy
ZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQpCisgICAgeworICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CisgICAg
fQogfQogCiBpbnQgVGV4dHVyZTo6aW1hZ2VQaXRjaChjb25zdCBJbWFnZSAmaW1nKSBjb25zdApA
QCAtMTg4LDEyNiArMjAwLDI4MiBAQCB2b2lkIFRleHR1cmU6OmxvYWRJbWFnZURhdGEoR0xpbnQg
eG9mZnNlCiB7CiAgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBm
b3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7CiAKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBsb2FkQWxwaGFJbWFnZURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
CisgICAgICAgIGxvYWRMdW1pbmFuY2VJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgIGJyZWFrOwor
CisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZFJHQlVCeXRl
SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAgIGxvYWRSR0I1NjVJ
bWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVJ
bWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICBsb2FkUkdCQTQ0
NDRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgICBsb2FkUkdC
QTU1NTFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZEJH
UkFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTo6
bG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworICAgIAogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ux
NiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzb3VyY2UpOwotICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0g
MDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7CisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSBzb3VyY2VbeF07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVy
ZTo6bG9hZEx1bWluYW5jZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGc7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGE7CisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MV0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAgICB9CisgICAgfQor
fQogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBhID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIHIgPSAwOwotICAgICAgICAgICAgICAgIGcgPSAwOwotICAgICAgICAgICAg
ICAgIGIgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICAgICAgZyA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBiID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIGEgPSAweEZGOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICAgIHIgPSBzb3Vy
Y2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAg
ICAgICAgIGIgPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbMip4
KzFdOwotICAgICAgICAgICAgICAgIGJyZWFrOwordm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNl
QWxwaGFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgICAg
ICAgICBnID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisg
ICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZz
ZXQgKiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsK
K3ZvaWQgVGV4dHVyZTo6bG9hZFJHQlVCeXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhID0gMHhGRjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+
PiAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3RTApID4+IDMp
IHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAo
KHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3ggKiAzICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3Vy
Y2VbeCAqIDMgKyAxXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICog
MyArIDBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQor
ICAgIH0KK30KIAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cit2b2lkIFRleHR1cmU6Omxv
YWRSR0I1NjVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAotICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4ICogNCArIDBdOwotICAgICAgICAgICAgICAgICAg
ICBnID0gc291cmNlW3ggKiA0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2Vb
eCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4ICogNCArIDNdOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0
OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFG
KSA+PiAyKTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkg
Pj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwor
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQorICAgIH0KK30K
IAotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZ2JhID0gc291cmNlMTZbeF07Cit2b2lkIFRleHR1cmU6OmxvYWRSR0JBVUJ5dGVJbWFnZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAm
IDB4MDBGMCkgPj4gNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYgMHgw
RjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gc291cmNlW3ggKiA0ICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbeCAqIDQgKyAwXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4
ICogNCArIDNdOworICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKK3Zv
aWQgVGV4dHVyZTo6bG9hZFJHQkE0NDQ0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVM
TDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYg
OiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikg
fCAoKHJnYmEgJiAweDAwM0UpID4+IDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4
MDApID4+IDEzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Cisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJn
YmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBG
MDApID4+IDgpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAw
KSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7
CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQordm9pZCBU
ZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwog
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBiOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gZzsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHI7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSBhOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7Cisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+
IDMpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+PiAz
KSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKICAg
ICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJl
Ojpsb2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3QKIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zm
c2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIG1lbWNweShkZXN0LCBz
b3VyY2UsIHdpZHRoKjQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpjcmVhdGVTdXJmYWNl
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBJbWFnZSAqaW1n
KQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAKICAgICBpZiAod2lkdGggIT0gMCAm
JiBoZWlnaHQgIT0gMCkKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNl
KCktPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBzZWxlY3RGb3Jt
YXQoZm9ybWF0KSwgRDNEUE9PTF9TWVNURU1NRU0sICZuZXdTdXJmYWNlLCBOVUxMKTsKKyAgICAg
ICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0g
d2lkdGg7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
aWYgKElzQ29tcHJlc3NlZChmb3JtYXQpICYmICh3aWR0aCAlIDQgIT0gMCB8fCBoZWlnaHQgJSA0
ICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlzTXVsdDQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGludCB1cHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICghaXNN
dWx0NCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9IDE7
CisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsKKyAgICAgICAgICAgICAgICB1
cHNhbXBsZUNvdW50Kys7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQgPT0g
MCAmJiByZXF1ZXN0SGVpZ2h0ICUgNCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaXNNdWx0NCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKKyAgICAgICAg
fQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUo
cmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBzZWxl
Y3RGb3JtYXQoZm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJm5ld1RleHR1cmUsIE5VTEwpOwogCiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAg
ICAgIH0KKworICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNo
LCAmbmV3U3VyZmFjZSk7CisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKICAgICB9CiAK
ICAgICBpZiAoaW1nLT5zdXJmYWNlKSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKQEAgLTMxNiwx
OCArNDg0LDIzIEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0wKICAg
ICBpbWctPndpZHRoID0gd2lkdGg7CiAgICAgaW1nLT5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgaW1n
LT5mb3JtYXQgPSBmb3JtYXQ7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBj
cmVhdGVTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKIAotICAgIGlmIChwaXhl
bHMgIT0gTlVMTCAmJiBuZXdTdXJmYWNlICE9IE5VTEwpCisgICAgaWYgKHBpeGVscyAhPSBOVUxM
ICYmIGltZy0+c3VyZmFjZSAhPSBOVUxMKQogICAgIHsKICAgICAgICAgRDNETE9DS0VEX1JFQ1Qg
bG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZs
b2NrZWQsIE5VTEwsIDApOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+
TG9ja1JlY3QoJmxvY2tlZCwgTlVMTCwgMCk7CiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKIAogICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICAgICAgbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICAgICAgaW1nLT5z
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbWctPmRpcnR5ID0g
dHJ1ZTsKQEAgLTMzNiw5ICs1MDksMzYgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVp
IHdpZHRoLCBHTAogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0dXJl
OjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJlOjpz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcp
CiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsgeW9m
ZnNldCA+IGltZy0+aGVpZ2h0KSByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
Y3JlYXRlU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7CisKKyAgICBpZiAocGl4
ZWxzICE9IE5VTEwgJiYgaW1nLT5zdXJmYWNlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNl
LT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbWVtY3B5KGxvY2tlZC5wQml0cywgcGl4ZWxzLCBpbWFnZVNpemUpOworICAg
ICAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpbWctPmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7
Cit9CisKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
ZykKK3sKKyAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5
b2Zmc2V0ID4gaW1nLT5oZWlnaHQpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIEQzRExPQ0tFRF9SRUNU
IGxvY2tlZDsKICAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxv
Y2tlZCwgTlVMTCwgMCk7CkBAIC0zNTIsNiArNTUyLDQ3IEBAIHZvaWQgVGV4dHVyZTo6c3ViSW1h
Z2UoR0xpbnQgeG9mZnNldCwgR0wKICAgICB9CiAKICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIElt
YWdlICppbWcpCit7CisgICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVp
Z2h0ICsgeW9mZnNldCA+IGltZy0+aGVpZ2h0KQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZm9y
bWF0ICE9IGdldEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUkVDVCB1cGRhdGVS
ZWdpb247CisgICAgdXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OworICAgIHVwZGF0ZVJlZ2lv
bi5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKKyAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKKyAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsKKworICAgIEQz
RExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+
TG9ja1JlY3QoJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbiwgMCk7CisKKyAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9y
bWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBpbWFnZVNpemUgLyBpbnB1dFBpdGNoOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
bWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAo
dm9pZCopKChCWVRFKilwaXhlbHMgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOworICAg
ICAgICB9CisgICAgICAgIGltZy0+c3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KKworICAg
IGltZy0+ZGlydHkgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQpAQCAtNDQyLDcgKzY4Myw3IEBAIGludCBU
ZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKICAgICByZXR1cm4gbUJhc2VUZXh0dXJlID8gbUJh
c2VUZXh0dXJlLT5HZXRMZXZlbENvdW50KCkgOiAwOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1cmUy
RChDb250ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK1RleHR1cmUyRDo6VGV4dHVy
ZTJEKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKICAg
ICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7CkBAIC00NjQsNiArNzA1LDExIEBAIEdMZW51bSBU
ZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7CiB9
CiAKK0dMZW51bSBUZXh0dXJlMkQ6OmdldEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1J
bWFnZUFycmF5WzBdLmZvcm1hdDsKK30KKwogLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sg
dGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21w
bGV0ZSB0ZXh0dXJlCiAvLyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleElt
YWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBs
ZXZlbHMuCiAvLyBDYWxsIHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1
cmUgbXVzdCBiZSBkZWZpbmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWln
aHQuCkBAIC01MjIsNiArNzY4LDEzIEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBs
ZXZlbCwgR0wKICAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKIH0KIAor
dm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhl
bHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOworfQorCiB2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVj
dChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5zdXJm
YWNlICE9IE5VTEwpOwpAQCAtNTU5LDE3ICs4MTIsMzEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbW1p
dFJlY3QoR0xpbnQgbGV2ZWwsIAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Ci0gICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0
UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQogfQog
Ci12b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBS
ZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywg
Jm1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVy
ZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKnNvdXJjZSkKIHsKICAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCkpCiAgICAgewogICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwogICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgfQogCiAgICAg
aWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCiAg
ICAgewpAQCAtNTkxLDcgKzg1OCw3IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQg
bGV2ZWwsIEcKICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7
CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5
U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJT
dG9yYWdlICpzb3VyY2UpCiB7CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5
W2xldmVsXS53aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhl
aWdodCkKICAgICB7CkBAIC02ODksNiArOTU2LDExIEBAIGJvb2wgVGV4dHVyZTJEOjppc0NvbXBs
ZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlMkQ6OmlzQ29t
cHJlc3NlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3JtYXQoKSk7
Cit9CisKIC8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0
aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC04NzEsMTYgKzEx
NDMsMTcgQEAgdm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiAgICAgfQogfQogCi1D
b2xvcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorUmVu
ZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCiB7CiAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7
CiAgICAgfQogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAgICAgewotICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlz
LCB0YXJnZXQpOworICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIo
aWQoKSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCkpOworICAgICAg
ICBtQ29sb3JidWZmZXJQcm94eS0+YWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlclByb3h5OwpAQCAtODk4LDcgKzExNzEsNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUCiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotVGV4dHVy
ZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250
ZXh0KQorVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJl
KGlkKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKIApAQCAtOTI3LDYgKzEyMDAsMTEgQEAgR0xl
bnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAogICAgIHJldHVybiBHTF9URVhU
VVJFX0NVQkVfTUFQOwogfQogCitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEZvcm1hdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdDsKK30KKwogdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAg
ICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKQEAgLTk1Nyw2ICsxMjM1LDEzIEBA
IHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCAKICAgICBzZXRJbWFnZSg1
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMpOwogfQogCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSh3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtm
YWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Cit9CisKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1p
dFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBpbnQgZmFj
ZSA9IGZhY2VJbmRleChmYWNlVGFyZ2V0KTsKQEAgLTk5NCw4ICsxMjc5LDE4IEBAIHZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGYKIAogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewot
ICAgIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgoZmFjZSldW2xldmVsXSk7Ci0gICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSkpCisgICAgewor
ICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJl
c3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBp
bWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKSkK
KyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOworICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2Jq
ZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2Ug
ODEuCkBAIC0xMDY0LDYgKzEzNTksMTEgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wbGV0
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6Omlz
Q29tcHJlc3NlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3JtYXQo
KSk7Cit9CisKIC8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJv
bSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTEy
NzgsNyArMTU3OCw3IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVyZShHTGkK
ICAgICByZXR1cm4gIXRleHR1cmVPa2F5OwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5
SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gZmFjZSwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkK
IHsKICAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KGZhY2UpOwogCkBAIC0x
Mjg3LDYgKzE1ODcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSBm
YQogICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKICAgICAgICAgcHVzaFRleHR1cmUo
bVRleHR1cmUsIHRydWUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVu
ZGVyVGFyZ2V0KCk7CisgICAgfQogCiAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAKQEAg
LTEzNDAsNyArMTY0NCw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0
Q3UKICAgICByZXR1cm4gKFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5VTEw7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCiB7CiAgICAgR0xzaXpl
aSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0ud2lkdGg7CiAKQEAg
LTEzNTYsNyArMTY2MCw3IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVu
dW0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZ2V0UmVuZGVyVGFyZ2V0KGZhY2Up
OworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKGxldmVsIDwg
bGV2ZWxDb3VudCgpKQpAQCAtMTQ0MCwxOCArMTc0NCwxOSBAQCB2b2lkIFRleHR1cmVDdWJlTWFw
OjpnZW5lcmF0ZU1pcG1hcHMoKQogICAgIH0KIH0KIAotQ29sb3JidWZmZXIgKlRleHR1cmVDdWJl
TWFwOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorUmVuZGVyYnVmZmVyICpUZXh0dXJl
Q3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIUlzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwogICAg
IH0KIAogICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CiAKICAgICBp
ZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCiAgICAgewotICAgICAgICBtRmFjZVByb3hp
ZXNbZmFjZV0gPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsKKyAg
ICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgVGV4
dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJveGll
c1tmYWNlXS0+YWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNl
XTsKQEAgLTE0NzUsNiArMTc4MCwxNiBAQCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94
eTo6VGV4dHVyCiAgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CiB9CiAKK3ZvaWQgVGV4dHVyZTo6VGV4dHVyZUNvbG9y
YnVmZmVyUHJveHk6OmFkZFJlZigpIGNvbnN0Cit7CisgICAgbVRleHR1cmUtPmFkZFJlZigpOwor
fQorCit2b2lkIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpyZWxlYXNlKCkgY29u
c3QKK3sKKyAgICBtVGV4dHVyZS0+cmVsZWFzZSgpOworfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAq
VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFJlbmRlclRhcmdldCgpCiB7CiAg
ICAgaWYgKG1SZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKQEAgLTE0ODQs
MTQgKzE3OTksMTkgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmU6OlRleHR1cmVDb2xvcgog
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi1pbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9y
YnVmZmVyUHJveHk6OmdldFdpZHRoKCkKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgo
KTsKIH0KIAotaW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQo
KQoraW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKSBjb25z
dAogewogICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KCk7CiB9CiAKK0dMZW51bSBUZXh0
dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRleHR1cmUtPmdldEZvcm1hdCgpOworfQorCiB9CkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1
cmUuaAkocmV2aXNpb24gNjY1NDkpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNz
IENvbnRleHQ7CiBjbGFzcyBCbGl0OwogCiBlbnVtCkBAIC0zNCwxMCArMzMsMTAgQEAgZW51bQog
ICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9IDEyICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJ
WkUKIH07CiAKLWNsYXNzIFRleHR1cmUKK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRP
YmplY3QKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoQ29udGV4dCAqY29udGV4
dCk7CisgICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwogCiAgICAgdmlydHVhbCB+VGV4
dHVyZSgpOwogCkBAIC01NiwxNSArNTUsMTkgQEAgY2xhc3MgVGV4dHVyZQogICAgIEdMdWludCBn
ZXRXaWR0aCgpIGNvbnN0OwogICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsKIAorICAgIHZp
cnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXND
b21wbGV0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29u
c3QgPSAwOwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwor
ICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwogCiAgICAgYm9v
bCBpc0RpcnR5KCkgY29uc3Q7CiAKKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVf
VEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAvLyBFdmVyeSB0ZXh0dXJlIHRh
a2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVz
ZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCisKICAg
cHJvdGVjdGVkOgogICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OwogICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eTsKQEAgLTc0LDEwICs3NywxNCBAQCBjbGFz
cyBUZXh0dXJlCiAgICAgICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1
cmUsIEdMZW51bSB0YXJnZXQpOwogICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgMkQtbGlrZSB0
ZXh0dXJlIHRhcmdldCAoR0xfVEVYVFVSRV8yRCBvciBvbmUgb2YgdGhlIGN1YmUgZmFjZSB0YXJn
ZXRzKQogCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRSZWYoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2UoKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKIAotICAgICAgICB2aXJ0dWFsIGludCBnZXRXaWR0
aCgpOwotICAgICAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKTsKKyAgICAgICAgdmlydHVhbCBp
bnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OwogCiAgICAgICBw
cml2YXRlOgogICAgICAgICBUZXh0dXJlICptVGV4dHVyZTsKQEAgLTEwMiwxMyArMTA5LDEwIEBA
IGNsYXNzIFRleHR1cmUKICAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChHTGVudW0g
Zm9ybWF0KTsKICAgICBpbnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25zdDsKIAot
ICAgIEdMZW51bSBtTWluRmlsdGVyOwotICAgIEdMZW51bSBtTWFnRmlsdGVyOwotICAgIEdMZW51
bSBtV3JhcFM7Ci0gICAgR0xlbnVtIG1XcmFwVDsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7Ci0gICAg
dm9pZCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICBib29sIHN1
YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQgc2V0Q29tcHJl
c3NlZEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICBi
b29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CiAKICAgICB2b2lkIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKIApAQCAtMTI4LDQ1ICsxMzIsNzIgQEAgY2xhc3MgVGV4dHVyZQogCiAgICAg
QmxpdCAqZ2V0QmxpdHRlcigpOwogCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsKKwogICAg
IHVuc2lnbmVkIGludCBtV2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1IZWlnaHQ7Ci0KLSAgICBp
bnQgbGV2ZWxDb3VudCgpIGNvbnN0OworICAgIEdMZW51bSBtTWluRmlsdGVyOworICAgIEdMZW51
bSBtTWFnRmlsdGVyOworICAgIEdMZW51bSBtV3JhcFM7CisgICAgR0xlbnVtIG1XcmFwVDsKIAog
ICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKIAotICAg
IENvbnRleHQgKm1Db250ZXh0OworICAgIHZvaWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OworCisgICAgdm9pZCBsb2FkQWxwaGFJbWFnZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JVQnl0ZUltYWdlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxv
YWRSR0I1NjVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZFJHQkFVQnl0ZUltYWdlRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAg
dm9pZCBsb2FkUkdCQTQ0NDRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQTU1NTFJbWFnZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29u
c3Q7CisgICAgdm9pZCBsb2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5
ICptQmFzZVRleHR1cmU7IC8vIFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVkIGNs
YXNzIGlzIGFzc3VtZWQgdG8gb3duIGEgc3Ryb25nIHBvaW50ZXIuCi0gICAgYm9vbCBtRGlydHlN
ZXRhRGF0YTsKLSAgICBib29sIG1Jc1JlbmRlcmFibGU7CiAKICAgICBib29sIG1EaXJ0eTsKKyAg
ICBib29sIG1EaXJ0eU1ldGFEYXRhOworICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKIAotICAgIHZv
aWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQg
Y3JlYXRlU3VyZmFjZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgSW1hZ2UgKmltZyk7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQog
ewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQpOwor
ICAgIGV4cGxpY2l0IFRleHR1cmUyRChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmUyRCgpOwog
CiAgICAgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRGb3JtYXQoKSBj
b25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisgICAgdm9p
ZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsK
KyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CiAKICAgICBib29sIGlzQ29tcGxldGUoKSBj
b25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3Ji
dWZmZXIoR0xlbnVtIHRhcmdldCk7CisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldENvbG9y
YnVmZmVyKEdMZW51bSB0YXJnZXQpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmUyRCk7CkBAIC0xNzQsMzAgKzIwNSwyOSBAQCBjbGFzcyBUZXh0dXJl
MkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpj
cmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Cisg
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOwogCiAgICAgdmlydHVhbCBib29sIGRpcnR5SW1hZ2VEYXRhKCkgY29uc3Q7CiAKKyAgICBi
b29sIHJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAgICAgdm9pZCBjb21taXRSZWN0KEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CiAKICAgICBJbWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZFTFNd
OwogCiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwogCi0gICAgVGV4dHVyZUNvbG9y
YnVmZmVyUHJveHkgKm1Db2xvcmJ1ZmZlclByb3h5OwotCi0gICAgYm9vbCByZWRlZmluZVRleHR1
cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJv
eHk7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiB7CiAgIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChDb250ZXh0ICpjb250ZXh0KTsKKyAg
ICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmVDdWJl
TWFwKCk7CiAKICAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEZv
cm1hdCgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscyk7CiAgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBA
IC0yMDYsMTUgKzIzNiwxOSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJl
CiAgICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9p
ZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKKyAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOworCiAgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOwot
ICAgIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIHN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UgKnNvdXJjZSk7CisgICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsK
IAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0
dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0
dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwpAQCAt
MjIyLDYgKzI1Niw3IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKICAg
ICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3Vy
ZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgYm9v
bCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0OwogCkBAIC0yNDEsOSArMjc2LDcgQEAgY2xhc3MgVGV4
dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5
ICptVGV4dHVyZTsKIAotICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptRmFjZVByb3hpZXNb
Nl07Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07CiB9OwogfQog
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiA2NjU0OSkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcg
KzE4MCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFN
RUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgIH0KQEAgLTE4OSw3ICsxODksMTUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xlbnVtIAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRhcmdldCA9PSBHTF9GUkFN
RUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUmVh
ZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRh
cmdldCA9PSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5iaW5kRHJhd0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01NTksNyAr
NTY3LDcgQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1F
QlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAg
ICAgICAgfQpAQCAtNTY4LDcgKzU3NiwxNSBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Cisg
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlcigpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZm
ZXItPmNvbXBsZXRlbmVzcygpOwogICAgICAgICB9CkBAIC03MjAsMjIgKzczNiwxMDcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewot
ICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgaWYgKGxl
dmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxl
dmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIGlmICh3
aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRo
KSkgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0gMCB8
fCBpbWFnZVNpemUgPCAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhl
aWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+
IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwg
MCkKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJFX1NJ
WkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Cisg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgICAg
ICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8
fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQor
CisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIHVsdGltYXRlbHkgd2UgZG9uJ3Qg
c3VwcG9ydCBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQg
c3dpdGNoIGZhaWxlZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXpl
ICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3Jt
YXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisg
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkBAIC03NjMsMTcg
Kzg2NCw5NSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJECiAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdo
dCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAg
JiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgaWYgKHhv
ZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IAor
ICAgICAgICAgICAgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+
IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKHhvZmZzZXQgIT0gMCB8fCB5b2Zmc2V0ICE9IDApCisgICAgICAgIHN3aXRj
aCAoZm9ybWF0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDoKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRo
ID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOyAvLyBUaGUgdGV4dHVyZSBiZWluZyBvcGVyYXRlZCBvbiBpcyBub3QgYSBj
b21wcmVzc2VkIHRleHR1cmUuCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBp
biB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBmb3JtYXQgc3dpdGNoIGhhcyBmYWlsZWQu
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1
dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAlIDQg
IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRo
aXMgcG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5v
dCBleGlzdCB1bmxlc3MgRFhUMSB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1
cmUtPmdldFdpZHRoKCkpIHx8IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAw
ICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29t
cHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBp
bWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6
OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUt
PmdldFdpZHRoKCkpIHx8IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYm
IGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJl
c3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpA
QCAtODM0LDYgKzEwMTMsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51
bSB0CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CiAgICAgICAgICAgY2FzZSBH
TF9SR0I6CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIENvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5vdCBz
dXBwb3J0ZWQgaGVyZSwgYnV0IGlmIHRoZXkgYXJlIHVuc3VwcG9ydGVkIGFsdG9nZXRoZXIsCisg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogLy8gYSBkaWZm
ZXJlbnQgZXJyb3IgaXMgZ2VuZXJhdGVkIHRoYW4gb3RoZXJ3aXNlLiBUaGF0IGlzIGhhbmRsZWQg
YmVsb3cuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODQ4LDggKzEwMjksMzEgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2Ug
PSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAg
ICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQg
fHwgCisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAg
ICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqc291cmNlID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAtODU4LDYgKzEwNjIsMTEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICAg
ICAgfQpAQCAtODcwLDYgKzEwNzksMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2Uy
RChHTGVudW0gdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQpAQCAtOTE2LDggKzExMzAsMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRG
cmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpzb3VyY2UgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC05MjcsNiArMTE1MSwx
MSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5jb3B5U3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChn
bDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQpAQCAtOTM4LDYgKzExNjcsMTEgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBA
IC0xNTU5LDcgKzE3OTMsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZG
RVIgfHwgcmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYg
KCh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZG
RVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAg
ICAgICB8fCByZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpA
QCAtMTU2OCw5ICsxODAzLDIwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7CisgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1
ZmZlcigpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQor
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0xNjA0LDcgKzE4NTAsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
RlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFy
Z2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0xNjM2LDYgKzE4
ODIsMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRleHRhcmdldCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6CkBAIC0xNjY3LDkgKzE5MTgsMjAgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gTlVMTDsKKyAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Cisg
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRl
eHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJI
YW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0g
MCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0g
MCB8fCAhZnJhbWVidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTE3NzAsNiAr
MjAzMiwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTIyMjUsMTQgKzI0OTIsMjkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAw
KQorICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0g
R0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZF
Ul9BTkdMRSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSKQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVy
SGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKQEAgLTIyNDAsMTYgKzI1
MjIsMTYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogICAgICAg
ICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBj
YXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50
VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyVHlwZSgpOwot
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50
VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAg
ICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKCk7
IAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FU
VEFDSE1FTlQ6ICAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1
ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAgCi0g
ICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigp
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7
CisgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CkBAIC0yNTA4LDcgKzI3OTAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1JF
RF9TSVpFOgogICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIo
KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRSZWRTaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIq
PihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldFJlZFNpemUoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKQEAgLTI1MTgs
NyArMjgwMCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGUKICAg
ICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKICAgICAgICAgICAg
ICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVm
ZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXItPmdl
dFN0b3JhZ2UoKSktPmdldEdyZWVuU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjUyOCw3ICsyODEwLDcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZQogICAgICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1
ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
ciktPmdldEJsdWVTaXplKCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldEJs
dWVTaXplKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICB7CkBAIC0yNTM4LDcgKzI4MjAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0FM
UEhBX1NJWkU6CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZl
cigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0
YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEFscGhhU2l6ZSgp
OworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVm
ZmVyKj4ocmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCkpLT5nZXRBbHBoYVNpemUoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKQEAg
LTI1NDgsNyArMjgzMCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGUKICAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRToKICAgICAg
ICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkRl
cHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZmZXIqPihyZW5kZXJidWZm
ZXItPmdldFN0b3JhZ2UoKSktPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjU1OCwxMyArMjg0MCwy
NSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKICAgICAgICAgICAgICAgICBp
ZiAocmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZl
cio+KHJlbmRlcmJ1ZmZlciktPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlci0+
Z2V0U3RvcmFnZSgpKS0+Z2V0U3RlbmNpbFNpemUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xFOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldFNhbXBs
ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
fQpAQCAtMjk5Myw3ICszMjg3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJm
dihHTHVpbgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJpYlN0
YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgICAgICAgICAg
Y29uc3QgZ2w6OkF0dHJpYnV0ZVN0YXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKGluZGV4KTsKIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAg
ICAgICAgIHsKQEAgLTMwMTMsNyArMzMwNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4
QXR0cmliZnYoR0x1aW4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJp
YlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0
ZS5tQm91bmRCdWZmZXI7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJp
YlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKQEAgLTMwNDYsNyArMzM0MCw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW4KICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGds
OjpBdHRyaWJ1dGVTdGF0ZSBhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0
YXRlKGluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVTdGF0ZSAmYXR0cmli
U3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKICAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7CkBAIC0zMDY2LDcgKzMzNjAsNyBAQCB2
b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWluCiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5tQm91bmRCdWZmZXIuaWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CiAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCkBAIC0zNDgxLDYgKzM3NzUsMTcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAgICB7
CkBAIC0zNTIxLDEwICszODI2LDEwIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNv
bXBpbGVyKHYKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVBTkdMRShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgVFJBQ0UoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4
JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAg
IHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAg
dHJ5CiAgICAgewpAQCAtMzU0MywxMiArMzg0OCwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0xlCiAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgICAg
IGNhc2UgR0xfUkdCNTY1OgogICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6CisgICAg
ICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICBjYXNlIEdMX1JH
QjhfT0VTOgorICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
IHx8IHdpZHRoID4gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSB8fCBoZWlnaHQgPiBnbDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFKQorICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAg
fHwgd2lkdGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhf
UkVOREVSQlVGRkVSX1NJWkUgfHwgc2FtcGxlcyA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtMzU1Nyw3ICsz
ODY1LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICBpZiAoc2FtcGxlcyA+IGNv
bnRleHQtPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5k
bGUoKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQpAQCAtMzU2NSwxNSArMzg3OSwyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xlCiAgICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkRlcHRoYnVmZmVyKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJT
dG9yYWdlKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAg
ICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICAgICAgICAgIGNhc2UgR0xfUkdCNTY1Ogot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkNvbG9yYnVm
ZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSk7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCOF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpDb2xvcmJ1ZmZl
cih3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcykpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OlN0ZW5jaWxidWZmZXIo
d2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZl
clN0b3JhZ2UobmV3IGdsOjpTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9y
YWdlKG5ldyBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTM1ODYsNiArMzkwNSwx
MSBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlCiAgICAgfQogfQog
Cit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgMCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCiB2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZUNv
dmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIFRSQUNFKCIo
R0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBpbnZl
cnQpOwpAQCAtMzk1OCw2ICs0MjgyLDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChH
TGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xf
QkdSQV9FWFQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2Vz
IGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CisgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOyAK
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwogICAgICAgICB9CkBAIC0zOTcxLDYgKzQzMDcsMTkgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVCB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAt
NDE0Niw2ICs0NDk1LDExIEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0g
dGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXND
b21wcmVzc2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKQEAgLTQxNTcsNiArNDUxMSwxMSBAQCB2b2lkIF9f
c3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJ
bWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNDk2NSw3ICs1MzI0LDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRl
eCwgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6
ZWQgPT0gR0xfVFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0
eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5OTgsNiArNTM1Nyw1NCBAQCB2
b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCit2b2lk
IF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMaW50IHNyY1gwLCBHTGludCBzcmNZ
MCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdM
aW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQoreworICAgIFRSQUNFKCIoR0xp
bnQgc3JjWDAgPSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQgc3JjWDEgPSAlZCwgR0xpbnQg
c3JjWTEgPSAlZCwgIgorICAgICAgICAgICJHTGludCBkc3RYMCA9ICVkLCBHTGludCBkc3RZMCA9
ICVkLCBHTGludCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9ICVkLCAiCisgICAgICAgICAgIkdM
Yml0ZmllbGQgbWFzayA9IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAweCVYKSIsCisgICAgICAgICAg
c3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWDEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBt
YXNrLCBmaWx0ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZpbHRlcikK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVG
RkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAh
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RYMSAtIGRz
dFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJTY2FsaW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKKyAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRG
cmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RY
MSwgZHN0WTEsIG1hc2spOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBp
eGVscykKIHsKQEAgLTUwMjcsNiArNTQzNCw3IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUKICAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1td
ID0KICAgICB7CiAgICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKKyAgICAgICAgeyJnbEJs
aXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCiAgICAgfTsKIAogICAgIGZvciAoaW50IGV4
dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4
dCsrKQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2aXNpb24gNjY1NDkpCisr
KyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCwxMSArMTQ0LDEzIEBAIEVYUE9SVFMKICAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAgICAg
ICAgIEAxNDIKIAogICAgIDsgRXh0ZW5zaW9ucwotICAgIGdsVGV4SW1hZ2UzRE9FUwkJCQkJQDE0
MworICAgIGdsVGV4SW1hZ2UzRE9FUyAgICAgICAgICAgICAgICAgQDE0MworICAgIGdsQmxpdEZy
YW1lYnVmZmVyQU5HTEUgICAgICAgICAgQDE0OQorICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlQU5HTEUgQDE1MAogICAgIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwotICAgIGds
Q3JlYXRlQ29udGV4dAkJCQkJQDE0NCBOT05BTUUKLSAgICBnbERlc3Ryb3lDb250ZXh0CQkJCUAx
NDUgTk9OQU1FCi0gICAgZ2xNYWtlQ3VycmVudAkJCQkJQDE0NiBOT05BTUUKLSAgICBnbEdldEN1
cnJlbnRDb250ZXh0CQkJCUAxNDcgTk9OQU1FCisgICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAg
ICAgICAgICBAMTQ0IE5PTkFNRQorICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAg
QDE0NSBOT05BTUUKKyAgICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYgTk9O
QU1FCisgICAgZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQogICAg
IGdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCShy
ZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjE3LDEwICsyMTcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1
ZmZlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuXFJlc291cmNlTWFuYWdlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpAQCAtMjk5LDEwICszMDcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VN
YW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuXFNoYWRlci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5o
CShyZXZpc2lvbiA2NjU0OSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAKICNkZWZpbmUgR0xfQVBJQ0FMTAogI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKSW5kZXg6IEFOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDY2NTQ5KQorKysgQU5HTEUvc3JjL2xpYkdMRVN2
Mi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDQ5IEBAIEdMc2l6
ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW4KICAgICByZXR1cm4gKHJhd1BpdGNo
ICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOwogfQogCitHTHNpemVpIENvbXB1
dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCk7CisKKyAgICByZXR1cm4gOCAqIHdpZHRoIC8g
NDsKK30KKworR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
eworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gOCAqIChH
THNpemVpKWNlaWwoKGZsb2F0KXdpZHRoIC8gNC4wZikgKiAoR0xzaXplaSljZWlsKChmbG9hdClo
ZWlnaHQgLyA0LjBmKTsKK30KKworYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCkKK3sK
KyAgICBpZihmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAg
ICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2Yg
YSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMTk2LDYgKzIzOSw3IEBAIGludCBDb21wdXRlUGl4
ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW4KICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7CiAgICAgICAgICAgY2FzZSBH
TF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOwogICAg
ICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNo
YXIpICogNDsKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAgICAgcmV0dXJuIHNpemVv
Zih1bnNpZ25lZCBjaGFyKSAqIDQ7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIyOCw2ICsyNzIsNyBAQCBib29sIENoZWNr
VGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hCiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToK
ICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKQEAgLTU5OSwxMiArNjQ0LDMxIEBAIEQzREZP
Uk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW4KICAgICBzd2l0Y2ggKGZvcm1hdCkK
ICAgICB7CiAgICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAg
ICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNhc2UgR0xfUkdCNV9BMToK
KyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4
Qjg7CiAgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1
RzZCNTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
WDhSOEc4Qjg7CiAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0lOREVYODogICAgICAgcmV0dXJuIEQzREZNVF9EMjRTODsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIAorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUzogcmV0dXJuIEQzREZNVF9EMjRTODsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
ICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CiAgICAgfQogfQogCitHTHNpemVpIEdldFNh
bXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKK3sKKyAg
ICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHlwZTsKK30KKworRDNETVVMVElTQU1QTEVf
VFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCit7Cisg
ICAgaWYgKHNhbXBsZXMgPD0gMSkKKyAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsK
K30KKwogfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCShyZXZpc2lvbiA2NjU0OSkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYg
KzExLDcgQEAKIAogI2RlZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjaW5jbHVkZSA8ZDNkOS5oPgogCiBuYW1lc3BhY2Ug
Z2wKQEAgLTI4LDYgKzI5LDkgQEAgaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBp
bnQgKgogCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7
CiBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRj
aChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNz
ZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKK2Jv
b2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7
CiBib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
OwpAQCAtNTYsNiArNjAsOCBAQCB1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFU
IHN0CiBib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNp
emVpIHByaW1pdGl2ZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJ
VkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KTsKIEQzREZP
Uk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNETVVMVElT
QU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMp
OworR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9U
WVBFIHR5cGUpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjU1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMzEgIFpoZW55YW8gTW8g
IDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSb2xsIEFOR0xFIHVuZGVyIHdlYmtpdCB0byByNDAyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTAwNAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKTogVXBkYXRlIHRoZSBj
b2RlIHRvIHVzZSBuZXdlciBBTkdMRSBpbnRlcmZhY2UuCisKIDIwMTAtMDgtMzEgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjY1NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKIAotI2luY2x1ZGUgIkFO
R0xFL1Jlc291cmNlTGltaXRzLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgpAQCAtMTg2LDIz
ICsxODUsMjMgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogCiAg
ICAgVEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNlczsKIAotICAgIEFOR0xFUmVzb3VyY2Vz
Lm1heFZlcnRleEF0dHJpYnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzKTsK
LSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDA7Ci0gICAgZ2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAm
QU5HTEVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3Vy
Y2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0
b3JzKTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICBBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICBBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMubWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmli
cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1Zl
Y3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlO
R19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIEFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0
dXJlSW1hZ2VVbml0cyk7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKIAogICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgotICAgIEFOR0xF
UmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0gMTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3
QnVmZmVycyA9IDE7CiAgICAgCiAgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNv
dXJjZXMpOwogICAgIAo=
</data>
<flag name="review"
          id="55061"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="55062"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66232</attachid>
            <date>2010-09-01 10:36:15 -0700</date>
            <delta_ts>2010-09-01 10:47:07 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>r402.patch</filename>
            <type>text/plain</type>
            <size>352225</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDYwIEBACisyMDEwLTA4LTMxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbCBBTkdMRSB1
bmRlciB3ZWJraXQgdG8gcjQwMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDUwMDQKKworICAgICAgICAqIGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6Cisg
ICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmg6IFJlbW92ZWQuCisgICAg
ICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvQmFzZVR5cGVzLmg6CisgICAgICAgIChnZXRQcmVjaXNpb25TdHJpbmcpOgorICAgICAgICAo
Z2V0QmFzaWNTdHJpbmcpOgorICAgICAgICAoSXNTYW1wbGVyKToKKyAgICAgICAgKGdldFF1YWxp
ZmllclN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAg
ICAgICAoQnVpbHRJbkNvbnN0YW50cyk6CisgICAgICAgIChJZGVudGlmeUJ1aWx0SW5zKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9Jbml0aWFsaXplRGxsLmNwcDoKKyAgICAgICAgKEluaXRQcm9jZXNzKToKKyAgICAgICAgKERl
dGFjaFByb2Nlc3MpOgorICAgICAgICAoSW5pdFRocmVhZCk6CisgICAgICAgIChEZXRhY2hUaHJl
YWQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmg6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvSW50ZXJtZWRpYXRlLmNwcDoKKyAgICAgICAgKEdldEhpZ2hlclByZWNpc2lvbik6Cisg
ICAgICAgIChUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKToKKyAgICAgICAgKFRJbnRlcm1l
ZGlhdGU6OnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFk
ZENvbW1hKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKToKKyAgICAgICAg
KFRJbnRlcm1CaW5hcnk6OnByb21vdGUpOgorICAgICAgICAoQ29tcGFyZVN0cnVjdCk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwOgorICAgICAgICAoVE91dHB1dEdMU0w6
OndyaXRlRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdFVu
YXJ5KToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdEJyYW5jaCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL091dHB1dEhMU0wuY3BwOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRl
cik6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpo
YW5kbGVFeGNlc3NpdmVMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjphZGRDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAg
KFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VD
b250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJh
bUVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKToKKyAg
ICAgICAgKFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcik6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjphZGRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRD
b25zdFN0cnVjdCk6CisgICAgICAgIChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAo
R2V0R2xvYmFsUGFyc2VDb250ZXh0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUG9vbEFsbG9j
Lmg6CisgICAgICAgIChUUG9vbEFsbG9jYXRvcjo6dEhlYWRlcjo6dEhlYWRlcik6CisgICAgICAg
IChwb29sX2FsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAocG9vbF9hbGxvY2F0b3I6OmRl
YWxsb2NhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAg
ICAgKFNoSW5pdGlhbGl6ZSk6CisgICAgICAgIChTaEZpbmFsaXplKToKKyAgICAgICAgKFNoSW5p
dEJ1aWx0SW5SZXNvdXJjZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNw
cDoKKyAgICAgICAgKFRUeXBlOjpnZXRTdHJ1Y3RTaXplKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKFRWYXJpYWJsZTo6c2V0UXVhbGlmaWVyKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvVHlwZXMuaDoKKyAgICAgICAgKFRUeXBlOjpUVHlwZSk6Cisg
ICAgICAgIChUVHlwZTo6Z2V0QmFzaWNUeXBlKToKKyAgICAgICAgKFRUeXBlOjpzZXRCYXNpY1R5
cGUpOgorICAgICAgICAoVFR5cGU6OmdldFByZWNpc2lvbik6CisgICAgICAgIChUVHlwZTo6c2V0
UHJlY2lzaW9uKToKKyAgICAgICAgKFRUeXBlOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVFR5
cGU6OnNldFF1YWxpZmllcik6CisgICAgICAgIChUVHlwZTo6Z2V0Tm9taW5hbFNpemUpOgorICAg
ICAgICAoVFR5cGU6OnNldE5vbWluYWxTaXplKToKKyAgICAgICAgKFRUeXBlOjppc01hdHJpeCk6
CisgICAgICAgIChUVHlwZTo6c2V0TWF0cml4KToKKyAgICAgICAgKFRUeXBlOjppc0FycmF5KToK
KyAgICAgICAgKFRUeXBlOjpnZXRBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OnNldEFycmF5
U2l6ZSk6CisgICAgICAgIChUVHlwZTo6Z2V0TWF4QXJyYXlTaXplKToKKyAgICAgICAgKFRUeXBl
OjpzZXRNYXhBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OmNsZWFyQXJyYXluZXNzKToKKyAg
ICAgICAgKFRUeXBlOjpzZXRBcnJheUluZm9ybWF0aW9uVHlwZSk6CisgICAgICAgIChUVHlwZTo6
Z2V0QXJyYXlJbmZvcm1hdGlvblR5cGUpOgorICAgICAgICAoVFR5cGU6OmlzVmVjdG9yKToKKyAg
ICAgICAgKFRUeXBlOjppc1NjYWxhcik6CisgICAgICAgIChUVHlwZTo6c2V0U3RydWN0KToKKyAg
ICAgICAgKFRUeXBlOjpnZXRUeXBlTmFtZSk6CisgICAgICAgIChUVHlwZTo6c2V0VHlwZU5hbWUp
OgorICAgICAgICAoVFR5cGU6OmlzRmllbGQpOgorICAgICAgICAoVFR5cGU6OmdldEZpZWxkTmFt
ZSk6CisgICAgICAgIChUVHlwZTo6c2V0RmllbGROYW1lKToKKyAgICAgICAgKFRUeXBlOjpnZXRC
YXNpY1N0cmluZyk6CisgICAgICAgIChUVHlwZTo6Z2V0UHJlY2lzaW9uU3RyaW5nKToKKyAgICAg
ICAgKFRUeXBlOjpnZXRRdWFsaWZpZXJTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9n
bHNsYW5nLmw6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmg6CisgICAgICAgIChUSW50ZXJtTm9kZTo6Z2V0TGlu
ZSk6CisgICAgICAgIChUSW50ZXJtTm9kZTo6c2V0TGluZSk6CisgICAgICAgIChUSW50ZXJtVHlw
ZWQ6OmdldEFzVHlwZWQpOgorICAgICAgICAoVEludGVybVR5cGVkOjpzZXRUeXBlKToKKyAgICAg
ICAgKFRJbnRlcm1UeXBlZDo6Z2V0VHlwZSk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldFR5
cGVQb2ludGVyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNUeXBlKToKKyAgICAg
ICAgKFRJbnRlcm1UeXBlZDo6Z2V0UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6
Z2V0UHJlY2lzaW9uKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0Tm9taW5hbFNpemUpOgor
ICAgICAgICAoVEludGVybVR5cGVkOjppc01hdHJpeCk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6
OmlzQXJyYXkpOgorICAgICAgICAoVEludGVybVR5cGVkOjppc1ZlY3Rvcik6CisgICAgICAgIChU
SW50ZXJtVHlwZWQ6OmlzU2NhbGFyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNT
dHJpbmcpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRRdWFsaWZpZXJTdHJpbmcpOgorICAg
ICAgICAoVEludGVybVN5bWJvbDo6Z2V0SWQpOgorICAgICAgICAoVEludGVybVN5bWJvbDo6Z2V0
U3ltYm9sKToKKyAgICAgICAgKFRJbnRlcm1PcGVyYXRvcjo6c2V0T3ApOgorICAgICAgICAoVElu
dGVybUJpbmFyeTo6c2V0TGVmdCk6CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpzZXRSaWdodCk6
CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpnZXRMZWZ0KToKKyAgICAgICAgKFRJbnRlcm1CaW5h
cnk6OmdldFJpZ2h0KToKKyAgICAgICAgKFRJbnRlcm1VbmFyeTo6c2V0T3BlcmFuZCk6CisgICAg
ICAgIChUSW50ZXJtVW5hcnk6OmdldE9wZXJhbmQpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0
ZTo6Z2V0QXNBZ2dyZWdhdGUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0U2VxdWVu
Y2UpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0TmFtZSk6CisgICAgICAgIChUSW50
ZXJtQWdncmVnYXRlOjpnZXROYW1lKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldFVz
ZXJEZWZpbmVkKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OmlzVXNlckRlZmluZWQpOgor
ICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRl
cm1BZ2dyZWdhdGU6OnNldE9wdGltaXplKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNl
dERlYnVnKToKKyAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246OmdldENvbmRpdGlvbik6CisgICAg
ICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRUcnVlQmxvY2spOgorICAgICAgICAoVEludGVybVNl
bGVjdGlvbjo6Z2V0RmFsc2VCbG9jayk6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRB
c1NlbGVjdGlvbk5vZGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcDoK
KyAgICAgICAgKFRDb25zdFRyYXZlcnNlcjo6VENvbnN0VHJhdmVyc2VyKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYzoKKyAgICAgICAgKEluaXRBdG9tVGFibGUp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvY3BwLmM6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVj
dC5jOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmM6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaDoKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nh
bm5lci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmg6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmM6CisgICAgICAg
IChOZXdTeW1ib2wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9s
cy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmM6CisgICAg
ICAgIChSZWNvcmRUb2tlbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90
b2tlbnMuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXkuY3BwOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpEaXNwbGF5KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChlZ2w6OkRpc3Bs
YXk6OmNyZWF0ZURldmljZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1
cmZhY2UpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAg
KGVnbDo6RGlzcGxheTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6Z2V0Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvbGliRUdM
L0Rpc3BsYXkuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAo
ZWdsOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVzZXRTd2Fw
Q2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAg
ICAoZWdsOjpTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUpOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjphcHBseUZsaXBTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVh
c2VSZWNvcmRlZFN0YXRlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JXaW5kb3dS
ZXNpemUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzd2FwKToKKyAgICAgICAgKiBzcmMvbGli
RUdML1N1cmZhY2UuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVHTC5jcHA6CisgICAgICAg
ICogc3JjL2xpYkVHTC9saWJFR0wudmNwcm9qOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQmxp
dC5jcHA6CisgICAgICAgIChnbDo6QmxpdDo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKGds
OjpCbGl0OjpzZXRQaXhlbFNoYWRlcik6CisgICAgICAgIChnbDo6QmxpdDo6c2V0Rm9ybWF0Q29u
dmVydFNoYWRlcnMpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmNwcDoKKyAgICAg
ICAgKGdsOjpCdWZmZXI6OkJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNv
bnRleHQ6OkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6On5Db250ZXh0KToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjptYWtlQ3VycmVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFy
a0FsbFN0YXRlRGlydHkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxl
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRl
QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldFByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJh
bWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6YmluZFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1
cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8pOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJh
eUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJl
Q3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldEZsb2F0dik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
SW50ZWdlcnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmFwcGx5U3RhdGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5SW5kZXhC
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpmaW5pc2gpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmZsdXNoKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c1No
YWRlck1vZGVsMyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxl
cyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpkZXRhY2hCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRl
dGFjaFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpp
bml0RXh0ZW5zaW9uU3RyaW5nKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoZ2w6OkF0
dHJpYnV0ZVN0YXRlOjpBdHRyaWJ1dGVTdGF0ZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6c2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1
ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIpOgorICAg
ICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKToKKyAgICAgICAgKGdsOjpGcmFt
ZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToK
KyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwpOgorICAgICAg
ICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKToKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVy
OjpnZXREZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxi
dWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSk6
CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKToKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChn
bDo6RnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpp
c011bHRpc2FtcGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToK
KyAgICAgICAgKGdsOjpEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkRlZmF1
bHRGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+UHJvZ3Jh
bSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmtWYXJ5aW5n
cyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
dW5saW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpQ
cm9ncmFtOjphZGRSZWYpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFJlZkNvdW50KToKKyAg
ICAgICAgKGdsOjpQcm9ncmFtOjpnZXREeFZpZXdwb3J0TG9jYXRpb24pOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvUHJvZ3JhbS5oOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRP
YmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdDo6UmVmQ291bnRP
YmplY3QpOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0Ojp+UmVmQ291bnRPYmplY3QpOgor
ICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0OjphZGRSZWYpOgorICAgICAgICAoZ2w6OlJlZkNv
dW50T2JqZWN0OjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQ
b2ludGVyOjpzZXQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaDog
QWRkZWQuCisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3Q6OmlkKToKKyAgICAgICAgKGdsOjpS
ZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVy
KToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjp+UmVmQ291bnRP
YmplY3RCaW5kaW5nUG9pbnRlcik6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVy
OjppZCk6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6b3BlcmF0
b3IgISApOgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpzZXQpOgorICAgICAgICAoZ2w6
OkJpbmRpbmdQb2ludGVyOjpnZXQpOgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpvcGVy
YXRvciAtPiApOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6Omlz
Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJi
dWZmZXI6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRX
aWR0aCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQpOgorICAgICAgICAo
Z2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6
OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwpOgor
ICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmlzQ29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmlzRGVwdGhidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFdp
ZHRoKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRIZWlnaHQpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OnNldFNpemUpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0RDNERm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
OjpnZXRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJp
YWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKToKKyAg
ICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9y
YnVmZmVyOjppc0NvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0UmVk
U2l6ZSk6CisgICAgICAgIChnbDo6Q29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSk6CisgICAgICAg
IChnbDo6Q29sb3JidWZmZXI6OmdldEJsdWVTaXplKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZl
cjo6Z2V0QWxwaGFTaXplKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRo
U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhT
dGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmlzRGVwdGhi
dWZmZXIpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVy
KToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU2l6ZSk6CisgICAg
ICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChn
bDo6RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkRl
cHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6On5EZXB0
aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAg
ICAgICAoZ2w6OkRlcHRoYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlN0
ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6
On5TdGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjpnZXRTdG9yYWdlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6UmVzb3VyY2VN
YW5hZ2VyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIp
OgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpS
ZXNvdXJjZU1hbmFnZXI6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6
Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNoYWRl
cik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVQcm9ncmFtKToKKyAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJj
ZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpk
ZWxldGVTaGFkZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUHJvZ3Jh
bSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKToKKyAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChn
bDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFu
YWdlcjo6Z2V0U2hhZGVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1
cmUpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Z2V0UHJvZ3JhbSk6CisgICAgICAg
IChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1h
bmFnZXI6OmNoZWNrQnVmZmVyQWxsb2NhdGlvbik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5h
Z2VyOjpjaGVja1RleHR1cmVBbGxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OmNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9SZXNvdXJjZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwOgorICAgICAgICAoZ2w6OlNoYWRlcjo6U2hhZGVyKToKKyAgICAgICAgKGdsOjpTaGFk
ZXI6OmFkZFJlZik6CisgICAgICAgIChnbDo6U2hhZGVyOjpyZWxlYXNlKToKKyAgICAgICAgKGds
OjpTaGFkZXI6OmdldFJlZkNvdW50KToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnBhcnNlVmFyeWlu
Z3MpOgorICAgICAgICAoZ2w6OlZlcnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKToKKyAgICAgICAg
KGdsOjpGcmFnbWVudFNoYWRlcjo6RnJhZ21lbnRTaGFkZXIpOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvU2hhZGVyLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcDoKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpJbWFnZTo6SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6
OlRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmdldEJsaXR0ZXIpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OnNlbGVjdEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZElt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEFscGhhSW1hZ2VEYXRhKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlSW1hZ2VEYXRhKToKKyAgICAgICAgKGds
OjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmxvYWRSR0JVQnl0ZUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9h
ZFJHQjU2NUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkFVQnl0ZUlt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkE0NDQ0SW1hZ2VEYXRhKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OmxvYWRCR1JBSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpj
cmVhdGVTdXJmYWNlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OlRleHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTJEOjpnZXRGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZElt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpj
b3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
OjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0Rm9ybWF0KToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0Nv
bXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRl
eHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4
dHVyZUNvbG9yYnVmZmVyUHJveHk6OmFkZFJlZik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4
dHVyZUNvbG9yYnVmZmVyUHJveHk6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRl
eHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEZvcm1hdCk6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3Bw
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZjoKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYWlu
Lmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6
OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2gpOgorICAgICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2Vk
U2l6ZSk6CisgICAgICAgIChnbDo6SXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKToKKyAgICAgICAgKGdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAgICAg
ICAgKGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGVzMmR4OjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZSk6CisgICAgICAgIChlczJkeDo6R2V0TXVsdGlz
YW1wbGVUeXBlRnJvbVNhbXBsZXMpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVz
Lmg6CisKIDIwMTAtMDgtMTcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBBTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogCQlGQjM5RDJCMTEyMDBGMzVB
MDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxl
Y3QuY3BwICovOyB9OwogCQlGQjM5RDcyMzEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDcyMDEy
MDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZy5jcHAgKi87IH07CiAJCUZCMzlENzI0MTIwMTAzMjAw
MDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIu
Y3BwICovOyB9OwotCQlGQjM5RDc2RDEyMDExMEZDMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJF
MTIwMEYzRTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8q
IFNoYWRlckxhbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCiAKQEAgLTE3Nyw3ICsxNzYsNiBAQAogCQlGQjM5RDI2RDEyMDBGMzVBMDAwODhF
NjkgLyogVW5mb2xkU2VsZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVuZm9sZFNlbGVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MjZFMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQjM5RDI2RjEyMDBGMzVBMDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IHVuaXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGQjM5RDJCRTEyMDBGM0U2MDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsg
ZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFJlc291cmNlTGltaXRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlENzIwMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGdsc2xhbmcuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5n
X3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xzbGFuZ190YWIuaDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTQxMyw3ICs0MTEsNiBAQAogCQlGQjM5RDJCRDEyMDBG
M0U2MDAwODhFNjkgLyogR0xTTEFORyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJRkIzOUQyQkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRz
LmggKi8sCiAJCQkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLywK
IAkJCSk7CiAJCQluYW1lID0gR0xTTEFORzsKQEAgLTQyNyw3ICs0MjQsNiBAQAogCQkJaXNhID0g
UEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCi0JCQkJRkIzOUQ3NkQxMjAxMTBGQzAwMDg4RTY5IC8qIFJlc291cmNlTGlt
aXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hh
ZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CkBAIC00NjEsNyArNDU3LDYgQEAKIAkJCWlzYSA9IFBCWFByb2pl
Y3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovOwog
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwogCQkJa25vd25S
ZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDYgKzIyMiwxMiBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5l
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAg
MHg4MzY4CiAjZW5kaWYKIAorLyogR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAqLwor
I2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4M0YwCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4M0YxCisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5z
aW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzUxLDYgKzM1NywyNSBAQCB0eXBl
ZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisg
KiBBTkdMRSBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dAorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgMHg4Q0E4CisjZGVm
aW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xf
RFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFIDB4OENBNiAvLyBhbGlhcyBHTF9GUkFNRUJV
RkZFUl9CSU5ESU5HCisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRSAw
eDhDQUEKKyNlbmRpZgorCisvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLwor
I2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfU0FNUExFU19BTkdMRSAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUg
R0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9BTkdMRSAgICAgMHg4RDU2Cisj
ZGVmaW5lIEdMX01BWF9TQU1QTEVTX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ1NworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogRW5kIG9mIGV4dGVuc2lvbiB0
b2tlbnMsIHN0YXJ0IG9mIGNvcnJlc3BvbmRpbmcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwogCkBAIC02MjMsNiArNjQ4LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMTVVMVElEUkEKICNkZWZpbmUgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEw
XzEwX1JFViAxCiAjZW5kaWYKIAorLyogR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAq
LworI2lmbmRlZiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0VY
VF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgMQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KgogICogSU1HIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc2
Niw2ICs3OTYsMzQgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTAog
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0
ZmllbGQgcHJlc2VydmVNYXNrKTsKICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFO
R0xFIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfQU5H
TEVfZnJhbWVidWZmZXJfYmxpdCAqLworI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0
CisjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlckFO
R0xFIChHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEJMSVRGUkFNRUJVRkZFUkFOR0xFUFJPQykgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdM
aW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVy
KTsKKyNlbmRpZgorCisvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lm
bmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
QU5HTEUgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJ
U0FNUExFQU5HTEVQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDog
QU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHJldmlzaW9uIDY2NjExKQorKysg
QU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jlc291cmNlTGltaXRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjEgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2lmbmRlZiBfUkVTT1VSQ0VfTElN
SVRTX0lOQ0xVREVEXwotI2RlZmluZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXwotCi1zdHJ1
Y3QgVEJ1aWx0SW5SZXNvdXJjZQotewotCWludCBtYXhWZXJ0ZXhBdHRyaWJzOwotCWludCBtYXhW
ZXJ0ZXhVbmlmb3JtVmVjdG9yczsKLQlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7Ci0JaW50IG1heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzOwotCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
OwotCWludCBtYXhUZXh0dXJlSW1hZ2VVbml0czsKLQlpbnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9yczsKLQlpbnQgbWF4RHJhd0J1ZmZlcnM7Ci19OwotI2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1J
VFNfSU5DTFVERURfCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNiw4ICs2LDYgQEAKICNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURF
RF8KICNkZWZpbmUgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIlJl
c291cmNlTGltaXRzLmgiCi0KIC8vCiAvLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVu
dCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFu
Z3VhZ2UgY29tcGlsZXIuCkBAIC0xOSwxMCArMTcsMTIgQEAgZXh0ZXJuICJDIiB7CiAvLwogLy8g
RHJpdmVyIG11c3QgY2FsbCB0aGlzIGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVy
CiAvLyBjb21waWxlciBvcGVyYXRpb25zLgorLy8gSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0
aGUgcmV0dXJuIHZhbHVlIGlzIG5vbnplcm8sIGVsc2UgemVyby4KIC8vCiBpbnQgU2hJbml0aWFs
aXplKCk7CiAvLwogLy8gRHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgYXQgc2h1dGRvd24uCisvLyBJ
ZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uemVybywgZWxz
ZSB6ZXJvLgogLy8KIGludCBTaEZpbmFsaXplKCk7CiAvLwpAQCAtNDQsNiArNDQsMzIgQEAgdHlw
ZWRlZiBlbnVtIHsKIH0gRVNoU3BlYzsKIAogLy8KKy8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVu
dCBidWlsdC1pbiByZXNvdXJjZXMgKGNvbnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCisvLyBUaGUg
bmFtZXMgZm9yIHRoZXNlIHJlc291cmNlcyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcg
Z2xfL0dMXy4KKy8vCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vIENvbnN0YW50cy4KKyAgICBp
bnQgTWF4VmVydGV4QXR0cmliczsKKyAgICBpbnQgTWF4VmVydGV4VW5pZm9ybVZlY3RvcnM7Cisg
ICAgaW50IE1heFZhcnlpbmdWZWN0b3JzOworICAgIGludCBNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0czsKKyAgICBpbnQgTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0czsKKyAgICBpbnQgTWF4
VGV4dHVyZUltYWdlVW5pdHM7CisgICAgaW50IE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnM7Cisg
ICAgaW50IE1heERyYXdCdWZmZXJzOworCisgICAgLy8gRXh0ZW5zaW9ucy4KKyAgICAvLyBTZXQg
dG8gMSB0byBlbmFibGUgdGhlIGV4dGVuc2lvbiwgZWxzZSAwLgorICAgIGludCBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXM7Cit9IFRCdWlsdEluUmVzb3VyY2U7CisKKy8vCisvLyBJbml0aWFsaXpl
IGJ1aWx0LWluIHJlc291cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgorLy8KK3Zv
aWQgU2hJbml0QnVpbHRJblJlc291cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcyk7CisK
Ky8vCiAvLyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIHRoZSBjb21waWxlci4KIC8vCiB0eXBlZGVm
IGVudW0gewpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9CYXNlVHlwZXMuaAkocmV2aXNpb24gNjY2MTEpCisrKyBB
TkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5
LDcgQEAgZW51bSBUUHJlY2lzaW9uCiAgICAgRWJwSGlnaCwKIH07CiAKLV9faW5saW5lIGNvbnN0
IGNoYXIqIGdldFByZWNpc2lvblN0cmluZyhUUHJlY2lzaW9uIHApCitpbmxpbmUgY29uc3QgY2hh
ciogZ2V0UHJlY2lzaW9uU3RyaW5nKFRQcmVjaXNpb24gcCkKIHsKICAgICBzd2l0Y2gocCkKICAg
ICB7CkBAIC00Nyw3ICs0NywyMiBAQCBlbnVtIFRCYXNpY1R5cGUKICAgICBFYnRBZGRyZXNzLCAg
ICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXByZWNhdGVkPz8KIH07CiAKLV9faW5saW5lIGJvb2wg
SXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0
cmluZyhUQmFzaWNUeXBlIHQpCit7CisgICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVi
dFZvaWQ6ICAgICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAg
ICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4g
ImJvb2wiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxl
ckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNl
IEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKIHsKICAg
ICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNh
bXBsZXJFbmQ7CiB9CkBAIC0xMDAsNyArMTE1LDcgQEAgZW51bSBUUXVhbGlmaWVyCiAvLwogLy8g
VGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUg
ZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwotX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVy
U3RyaW5nKFRRdWFsaWZpZXIgcSkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJp
bmcoVFF1YWxpZmllciBxKQogewogICAgIHN3aXRjaChxKQogICAgIHsKSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTUgKzQ3MiwxNSBAQCBzdGF0
aWMgVFN0cmluZyBCdWlsdEluQ29uc3RhbnRzKGNvbnN0IFRCCiB7CiAgICAgVFN0cmluZ1N0cmVh
bSBzOwogCi0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJl
c291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xf
TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMg
PSAiIDw8IHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25z
dCBpbnQgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5NYXhWZXJ0
ZXhVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CiAKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmFy
eWluZ1ZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA8PCAiOyI7Ci0g
ICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCBy
ZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwotICAgIHMgPDwgImNv
bnN0IGludCBnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMu
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50
IGdsX01heFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdl
VW5pdHMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzID0gIiA8PCByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7
Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMu
bWF4RHJhd0J1ZmZlcnMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5n
VmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAgICBz
IDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3Qg
aW50IGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xf
TWF4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0
cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMgPSAiIDw8IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKKyAg
ICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhE
cmF3QnVmZmVycyA8PCAiOyI7CiAKICAgICByZXR1cm4gcy5zdHIoKTsKIH0KQEAgLTU5MSwyMyAr
NTkxLDIzIEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWEKICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwogCiAg
ICAgLy8gTWFwIGxhbmd1YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KLSAgICBzd2l0Y2gobGFuZ3Vh
Z2UpIHsNCi0gICAgY2FzZSBFU2hMYW5nVmVydGV4Og0KLSAgICAgICAgYnJlYWs7DQotICAgIGNh
c2UgRVNoTGFuZ0ZyYWdtZW50Og0KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkRmR4IiwgICBFT3BEUGR4KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4
dGVuc2lvbg0KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5Iiwg
ICBFT3BEUGR5KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAg
ICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgp
OyAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAgYnJlYWs7
DQotICAgIGRlZmF1bHQ6IGJyZWFrOw0KLSAgICB9DQorICAgIHN3aXRjaChsYW5ndWFnZSkgewor
ICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFU2hMYW5n
RnJhZ21lbnQ6CisgICAgICAgIC8vc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIs
ICAgRU9wRFBkeCk7ICAgIC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAg
ICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BEUGR5KTsg
ICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICAvL3N5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7ICAvLyBPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KIAogICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNpZmljIHZh
cmlhYmxlcy4KICAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKICAgICBjYXNlIEVTaExhbmdGcmFnbWVu
dDogewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUu
CiAgICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFn
Q29sb3IsICAgNCwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlT
aXplKHJlc291cmNlcy5tYXhEcmF3QnVmZmVycyk7CisgICAgICAgICAgICBmcmFnRGF0YS5zZXRB
cnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKICAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwg
ICAgZnJhZ0RhdGEpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKSW5kZXg6IEFOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L0luaXRpYWxpemUuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5p
dGlhbGl6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBfSU5JVElB
TElaRV9JTkNMVURFRF8KICNkZWZpbmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCiAKLSNpbmNsdWRl
ICJHTFNMQU5HL1Jlc291cmNlTGltaXRzLmgiCi0KICNpbmNsdWRlICJjb21waWxlci9Db21tb24u
aCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5
bWJvbFRhYmxlLmgiCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCShyZXZp
c2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNiw3MiArNiw4OCBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlh
bGl6ZURsbC5oIgogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRl
ICJjb21waWxlci9Jbml0aWFsaXplR2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRp
YWxpemVQYXJzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIAog
T1NfVExTSW5kZXggVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7
CiAKIGJvb2wgSW5pdFByb2Nlc3MoKQogewogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXgg
IT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLQkJLy8KLQkJLy8gRnVuY3Rpb24gaXMgcmUtZW50
cmFudC4KLQkJLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFu
dC4KKyAgICAgICAgLy8KICAgICAgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIH0KIAogICAgIFRo
cmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0FsbG9jVExTSW5kZXgoKTsKIAogICAgIGlmIChUaHJl
YWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKICAgICAgICAgYXNz
ZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBhbGxvY2F0ZSBUTFMgYXJlYSBmb3Ig
aW5pdCBmbGFnIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgfQogCiAKICAgICBp
ZiAoIUluaXRpYWxpemVQb29sSW5kZXgoKSkgewogICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFBy
b2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0JfQorICAgIH0KIAogICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dElu
ZGV4KCkpIHsKICAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBp
bml0YWxpemUgcGFyc2UgY29udGV4dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAg
IH0KIAotCUluaXRUaHJlYWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSW5pdFRo
cmVhZCgpOwogfQogCitib29sIERldGFjaFByb2Nlc3MoKQoreworICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisKKyAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExT
X0lOREVYKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJl
YWQoKTsKKworICAgIGlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCisgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKworICAgIEZyZWVQb29sSW5kZXgoKTsKKworICAgIE9TX0ZyZWVUTFNJbmRl
eChUaHJlYWRJbml0aWFsaXplSW5kZXgpOworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9T
X0lOVkFMSURfVExTX0lOREVYOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CiAKIGJvb2wgSW5p
dFRocmVhZCgpCiB7Ci0JLy8KKyAgICAvLwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUtZW50
cmFudAotCS8vCisgICAgLy8KICAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lO
VkFMSURfVExTX0lOREVYKSB7Ci0JCWFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFByb2Nlc3Mg
aGFzbid0IGJlZW4gaW5pdGFsaXNlZC4iKTsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRUaHJl
YWQoKTogUHJvY2VzcyBoYXNuJ3QgYmVlbiBpbml0YWxpc2VkLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0JfQorICAgIH0KIAogICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFs
aXplSW5kZXgpICE9IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0JSW5pdGlhbGl6ZUdsb2Jh
bFBvb2xzKCk7CisgICAgSW5pdGlhbGl6ZUdsb2JhbFBvb2xzKCk7CiAKLQlpZiAoIUluaXRpYWxp
emVHbG9iYWxQYXJzZUNvbnRleHQoKSkKKyAgICBpZiAoIUluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFPU19TZXRUTFNWYWx1
ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMSkpIHsKLQkJYXNzZXJ0KDAgJiYgIklu
aXRUaHJlYWQoKTogVW5hYmxlIHRvIHNldCBpbml0IGZsYWcuIik7CisgICAgICAgIGFzc2VydCgw
ICYmICJJbml0VGhyZWFkKCk6IFVuYWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0JfQorICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIGJvb2wg
RGV0YWNoVGhyZWFkKCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwpAQCAtNzksNDIgKzk1
LDIxIEBAIGJvb2wgRGV0YWNoVGhyZWFkKCkKICAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotCS8vCi0J
Ly8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBhbmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJl
ZW4gaW5pdGFsaXNlZC4KLQkvLworICAgIC8vCisgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFu
dCBhbmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KKyAgICAvLwog
ICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApIHsKICAg
ICAgICAgaWYgKCFPU19TZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICop
MCkpIHsKLQkJCWFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGlu
aXQgZmxhZy4iKTsKKyAgICAgICAgICAgIGFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5h
YmxlIHRvIGNsZWFyIGluaXQgZmxhZy4iKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsK
LQkJfQorICAgICAgICB9CiAKLQkJRnJlZUdsb2JhbFBvb2xzKCk7Ci0KLQkJaWYgKCFGcmVlUGFy
c2VDb250ZXh0KCkpCisgICAgICAgIGlmICghRnJlZVBhcnNlQ29udGV4dCgpKQogICAgICAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOwotCX0KLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29s
IERldGFjaFByb2Nlc3MoKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICBpZiAo
VGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIFNoRmluYWxpemUoKTsKLQotICAgIHN1Y2Nlc3MgPSBEZXRhY2hU
aHJlYWQoKTsKLQotCUZyZWVQb29sSW5kZXgoKTsKIAotCWlmICghRnJlZVBhcnNlQ29udGV4dElu
ZGV4KCkpCi0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgIE9TX0ZyZWVUTFNJbmRleChU
aHJlYWRJbml0aWFsaXplSW5kZXgpOwotICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lO
VkFMSURfVExTX0lOREVYOworICAgICAgICBGcmVlR2xvYmFsUG9vbHMoKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gc3VjY2VzczsKIH0KKwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVEbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYsMTQgKzYsMTEgQEAKICNpZm5kZWYgX19JTklUSUFMSVpFRExM
X0gKICNkZWZpbmUgX19JTklUSUFMSVpFRExMX0gKIAotCi0jaW5jbHVkZSAiY29tcGlsZXIvb3Np
bmNsdWRlLmgiCi0KLQogYm9vbCBJbml0UHJvY2VzcygpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7
CisKIGJvb2wgSW5pdFRocmVhZCgpOwogYm9vbCBEZXRhY2hUaHJlYWQoKTsKLWJvb2wgRGV0YWNo
UHJvY2VzcygpOwogCiAjZW5kaWYgLy8gX19JTklUSUFMSVpFRExMX0gKIApJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYsMTIgKzYsMTEgQEAKIAogI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09O
VEVYVF9JTkNMVURFRF8KICNkZWZpbmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVE
RURfCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCiAKIGJvb2wgSW5pdGlhbGl6ZVBh
cnNlQ29udGV4dEluZGV4KCk7Ci1ib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTsK
LWJvb2wgRnJlZVBhcnNlQ29udGV4dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsK
IAorYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNv
bnRleHQoKTsKIAogI2VuZGlmIC8vIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVE
XwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDY2NjExKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1l
ZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIgpAQCAtMTcsOSAr
MTgsMTAgQEAKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5
cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkpOwogCi1UUHJlY2lzaW9uIEdldEhpZ2hlc3RQcmVjaXNpb24oIFRQcmVjaXNpb24g
bGVmdCwgVFByZWNpc2lvbiByaWdodCApeworc3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVyUHJl
Y2lzaW9uKCBUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKICAgICByZXR1cm4g
bGVmdCA+IHJpZ2h0ID8gbGVmdCA6IHJpZ2h0OwogfQorCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAv
LwogLy8gRmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJt
ZWRpYXRlIHJlcHJlc2VudGF0aW9uLgpAQCAtMTExLDEyICsxMTMsNiBAQCBUSW50ZXJtVHlwZWQq
IFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxl
ZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CiAKLSAgICBpZiAobGVmdFRlbXBDb25zdGFudCkKLSAgICAgICAgbGVmdFRlbXBDb25z
dGFudCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCi0gICAgaWYgKHJpZ2h0VGVtcENv
bnN0YW50KQotICAgICAgICByaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKLQogICAgIC8vCiAgICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0YW50cy4K
ICAgICAvLwpAQCAtMzA3LDcgKzMwMyw3IEBAIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlh
dGU6OnNldEFnZ3IKICAgICAvLwogICAgIC8vIFNldCB0aGUgb3BlcmF0b3IuCiAgICAgLy8KLSAg
ICBhZ2dOb2RlLT5zZXRPcGVyYXRvcihvcCk7CisgICAgYWdnTm9kZS0+c2V0T3Aob3ApOwogICAg
IGlmIChsaW5lICE9IDApCiAgICAgICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKQEAgLTUx
OSw5ICs1MTUsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJCiAg
ICAgICAgIHJldHVybiByaWdodDsKICAgICB9IGVsc2UgewogICAgICAgICBUSW50ZXJtVHlwZWQg
KmNvbW1hQWdncmVnYXRlID0gZ3Jvd0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7Ci0gICAg
ICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcGVyYXRvcihFT3BDb21t
YSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BD
b21tYSk7CiAgICAgICAgIGNvbW1hQWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkp
OwotICAgICAgICBjb21tYUFnZ3JlZ2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlm
aWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRUeXBlUG9pbnRl
cigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICAgICAgcmV0dXJuIGNvbW1hQWdn
cmVnYXRlOwogICAgIH0KIH0KQEAgLTY0NCw3ICs2NDAsNyBAQCBib29sIFRJbnRlcm1lZGlhdGU6
OnBvc3RQcm9jZXNzKFRJbnRlcm1OCiAgICAgLy8KICAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dS
b290ID0gcm9vdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKICAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290
LT5nZXRPcCgpID09IEVPcE51bGwpCi0gICAgICAgIGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNl
cXVlbmNlKTsKKyAgICAgICAgYWdnUm9vdC0+c2V0T3AoRU9wU2VxdWVuY2UpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC03NjQsMTYgKzc2MCw5IEBAIGJvb2wgVEludGVybVVuYXJ5Ojpwcm9t
b3RlKFRJbmZvU2luayYpCiAvLwogYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2lu
ayYgaW5mb1NpbmspCiB7Ci0gICAgaW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOwot
ICAgIGlmIChyaWdodC0+Z2V0Tm9taW5hbFNpemUoKSA+IHNpemUpCi0gICAgICAgIHNpemUgPSBy
aWdodC0+Z2V0Tm9taW5hbFNpemUoKTsKLQotICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdl
dEJhc2ljVHlwZSgpOwotCi0gICAgLy8KLSAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBt
YXRjaGVzLgotICAgIC8vCi0gICAgaWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJy
YXkoKSkgJiYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAvLyBH
TFNMIEVTIDIuMCBkb2VzIG5vdCBzdXBwb3J0IGltcGxpY2l0IHR5cGUgY2FzdGluZy4KKyAgICAv
LyBTbyB0aGUgYmFzaWMgdHlwZSBzaG91bGQgYWx3YXlzIG1hdGNoLgorICAgIGlmIChsZWZ0LT5n
ZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vCkBAIC03ODIsMTYgKzc3MSwyNyBAQCBib29sIFRJbnRlcm1CaW5hcnk6
OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgLy8KICAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUo
KSk7CiAKLSAgICBUUHJlY2lzaW9uIGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJlY2lz
aW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOwotICAgIGdl
dFR5cGVQb2ludGVyKCktPmNoYW5nZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKyAgICAv
LyBUaGUgcmVzdWx0IGdldHMgcHJvbW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgorICAg
IFRQcmVjaXNpb24gaGlnaGVyUHJlY2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdl
dFByZWNpc2lvbigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVy
KCktPnNldFByZWNpc2lvbihoaWdoZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9wZXJh
dGlvbnMgcmVzdWx0cyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAgLy8g
b3BlcmFuZHMgYXJlIGNvbnN0LgorICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFD
b25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgZ2V0
VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQogCiAgICAg
Ly8KICAgICAvLyBBcnJheSBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgaWYgKGxlZnQtPmlzQXJy
YXkoKSkgeworICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgewor
ICAgICAgICAvLworICAgICAgICAvLyBBcnJheXMgdHlwZXMgaGF2ZSB0byBiZSBleGFjdCBtYXRj
aGVzLgorICAgICAgICAvLworICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5n
ZXRUeXBlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3dpdGNoIChv
cCkgewotCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRp
b25hbAogICAgICAgICAgICAgLy8KQEAgLTgxMiwxNyArODEyLDE2IEBAIGJvb2wgVEludGVybUJp
bmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCisgICAgaW50IHNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgp
LCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CisKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJz
LiAgQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKKyAg
ICAvLyBBbGwgc2NhbGFycy4gQ29kZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2Ug
aXMgcmVtb3ZlZCEKICAgICAvLwogICAgIGlmIChzaXplID09IDEpIHsKLQogICAgICAgICBzd2l0
Y2ggKG9wKSB7Ci0KICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNv
bmRpdGlvbmFsCiAgICAgICAgICAgICAvLwpAQCAtODQwLDMzICs4MzksMzYgQEAgYm9vbCBUSW50
ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgor
ICAgICAgICAgICAgICAgIC8vIEJvdGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCiAg
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmln
aHQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gRXZlcnl0aGluZyBlbHNlIHNob3VsZCBoYXZlIG1hdGNoaW5nIHR5cGVzCi0gICAg
ICAgICAgICAvLwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobGVm
dC0+Z2V0QmFzaWNUeXBlKCkgIT0gcmlnaHQtPmdldEJhc2ljVHlwZSgpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGxlZnQtPmlzTWF0cml4KCkgICAgICE9IHJpZ2h0LT5pc01hdHJpeCgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLworICAgIC8v
IElmIHdlIHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9y
IG9yIG1hdHJpeC4KKyAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwg
dmVjdG9yLCBvciBtYXRyaXguCiAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwogICAg
IC8vCi0gICAgaWYgKCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdl
dE5vbWluYWxTaXplKCkgIT0gMSB8fAotICAgICAgICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAh
PSBzaXplICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5h
bFNpemUoKSkgeworICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRv
IG5vdCBtYXRjaDoKKyAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCisgICAg
ICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxT
aXplKCkgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT3BlcmF0
b3IgY2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgorICAgICAgICBpZiAob3AgPT0g
RU9wQXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogCiAgICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNv
bWJpbmVkPwogICAgIC8vCisgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNp
Y1R5cGUoKTsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgRU9wTXVsOgogICAgICAg
ICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CkBAIC04
NzQsMTIgKzg3NiwxMiBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBp
CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXg7CiAgICAgICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNT
Y2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgdHJ1ZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BN
YXRyaXhUaW1lc1ZlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBl
LCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2
cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTg5MCw3ICs4OTIsNyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVElu
Zm9TaW5rJiBpCiAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9k
dWN0CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0
LT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNT
Y2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFBy
ZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jhcnks
IHNpemUsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsICJNaXNzaW5nIGVsc2VzIiwgZ2V0TGluZSgpKTsKQEAgLTkxOSwxOCArOTIxLDE2IEBAIGJv
b2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgZmFsc2UpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgIk1pc3NpbmcgZWxzZXMiLCBnZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2Ug
RU9wQXNzaWduOgogICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICBpZiAo
bGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKICAg
ICAgICAgY2FzZSBFT3BBZGQ6CiAgICAgICAgIGNhc2UgRU9wU3ViOgogICAgICAgICBjYXNlIEVP
cERpdjoKQEAgLTkzOCwxMCArOTM4LDkgQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BE
aXZBc3NpZ246CiAgICAgICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNW
ZWN0b3IoKSB8fAotICAgICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlz
TWF0cml4KCkgfHwKLSAgICAgICAgICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdo
dC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgbGVmdC0+aXNNYXRyaXgoKSB8fCByaWdodC0+aXNNYXRyaXgoKSkpOworICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5
LCBzaXplLCBsZWZ0LT5pc01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtOTUxLDggKzk1MCw3IEBA
IGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOgogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CiAgICAg
ICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAotICAg
ICAgICAgICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKLSAg
ICAgICAgICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBl
KCkpCisgICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NjAs
MzAgKzk1OCwxMyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAg
Ly8KLSAgICAvLyBPbmUgbW9yZSBjaGVjayBmb3IgYXNzaWdubWVudC4gIFRoZSBSZXN1bHRpbmcg
dHlwZSBoYXMgdG8gbWF0Y2ggdGhlIGxlZnQgb3BlcmFuZC4KLSAgICAvLwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6
ZToKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OgotICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246
Ci0gICAgICAgICAgICBpZiAoZ2V0VHlwZSgpICE9IGxlZnQtPmdldFR5cGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQorICAgIAogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3Rh
bnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkK
IHsKLSAgICBUVHlwZUxpc3QqIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKKyAg
ICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKIAog
ICAgIHNpemVfdCBzdHJ1Y3RTaXplID0gZmllbGRzLT5zaXplKCk7CiAgICAgaW50IGluZGV4ID0g
MDsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDY2NjExKQorKysg
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcgogICAg
ICAgICAgICAgb3V0IDw8IGFycmF5QnJhY2tldHModHlwZSk7CiAKICAgICAgICAgLy8gUHV0IGEg
Y29tbWEgaWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVy
ICE9IC0tYXJncy5lbmQoKSkKKyAgICAgICAgaWYgKGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCiAg
ICAgICAgICAgICBvdXQgPDwgIiwgIjsKICAgICB9CiB9CkBAIC0zMDQsOCArMzA0LDYgQEAgYm9v
bCBUT3V0cHV0R0xTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaQogCiBib29sIFRPdXRwdXRHTFNM
Ojp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCiB7Ci0gICAgVElu
Zm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotCiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KQogICAgIHsKICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAi
KC0iLCBOVUxMLCAiKSIpOyBicmVhazsKQEAgLTY1MCw4ICs2NDgsNiBAQCBib29sIFRPdXRwdXRH
TFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsCiAKIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0QnJh
bmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQogewotICAgIFRJbmZvU2lua0Jh
c2UgJm91dCA9IG9ialNpbmsoKTsKLQogICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCiAg
ICAgewogICAgICAgICBjYXNlIEVPcEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQi
LCBOVUxMLCBOVUxMKTsgYnJlYWs7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExT
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShy
ZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
IAogICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91
dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfV2luZG93O1xuIgorICAgICAgICAgICAgb3V0IDw8ICJ1
bmlmb3JtIGZsb2F0NCBkeF9WaWV3cG9ydDtcbiIKICAgICAgICAgICAgICAgICAgICAidW5pZm9y
bSBmbG9hdDIgZHhfRGVwdGg7XG4iOwogICAgICAgICB9CiAKQEAgLTc5MSwxMSArNzkxLDExIEBA
IGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldExlZnQoKS0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMiAqIDI6IG1Vc2VzRXF1
YWxNYXQyID0gdHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDMgKiAzOiBtVXNl
c0VxdWFsTWF0MyA9IHRydWU7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSA0ICogNDog
bVVzZXNFcXVhbE1hdDQgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjog
bVVzZXNFcXVhbE1hdDIgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzog
bVVzZXNFcXVhbE1hdDMgPSB0cnVlOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDog
bVVzZXNFcXVhbE1hdDQgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtODA0
LDcgKzgwNCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0QmFzaWNUeXBlKCkpCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldFNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldE5vbWluYWxTaXplKCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1V
c2VzRXF1YWxWZWMyID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBtVXNlc0VxdWFsVmVjMyA9IHRydWU7IGJyZWFrOwpAQCAtODEzLDcgKzgxMyw3IEBAIGJvb2wg
T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
SW50OgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9t
aW5hbFNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjogbVVzZXNFcXVhbElWZWMyID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsSVZlYzMgPSB0cnVlOyBicmVhazsKQEAgLTgyMiw3ICs4
MjIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFr
OwpAQCAtMTI4OCw3ICsxMjg4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aQogICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgIT0gIiwgIikiKTsgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNl
IEVPcE1vZDoKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5j
ZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50
cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2Vx
dWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAgIC8vIE51bWJlciBv
ZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICBjYXNlIDE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICBj
YXNlIDI6IG1Vc2VzTW9kMiA9IHRydWU7IGJyZWFrOwpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgY2FzZSBFT3BDcm9z
czogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wRmFjZUZvcndhcmQ6CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRT
aXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+
Z2V0Tm9taW5hbFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3Qg
YXJndW1lbnQKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9y
d2FyZDEgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2Fy
ZDIgPSB0cnVlOyBicmVhazsKQEAgLTE1NTMsNyArMTU1Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6
aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9s
ICYmIGNvbnN0YW50KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+
Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAx
KQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4ID0gc3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBj
b25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKQEAgLTE1NzUs
NyArMTU3NSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KIAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRT
aXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgp
ID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvciA9IHRlc3QtPmdldE9wKCk7
CiAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKClbMF0uZ2V0SUNvbnN0KCk7CkBAIC0xNTk3LDcgKzE1OTcsNyBAQCBib29sIE91dHB1dEhM
U0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlw
ZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAg
ICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdl
dE5vbWluYWxTaXplKCkgPT0gMSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIGludCB2YWx1ZSA9IGNvbnN0YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElD
b25zdCgpOwogCkBAIC0xODQ4LDggKzE4NDgsOCBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0
cnVjdG9yKGNvbnN0IFRUCiAKICAgICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7CiAgICAgY3RvclR5
cGUuY2xlYXJBcnJheW5lc3MoKTsKLSAgICBjdG9yVHlwZS5jaGFuZ2VQcmVjaXNpb24oRWJwSGln
aCk7Ci0gICAgY3RvclR5cGUuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgY3Rv
clR5cGUuc2V0UHJlY2lzaW9uKEVicEhpZ2gpOworICAgIGN0b3JUeXBlLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOwogCiAgICAgVFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkg
PyBkZWNvcmF0ZShuYW1lKSA6IG5hbWU7CiAKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVy
LmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsNyArNDg2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0
Ojpjb25zdHJ1Y3RvckVycm9yQ2hlYwogICAgIH0KICAgICAKICAgICBpZiAoY29uc3RUeXBlKQot
ICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICB0eXBlLT5z
ZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBl
LT5nZXRBcnJheVNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKICAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IGNvbnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJy
YXkgZWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICIiKTsKQEAgLTU4NiwxNCArNTg2LDE0IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soaW4KIHsKICAgICBpZiAocFR5cGUu
dHlwZSA9PSBFYnRTdHJ1Y3QpIHsKICAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUu
dXNlckRlZikpIHsKLSAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJh
c2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5
cGUpLCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CiAgICAgICAgIAogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9IGVsc2UgaWYgKElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBl
cnJvcihsaW5lLCByZWFzb24sIFRUeXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIp
OworICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUp
LCAiIik7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODc5LDkgKzg3OSw5IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1FcnJvckNoZWNrKGludCAKICAgICB9CiAKICAgICBp
ZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KQotICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIo
RXZxQ29uc3RSZWFkT25seSk7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJl
YWRPbmx5KTsKICAgICBlbHNlCi0gICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihwYXJhbVF1
YWxpZmllcik7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC05MTMsMjEgKzkxMywyNCBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAvLwogY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VD
b250ZXh0OjpmaW5kRnVuY3Rpb24oaW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVp
bHRJbikKIHsKLSAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNh
bGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgIC8vIEZpcnN0IGZpbmQgYnkgdW5t
YW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbgor
ICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1lLgorICAg
IGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgp
LCBidWlsdEluKTsKKyAgICBpZiAoc3ltYm9sID09IDApIHsKKyAgICAgICAgc3ltYm9sID0gc3lt
Ym9sVGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICB9CiAK
LSAgICBpZiAoc3ltYm9sID09IDApIHsgICAgICAgIAorICAgIGlmIChzeW1ib2wgPT0gMCkgewog
ICAgICAgICBlcnJvcihsaW5lLCAibm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3Vu
ZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIGlmICghIHN5bWJvbC0+aXNGdW5jdGlvbigpKSB7CisgICAgaWYgKCFzeW1ib2wt
PmlzRnVuY3Rpb24oKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBl
Y3RlZCIsIGNhbGwtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICAKLSAgICBjb25zdCBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8
Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb247CisK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKIH0KIAog
Ly8KQEAgLTk3MywxMyArOTc2LDEzIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRp
YWxpemVyKFQKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIGlmIChx
dWFsaWZpZXIgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewogICAg
ICAgICAgICAgZXJyb3IobGluZSwgIiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCAi
JyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsK
LSAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBv
cmFyeSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFU
ZW1wb3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKHR5cGUgIT0gaW5pdGlhbGl6ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3Io
bGluZSwgIiBub24tbWF0Y2hpbmcgdHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAogICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIi
KTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRl
bXBvcmFyeSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKQEAgLTk5OCw3ICsx
MDAxLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAg
ICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0i
LCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigp
KTsKLSAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRl
bXBvcmFyeSk7CisgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihF
dnFUZW1wb3JhcnkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDQ5LDcgKzEwNTIsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENv
bnN0cnVjCiAKICAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdn
cmVnYXRlKCk7CiAgICAgCi0gICAgVFR5cGVMaXN0OjppdGVyYXRvciBtZW1iZXJUeXBlczsKKyAg
ICBUVHlwZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlclR5cGVzOwogICAgIGlmIChvcCA9PSBF
T3BDb25zdHJ1Y3RTdHJ1Y3QpCiAgICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0
KCktPmJlZ2luKCk7CiAgICAgCkBAIC0xMzQ3LDcgKzEzNTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAvLwogVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0
OjphZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUs
IFRTb3VyY2VMb2MgbGluZSkKIHsKLSAgICBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICBUSW50ZXJtVHlwZWQgKnR5cGVkTm9kZTsKICAgICBp
bnQgaW5zdGFuY2VTaXplID0gMDsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwpAQCAtMTQx
MCw2ICsxNDEzLDIwIEBAIGJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9T
X1RMU0luZGV4IHRsc2lJbmRleCA9IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYg
KEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAg
ICAgIGFzc2VydCgwICYmICJGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBp
bmRleCBub3QgaW5pdGFsaXNlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAg
IHJldHVybiBPU19GcmVlVExTSW5kZXgodGxzaUluZGV4KTsKK30KKwogYm9vbCBJbml0aWFsaXpl
R2xvYmFsUGFyc2VDb250ZXh0KCkKIHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgg
PT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKQEAgLTE0MzUsMTcgKzE0NTIsNiBAQCBib29sIElu
aXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1UUGFy
c2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAg
IC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCi0gICAgLy8KLQotICAgIFRUaHJl
YWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNl
Q29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0g
ICAgcmV0dXJuIGxwUGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KLQogYm9v
bCBGcmVlUGFyc2VDb250ZXh0KCkKIHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXgg
PT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKQEAgLTE0NjAsMTYgKzE0NjYsMTQgQEAgYm9vbCBG
cmVlUGFyc2VDb250ZXh0KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGcmVlUGFyc2VD
b250ZXh0SW5kZXgoKQorVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4
dCgpCiB7Ci0gICAgT1NfVExTSW5kZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5k
ZXg7Ci0KLSAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQ
YXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgLy8KKyAgICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVl
ZAorICAgIC8vCiAKLSAgICBHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExT
X0lOREVYOworICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNv
bnRleHRJbmRleCkpOwogCi0gICAgcmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOwor
ICAgIHJldHVybiBscFBhcnNlQ29udGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7CiB9CisKSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2Nv
bXBpbGVyL1Bvb2xBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsMTEgKzE1NywxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RydWN0IHRIZWFkZXIgewogICAgICAgICB0SGVhZGVyKHRI
ZWFkZXIqIG5leHRQYWdlLCBzaXplX3QgcGFnZUNvdW50KSA6CisgICAgICAgICAgICBuZXh0UGFn
ZShuZXh0UGFnZSksCisgICAgICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50KQogI2lmZGVmIEdV
QVJEX0JMT0NLUwotICAgICAgICAgICAgbGFzdEFsbG9jYXRpb24oMCksCisgICAgICAgICAgLCBs
YXN0QWxsb2NhdGlvbigwKQogI2VuZGlmCi0gICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSks
Ci0gICAgICAgICAgICBwYWdlQ291bnQocGFnZUNvdW50KSB7IH0KKyAgICAgICAgICAgIHsgfQog
CiAgICAgICAgIH50SGVhZGVyKCkgewogI2lmZGVmIEdVQVJEX0JMT0NLUwpAQCAtMjYzLDE5ICsy
NjQsMjYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgogICAgIHBvb2xfYWxs
b2NhdG9yKGNvbnN0IHBvb2xfYWxsb2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0b3IocC5nZXRB
bGxvY2F0b3IoKSkgeyB9CiAKKyNpZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChf
UldTVERfQUxMT0NBVE9SKQorICAgIC8vIGxpYkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBh
IGRpZmZlcmVudCBhbGxvY2F0ZS9kZWFsbG9jYXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIg
cHJlLWJha2VzIHNpemVvZihUKSBpbnRvICduJyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVz
IHRvIGJlCisgICAgLy8gYWxsb2NhdGVkLCBub3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAg
ICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9j
YXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUg
biwgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRl
KG4pOworICAgIH0KKyAgICB2b2lkIGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNl
bHNlCiAgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikgeyAKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNp
emVvZihUKSkpOwogICAgIH0KICAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25z
dCB2b2lkKikgeyAKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0
QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwogICAgIH0KLQotICAgIHZvaWQg
ZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7IH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9p
bnRlciwgc2l6ZV90eXBlKSB7IH0KLQotICAgIHBvaW50ZXIgX0NoYXJhbGxvYyhzaXplX3Qgbikg
ewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3Io
KS5hbGxvY2F0ZShuKSk7Ci0gICAgfQorICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXpl
X3R5cGUpIHt9CisjZW5kaWYgIC8vIF9SV1NURF9BTExPQ0FUT1IKIAogICAgIHZvaWQgY29uc3Ry
dWN0KHBvaW50ZXIgcCwgY29uc3QgVCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0K
ICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KSW5kZXg6IEFOR0xF
L3NyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29t
cGlsZXIvU2hhZGVyTGFuZy5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBp
bGVyL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNSArOTAsNDUgQEAgc3Rh
dGljIGJvb2wgR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUoCiAvLwogaW50IFNoSW5pdGlhbGl6
ZSgpCiB7Ci0gICAgYm9vbCByZXQgPSBJbml0UHJvY2VzcygpOworICAgIGlmICghSW5pdFByb2Nl
c3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gcmV0ID8gMSA6IDA7CisgICAg
cmV0dXJuIDE7CiB9CiAKIC8vCi0vLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBk
ZXN0cm95IGNvbXBpbGVyIG9iamVjdHMuCisvLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKKy8vCitp
bnQgU2hGaW5hbGl6ZSgpCit7CisgICAgaWYgKCFEZXRhY2hQcm9jZXNzKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKKy8vCisvLyBJbml0aWFsaXplIGJ1aWx0LWlu
IHJlc291cmNlcyB3aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgogLy8KK3ZvaWQgU2hJbml0
QnVpbHRJblJlc291cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcykKK3sKKyAgICAvLyBD
b25zdGFudHMuCisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhBdHRyaWJzID0gODsKKyAgICByZXNv
dXJjZXMtPk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMTI4OworICAgIHJlc291cmNlcy0+TWF4
VmFyeWluZ1ZlY3RvcnMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMgPSAwOworICAgIHJlc291cmNlcy0+TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9
IDg7CisgICAgcmVzb3VyY2VzLT5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDg7CisgICAgcmVzb3Vy
Y2VzLT5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLT5NYXhE
cmF3QnVmZmVycyA9IDE7CiAKKyAgICAvLyBFeHRlbnNpb25zLgorICAgIHJlc291cmNlcy0+T0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMDsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVz
ZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCiBTaEhhbmRsZSBT
aENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNv
bnN0IFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcykKIHsKICAgICBpZiAoIUluaXRUaHJlYWQo
KSkKQEAgLTEzMCwxNCArMTYwLDYgQEAgdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSkK
IH0KIAogLy8KLS8vIENsZWFudXAgc3ltYm9sIHRhYmxlcwotLy8KLWludCBTaEZpbmFsaXplKCkK
LXsKLSAgICByZXR1cm4gMTsKLX0KLQotLy8KIC8vIERvIGFuIGFjdHVhbCBjb21waWxlIG9uIHRo
ZSBnaXZlbiBzdHJpbmdzLiAgVGhlIHJlc3VsdCBpcyBsZWZ0IAogLy8gaW4gdGhlIGdpdmVuIGNv
bXBpbGUgb2JqZWN0LgogLy8KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2
aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIGludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNv
bnN0CiAgICAgfQogCiAgICAgaWYgKHN0cnVjdHVyZVNpemUgPT0gMCkKLSAgICAgICAgZm9yIChU
VHlwZUxpc3Q6Oml0ZXJhdG9yIHRsID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0
cnVjdCgpLT5lbmQoKTsgdGwrKykKKyAgICAgICAgZm9yIChUVHlwZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIHRsID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgpLT5lbmQoKTsg
dGwrKykKICAgICAgICAgICAgIHN0cnVjdHVyZVNpemUgKz0gKCgqdGwpLnR5cGUpLT5nZXRPYmpl
Y3RTaXplKCk7CiAKICAgICByZXR1cm4gc3RydWN0dXJlU2l6ZTsKSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9T
eW1ib2xUYWJsZS5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1i
b2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBU
VHlwZSYgZ2V0VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0gICAgCiAgICAgY29uc3QgVFR5cGUmIGdl
dFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CiAgICAgYm9vbCBpc1VzZXJUeXBlKCkgY29u
c3QgeyByZXR1cm4gdXNlclR5cGU7IH0KLSAgICB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlm
aWVyIHF1YWxpZmllcikgeyB0eXBlLmNoYW5nZVF1YWxpZmllcihxdWFsaWZpZXIpOyB9CisgICAg
dm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZp
ZXIocXVhbGlmaWVyKTsgfQogICAgIHZvaWQgdXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5
cGUgKnQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CiAgICAgVFR5cGUqIGdldEFycmF5
SW5mb3JtYXRpb25UeXBlKCkgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KIApJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2Nv
bXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1R5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDI4ICs4MiwyNyBAQCB0eXBlZGVmIFRNYXA8VFR5
cGVMaXN0KiwgVFR5cGVMaXN0Kj46Oml0CiBjbGFzcyBUVHlwZSB7CiBwdWJsaWM6CiAgICAgUE9P
TF9BTExPQ0FUT1JfTkVXX0RFTEVURShHbG9iYWxQb29sQWxsb2NhdG9yKQotICAgIGV4cGxpY2l0
IFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1w
b3JhcnksIGludCBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIo
cSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFy
cmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xl
ZCgwKSwgdHlwZU5hbWUoMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBU
VHlwZSgpIHt9CisgICAgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZp
ZXIgcSA9IEV2cVRlbXBvcmFyeSwgaW50IHMgPSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBhID0g
ZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEp
LCBzaXplKHMpLCBtYXRyaXgobSksIGFycmF5KGEpLCBhcnJheVNpemUoMCksCisgICAgICAgICAg
ICBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJ
bmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkK
KyAgICB7CisgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5w
cmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChw
Lm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4
QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5n
bGVkKDApLCB0eXBlTmFtZSgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJp
bmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICBleHBsaWNp
dCBUVHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24g
cCA9IEVicFVuZGVmaW5lZCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoRWJ0
U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwg
bWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhB
cnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmds
ZWQoMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bv
b2xUU3RyaW5nKG4uY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
IGV4cGxpY2l0IFRUeXBlKCkge30KLSAgICB2aXJ0dWFsIH5UVHlwZSgpIHt9Ci0KLSAgICBUVHlw
ZShjb25zdCBUVHlwZSYgdHlwZSkgeyAqdGhpcyA9IHR5cGU7IH0KKyAgICAgICAgICAgIHR5cGUo
cC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwg
c2l6ZShwLnNpemUpLCBtYXRyaXgocC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXpl
KHAuYXJyYXlTaXplKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgw
KSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDAp
LCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQorICAgIHsKKyAgICAgICAgaWYgKHAudXNlckRlZikg
eworICAgICAgICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAg
ICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgp
LmNfc3RyKCkpOworICAgICAgICB9CisgICAgfQorICAgIFRUeXBlKFRUeXBlTGlzdCogdXNlckRl
ZiwgY29uc3QgVFN0cmluZyYgbiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAg
ICAgICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBv
cmFyeSksIHNpemUoMSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDAp
LAorICAgICAgICAgICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhB
cnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmds
ZWQoMCkKKyAgICB7CisgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigp
KTsKKyAgICB9CiAKICAgICB2b2lkIGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1
Y3R1cmVNYXAmIHJlbWFwcGVyKQogICAgIHsKQEAgLTE1Nyw3NyArMTU2LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG5ld1R5cGU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFR5
cGUoVEJhc2ljVHlwZSB0LCBpbnQgcywgYm9vbCBtLCBib29sIGEsIGludCBhUyA9IDApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlID0gdDsgc2l6ZSA9IHM7IG1hdHJpeCA9IG07
IGFycmF5ID0gYTsgYXJyYXlTaXplID0gYVM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShU
QmFzaWNUeXBlIHQsIGludCBzLCBib29sIG0sIFRUeXBlKiB1c2VyRGVmID0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7IHR5cGUgPSB0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBt
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJEZWYpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gdXNlckRlZi0+Z2V0U3RydWN0KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcnJheSBpbmZvcm1hdGlv
biBpbnRhY3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRUeXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJp
bmcobi5jX3N0cigpKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWVsZE5hbWUoY29uc3QgVFN0
cmluZyYgbikgeyBmaWVsZE5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9Ci0gICAg
dmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRUeXBlTmFtZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBhc3NlcnQodHlwZU5hbWUpOwotICAgICAgICByZXR1cm4gKnR5cGVOYW1lOwotICAgIH0KKyAg
ICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2
b2lkIHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KIAotICAgIHZpcnR1
YWwgY29uc3QgVFN0cmluZyYgZ2V0RmllbGROYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGFz
c2VydChmaWVsZE5hbWUpOwotICAgICAgICByZXR1cm4gKmZpZWxkTmFtZTsKLSAgICB9CisgICAg
VFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBwcmVjaXNpb247IH0KKyAg
ICB2b2lkIHNldFByZWNpc2lvbihUUHJlY2lzaW9uIHApIHsgcHJlY2lzaW9uID0gcDsgfQogCi0g
ICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7
IH0KLSAgICB2aXJ0dWFsIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4g
cHJlY2lzaW9uOyB9Ci0gICAgdmlydHVhbCBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0
IHsgcmV0dXJuIHF1YWxpZmllcjsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VQcmVjaXNpb24o
VFByZWNpc2lvbiBwKSB7IHByZWNpc2lvbiA9IHA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdl
UXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CisgICAgVFF1YWxpZmll
ciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNl
dFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVyID0gcTsgfQogCiAgICAgLy8gT25l
LWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIHR5cGUKLSAgICB2aXJ0dWFsIGlu
dCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KLQotICAgIC8vIEZ1bGwt
ZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQotICAgIHZpcnR1YWwg
aW50IGdldEluc3RhbmNlU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobWF0cml4KQot
ICAgICAgICAgICAgcmV0dXJuIHNpemUgKiBzaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25z
dCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNB
cnJheSgpIGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQotICAgIGJvb2wg
aXNGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9Ci0gICAgaW50IGdldEFy
cmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQotICAgIHZvaWQgc2V0QXJyYXlT
aXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQotICAgIHZvaWQgc2V0
TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9Ci0gICAgaW50IGdldE1h
eEFycmF5U2l6ZSAoKSBjb25zdCB7IHJldHVybiBtYXhBcnJheVNpemU7IH0KLSAgICB2b2lkIGNs
ZWFyQXJyYXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNp
emUgPSAwOyB9Ci0gICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBh
cnJheUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KLSAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlv
blR5cGUoKSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYg
IW1hdHJpeCAmJiAhc3RydWN0dXJlOyB9Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKFRCYXNpY1R5cGUgdCkgewotICAgICAgICBzd2l0Y2ggKHQpIHsKLSAgICAgICAgY2Fz
ZSBFYnRWb2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVy
biAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRCb29sOiAgICAg
ICAgICAgICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUi
OyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJu
ICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29u
c3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBUVHlwZTo6Z2V0QmFzaWNT
dHJpbmcodHlwZSk7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25z
dCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9Ci0gICAgY29uc3Qg
Y2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJT
dHJpbmcocXVhbGlmaWVyKTsgfQotICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgeyByZXR1cm4g
c3RydWN0dXJlOyB9Ci0KKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBz
aXplOyB9CisgICAgdm9pZCBzZXROb21pbmFsU2l6ZShpbnQgcykgeyBzaXplID0gczsgfQorICAg
IC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQogICAgIGludCBnZXRPYmpl
Y3RTaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIGludCB0b3RhbFNpemU7CkBAIC0yNDUsNyAr
MTg2LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAgICB9CiAKKyAg
ICBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9
CisgICAgdm9pZCBzZXRNYXRyaXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KKworICAgIGJvb2wg
aXNBcnJheSgpIGNvbnN0ICB7IHJldHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGlu
dCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemU7IH0KKyAgICB2b2lkIHNl
dEFycmF5U2l6ZShpbnQgcykgeyBhcnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KKyAgICBp
bnQgZ2V0TWF4QXJyYXlTaXplICgpIGNvbnN0IHsgcmV0dXJuIG1heEFycmF5U2l6ZTsgfQorICAg
IHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9CisgICAg
dm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgbWF4
QXJyYXlTaXplID0gMDsgfQorICAgIHZvaWQgc2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUq
IHQpIHsgYXJyYXlJbmZvcm1hdGlvblR5cGUgPSB0OyB9CisgICAgVFR5cGUqIGdldEFycmF5SW5m
b3JtYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KKwor
ICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9
CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4
ICYmICFzdHJ1Y3R1cmU7IH0KKwogICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgY29uc3QgeyBy
ZXR1cm4gc3RydWN0dXJlOyB9CisgICAgdm9pZCBzZXRTdHJ1Y3QoVFR5cGVMaXN0KiBzKSB7IHN0
cnVjdHVyZSA9IHM7IH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGFzc2VydCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVybiAqdHlwZU5h
bWU7CisgICAgfQorICAgIHZvaWQgc2V0VHlwZU5hbWUoY29uc3QgVFN0cmluZyYgbikKKyAgICB7
CisgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICB9CisK
KyAgICBib29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBmaWVsZE5hbWUgIT0gMDsgfQorICAg
IGNvbnN0IFRTdHJpbmcmIGdldEZpZWxkTmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3Nl
cnQoZmllbGROYW1lKTsKKyAgICAgICAgcmV0dXJuICpmaWVsZE5hbWU7CisgICAgfQorICAgIHZv
aWQgc2V0RmllbGROYW1lKGNvbnN0IFRTdHJpbmcmIG4pCisgICAgeworICAgICAgICBmaWVsZE5h
bWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgIH0KKwogICAgIFRTdHJpbmcmIGdl
dE1hbmdsZWROYW1lKCkgewogICAgICAgICBpZiAoIW1hbmdsZWQpIHsKICAgICAgICAgICAgIG1h
bmdsZWQgPSBOZXdQb29sVFN0cmluZygiIik7CkBAIC0yNTUsNiArMjM0LDcgQEAgcHVibGljOgog
CiAgICAgICAgIHJldHVybiAqbWFuZ2xlZDsKICAgICB9CisKICAgICBib29sIHNhbWVFbGVtZW50
VHlwZShjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICAgICAgdHlw
ZSA9PSByaWdodC50eXBlICAgJiYKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5z
aXplICAgJiYKQEAgLTI4Miw2ICsyNjIsMTAgQEAgcHVibGljOgogCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CisKKyAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIDo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRQcmVj
aXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNp
b24pOyB9CisgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29t
cGxldGVTdHJpbmcoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMjk1LDExICsyNzksMTIgQEAg
cHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGludCBtYXRyaXggIDogMTsKICAgICB1bnNpZ25lZCBp
bnQgYXJyYXkgICA6IDE7CiAgICAgaW50IGFycmF5U2l6ZTsKKyAgICBpbnQgbWF4QXJyYXlTaXpl
OworICAgIFRUeXBlKiBhcnJheUluZm9ybWF0aW9uVHlwZTsKIAogICAgIFRUeXBlTGlzdCogc3Ry
dWN0dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKICAgICBtdXRhYmxlIGlu
dCBzdHJ1Y3R1cmVTaXplOwotICAgIGludCBtYXhBcnJheVNpemU7Ci0gICAgVFR5cGUqIGFycmF5
SW5mb3JtYXRpb25UeXBlOworCiAgICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZv
ciBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMKICAgICBUU3RyaW5nICptYW5nbGVkOwogICAgIFRTdHJp
bmcgKnR5cGVOYW1lOyAgICAgICAgICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQpJ
bmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBpbnQgUGFQ
YXJzZVN0cmluZ3MoY2hhciogYXJndltdLCBpbnQgc3RyCiAgICAKICAgICBpZiAoKmNwcC0+UGFT
dHJMZW4gPj0gMCkgeyAgICAKICAgICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFy
c2VDb250ZXh0TG9jYWwpKTsKLSAgICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwg
cGFyc2VDb250ZXh0TG9jYWwucmVjb3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2Fs
Lm51bUVycm9ycyA+IDApCisgICAgICAgIGlmIChyZXQgfHwgY3BwLT5Db21waWxlRXJyb3IgPT0g
MSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0
TG9jYWwubnVtRXJyb3JzID4gMCkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBQYVBhcnNl
U3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHIKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgeXllcnJvcihjaGFyICpzKSAKK3ZvaWQgeXllcnJvcihjb25zdCBjaGFyICpzKSAKIHsKICAg
ICBpZiAoKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkFmdGVyRU9GKSB7CiAgICAgICAgIGlm
IChjcHAtPnRva2Vuc0JlZm9yZUVPRiA9PSAxKSB7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
Z2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjb21waWxlci90b29scy4gUmVtb3ZlIGl0IHdoZW4gd2Ug
Y2FuIGV4CiAjZGVmaW5lIHBhcnNlQ29udGV4dCAoKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRl
eHRMb2NhbCkpCiAjZGVmaW5lIFlZTEVYX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCiAjZGVmaW5l
IFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExv
Y2FsKQotZXh0ZXJuIHZvaWQgeXllcnJvcihjaGFyKik7CitleHRlcm4gdm9pZCB5eWVycm9yKGNv
bnN0IGNoYXIqKTsKIAogI2RlZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0zMTEsNyArMzExLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAg
ICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCksICQxLT5pc01hdHJp
eCgpKSk7CiAKICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KQotICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VR
dWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigp
LT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJp
eCgpICYmICQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7CiAgICAgICAgIGVsc2UgaWYg
KCQxLT5pc01hdHJpeCgpKQpAQCAtMzg5LDcgKzM4OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpIHsKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAg
ICAgICAgVFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAg
ICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVj
dCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50
ZXJuYWwgRXJyb3IiLCAiIik7CiAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC00MTMsNyArNDEzLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJu
IHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZh
cmlvdXMgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlw
ZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKQEAgLTY3Myw3ICs2NzMsNyBAQCBmdW5jdGlvbl9pZGVudGlmaWVy
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
b3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEu
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgVFR5cGU6OmdldEJhc2ljU3RyaW5n
KCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBl
KSwgIiIpOwogICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwpAQCAtMTAwNywxMiArMTAwNywxMiBAQCBkZWNsYXJhdGlvbgogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wZXJh
dG9yKEVPcFByb3RvdHlwZSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0T3AoRU9wUHJvdG90eXBl
KTsKICAgICAgICAgJCQgPSBwcm90b3R5cGU7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9y
X2xpc3QgU0VNSUNPTE9OIHsKICAgICAgICAgaWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAg
ICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3BlcmF0b3IoRU9wRGVjbGFyYXRpb24pOwor
ICAgICAgICAgICAgJDEuaW50ZXJtQWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CiAg
ICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOwogICAgIH0KICAgICB8IFBSRUNJU0lPTiBw
cmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKQEAg
LTE3OTUsMTkgKzE3OTUsMjQgQEAgc3RydWN0X2RlY2xhcmF0aW9uCiAgICAgICAgIH0KICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkg
a25vdyBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8gQ2Fy
ZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBh
cnJheS1uZXNzCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0
VHlwZSgkMS50eXBlLCAkMS5zaXplLCAkMS5tYXRyaXgsICQxLnVzZXJEZWYpOworICAgICAgICAg
ICAgVFR5cGUqIHR5cGUgPSAoKiQkKVtpXS50eXBlOworICAgICAgICAgICAgdHlwZS0+c2V0QmFz
aWNUeXBlKCQxLnR5cGUpOworICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoJDEuc2l6
ZSk7CisgICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoJDEubWF0cml4KTsKIAogICAgICAgICAg
ICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAgICAgICAgICAgaWYgKCgqJCQp
W2ldLnR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
JDEubGluZSwgJDEpKQogICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkMS5hcnJheSkKLSAgICAgICAgICAg
ICAgICAoKiQkKVtpXS50eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAgICAgICAg
ICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5
cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAgICAgICAgICAgIHR5cGUt
PnNldEFycmF5U2l6ZSgkMS5hcnJheVNpemUpOworICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYp
IHsKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0
KCkpOworICAgICAgICAgICAgICAgIHR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5
cGVOYW1lKCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIDsKQEAgLTE4
NzMsNyArMTg3OCw3IEBAIGNvbXBvdW5kX3N0YXRlbWVudAogICAgIDogTEVGVF9CUkFDRSBSSUdI
VF9CUkFDRSB7ICQkID0gMDsgfQogICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5wb3AoKTsgfSBSSUdIVF9CUkFDRSB7CiAgICAgICAgIGlmICgkMyAhPSAwKQotICAgICAg
ICAgICAgJDMtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQzLT5zZXRP
cChFT3BTZXF1ZW5jZSk7CiAgICAgICAgICQkID0gJDM7CiAgICAgfQogICAgIDsKQEAgLTE4OTAs
NyArMTg5NSw3IEBAIGNvbXBvdW5kX3N0YXRlbWVudF9ub19uZXdfc2NvcGUKICAgICB9CiAgICAg
fCBMRUZUX0JSQUNFIHN0YXRlbWVudF9saXN0IFJJR0hUX0JSQUNFIHsKICAgICAgICAgaWYgKCQy
KQotICAgICAgICAgICAgJDItPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAg
ICQyLT5zZXRPcChFT3BTZXF1ZW5jZSk7CiAgICAgICAgICQkID0gJDI7CiAgICAgfQogICAgIDsK
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsOCAr
MjAzLDEwIEBAIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBv
b2xBbGxvY2F0b3IpCiAKICAgICBUSW50ZXJtTm9kZSgpIDogbGluZSgwKSB7fQotICAgIHZpcnR1
YWwgVFNvdXJjZUxvYyBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkgeyBsaW5lID0gbDsgfQorCisgICAgVFNvdXJj
ZUxvYyBnZXRMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQorICAgIHZvaWQgc2V0TGluZShU
U291cmNlTG9jIGwpIHsgbGluZSA9IGw7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKikgPSAwOwogICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5
cGVkKCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdl
dEFzQ29uc3RhbnRVbmlvbigpIHsgcmV0dXJuIDA7IH0KQEAgLTIxNSw2ICsyMTcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVy
biAwOyB9CiAgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIH5USW50ZXJtTm9kZSgpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
VFNvdXJjZUxvYyBsaW5lOwogfTsKQEAgLTIzMywyMiArMjM2LDIzIEBAIHN0cnVjdCBUSW50ZXJt
Tm9kZVBhaXIgewogY2xhc3MgVEludGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKIHB1
YmxpYzoKICAgICBUSW50ZXJtVHlwZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9Ci0g
ICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsgcmV0dXJuIHRo
aXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0g
dDsgfQotICAgIHZpcnR1YWwgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0
eXBlOyB9Ci0gICAgdmlydHVhbCBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlw
ZTsgfQotCi0gICAgdmlydHVhbCBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KLSAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVh
bGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQotICAgIHZpcnR1
YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNp
c2lvbigpOyB9Ci0gICAgdmlydHVhbCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVy
biB0eXBlLmdldE5vbWluYWxTaXplKCk7IH0KLSAgICB2aXJ0dWFsIGludCBnZXRTaXplKCkgY29u
c3QgeyByZXR1cm4gdHlwZS5nZXRJbnN0YW5jZVNpemUoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgdmly
dHVhbCBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigp
OyB9Ci0gICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0IHsgcmV0dXJu
IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0
cmluZygpICBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CisgICAg
dmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAg
ICB2b2lkIHNldFR5cGUoY29uc3QgVFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBjb25zdCBU
VHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSogZ2V0VHlw
ZVBvaW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5
cGUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1YWxpZmll
ciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9Cisg
ICAgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNp
c2lvbigpOyB9CisgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOyB9CisgICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVy
biB0eXBlLmlzQXJyYXkoKTsgfQorICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0
eXBlLmlzVmVjdG9yKCk7IH0KKyAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5pc1NjYWxhcigpOyB9CisgICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7
IHJldHVybiB0eXBlLmdldEJhc2ljU3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFs
aWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9
CiAgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Q29tcGxldGVTdHJpbmcoKTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC0yNjYsMTMgKzI3MCwxNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB0ZXN0KGFUZXN0KSwKICAgICAgICAgICAgIHRlcm1pbmFsKGFU
ZXJtaW5hbCksCiAgICAgICAgICAgICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorCiAgICAgdmlydHVh
bCBUSW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAgVEludGVybU5vZGUg
KmdldEluaXQoKSB7IHJldHVybiBpbml0OyB9CiAgICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7
IHJldHVybiBib2R5OyB9CiAgICAgVEludGVybVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVz
dDsgfQogICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsg
fQogICAgIGJvb2wgdGVzdEZpcnN0KCkgeyByZXR1cm4gZmlyc3Q7IH0KKwogcHJvdGVjdGVkOgog
ICAgIFRJbnRlcm1Ob2RlICppbml0OwogICAgIFRJbnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBj
b2RlIHRvIGxvb3Agb3ZlcgpAQCAtMjg5LDkgKzI5NiwxMiBAQCBwdWJsaWM6CiAgICAgVEludGVy
bUJyYW5jaChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogZSkgOgogICAgICAgICAgICAgZmxv
d09wKG9wKSwKICAgICAgICAgICAgIGV4cHJlc3Npb24oZSkgeyB9CisKICAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAgVE9wZXJhdG9yIGdldEZsb3dP
cCgpIHsgcmV0dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigp
IHsgcmV0dXJuIGV4cHJlc3Npb247IH0KKwogcHJvdGVjdGVkOgogICAgIFRPcGVyYXRvciBmbG93
T3A7CiAgICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZv
ciAicmV0dXJuIGV4cDsiIHN0YXRlbWVudHMKQEAgLTMwNywxMCArMzE3LDEzIEBAIHB1YmxpYzoK
ICAgICAvLyBpdCBpcyBlc3NlbnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0
byBzeW1ib2wKICAgICBUSW50ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNv
bnN0IFRUeXBlJiB0KSA6IAogICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBz
eW1ib2wgPSBzeW07fSAKLSAgICB2aXJ0dWFsIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlk
OyB9Ci0gICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXRTeW1ib2woKSBjb25zdCB7IHJldHVy
biBzeW1ib2w7ICB9CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQorICAg
IGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQorCiAg
ICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKICAgICB2aXJ0dWFs
IFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKwogcHJv
dGVjdGVkOgogICAgIGludCBpZDsKICAgICBUU3RyaW5nIHN5bWJvbDsKQEAgLTMxOSwxMSArMzMy
LDE1IEBAIHByb3RlY3RlZDoKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJ
bnRlcm1UeXBlZCB7CiBwdWJsaWM6CiAgICAgVEludGVybUNvbnN0YW50VW5pb24oQ29uc3RhbnRV
bmlvbiAqdW5pb25Qb2ludGVyLCBjb25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIHVu
aW9uQXJyYXlQb2ludGVyKHVuaW9uUG9pbnRlcikgeyB9CisKICAgICBDb25zdGFudFVuaW9uKiBn
ZXRVbmlvbkFycmF5UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9
CiAgICAgdm9pZCBzZXRVbmlvbkFycmF5UG9pbnRlcihDb25zdGFudFVuaW9uICpjKSB7IHVuaW9u
QXJyYXlQb2ludGVyID0gYzsgfQorCiAgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Z2V0QXNDb25zdGFudFVuaW9uKCkgIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciogKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCog
Zm9sZChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOworICAgIHZpcnR1YWwg
dm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisKKyAgICBUSW50ZXJtVHlwZWQqIGZv
bGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgog
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXlQb2ludGVyOwogfTsKQEAgLTMzNCw5ICszNTEs
MTEgQEAgcHJvdGVjdGVkOgogY2xhc3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1U
eXBlZCB7CiBwdWJsaWM6CiAgICAgVE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7
IH0KKyAgICB2b2lkIHNldE9wKFRPcGVyYXRvciBvKSB7IG9wID0gbzsgfQorCiAgICAgYm9vbCBt
b2RpZmllc1N0YXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJikgeyByZXR1cm4gdHJ1ZTsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBl
ZChUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKSksIG9wKG8pIHt9CiAgICAgVEludGVybU9w
ZXJhdG9yKFRPcGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9
ICAgCkBAIC0zNDksMTMgKzM2OCwxNiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUSW50ZXJtQmluYXJ5
IDogcHVibGljIFRJbnRlcm1PcGVyYXRvciB7CiBwdWJsaWM6CiAgICAgVEludGVybUJpbmFyeShU
T3BlcmF0b3IgbykgOiBUSW50ZXJtT3BlcmF0b3Iobykge30KLSAgICB2aXJ0dWFsIHZvaWQgdHJh
dmVyc2UoVEludGVybVRyYXZlcnNlciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRl
cm1UeXBlZCogbikgeyBsZWZ0ID0gbjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50
ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdl
dExlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0OyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQq
IGdldFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcmlnaHQ7IH0KKwogICAgIHZpcnR1YWwgVEludGVy
bUJpbmFyeSogZ2V0QXNCaW5hcnlOb2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwcm9tb3RlKFRJbmZvU2luayYpOworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKik7CisKKyAgICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxl
ZnQgPSBuOyB9CisgICAgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBu
OyB9CisgICAgVEludGVybVR5cGVkKiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQor
ICAgIFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQorICAg
IGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBl
ZCogbGVmdDsKICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OwpAQCAtMzY4LDExICszOTAsMTQgQEAg
Y2xhc3MgVEludGVybVVuYXJ5IDogcHVibGljIFRJbnRlcm1PcGVyYQogcHVibGljOgogICAgIFRJ
bnRlcm1VbmFyeShUT3BlcmF0b3IgbywgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQp
LCBvcGVyYW5kKDApIHt9CiAgICAgVEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1P
cGVyYXRvcihvKSwgb3BlcmFuZCgwKSB7fQorCiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlw
ZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0T3Bl
cmFuZCgpIHsgcmV0dXJuIG9wZXJhbmQ7IH0KICAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0
QXNVbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCBib29sIHByb21vdGUo
VEluZm9TaW5rJik7CisKKyAgICB2b2lkIHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7IG9w
ZXJhbmQgPSBvOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4gb3Bl
cmFuZDsgfSAgICAKKyAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7CisKIHByb3RlY3RlZDoK
ICAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQ7CiB9OwpAQCAtMzg3LDIxICs0MTIsMjQgQEAgcHVi
bGljOgogICAgIFRJbnRlcm1BZ2dyZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwg
dXNlckRlZmluZWQoZmFsc2UpLCBwcmFnbWFUYWJsZSgwKSB7IH0KICAgICBUSW50ZXJtQWdncmVn
YXRlKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9
CiAgICAgflRJbnRlcm1BZ2dyZWdhdGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorCiAgICAg
dmlydHVhbCBUSW50ZXJtQWdncmVnYXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9
Ci0gICAgdmlydHVhbCBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2Vx
dWVuY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5h
bWUgPSBuOyB9Ci0gICAgdmlydHVhbCBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbmFtZTsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2Vy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRy
dWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZp
bmVkOyB9Ci0gICAgdmlydHVhbCBUUXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1
cm4gcXVhbGlmaWVyOyB9CisKKyAgICBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyBy
ZXR1cm4gc2VxdWVuY2U7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBu
YW1lID0gbjsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lOyB9CisKKyAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7
IH0KKyAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAg
IFRRdWFsaWZpZXJMaXN0JiBnZXRRdWFsaWZpZXIoKSB7IHJldHVybiBxdWFsaWZpZXI7IH0KICAg
ICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KLSAgICB2b2lkIHNl
dERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyBy
ZXR1cm4gb3B0aW1pemU7IH0KKyAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7
IH0KICAgICBib29sIGdldERlYnVnKCkgeyByZXR1cm4gZGVidWc7IH0KICAgICB2b2lkIGFkZFRv
UHJhZ21hVGFibGUoY29uc3QgVFByYWdtYVRhYmxlJiBwVGFibGUpOwogICAgIGNvbnN0IFRQcmFn
bWFUYWJsZSYgZ2V0UHJhZ21hVGFibGUoKSBjb25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0K
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0
ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYg
b3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVu
dCBvcGVyYXRvcgpAQCAtNDIzLDEyICs0NTEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgVElu
dGVybVR5cGVkKFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCks
IHRydWVCbG9jayh0cnVlQiksIGZhbHNlQmxvY2soZmFsc2VCKSB7fQogICAgIFRJbnRlcm1TZWxl
Y3Rpb24oVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2Rl
KiBmYWxzZUIsIGNvbnN0IFRUeXBlJiB0eXBlKSA6CiAgICAgICAgICAgICBUSW50ZXJtVHlwZWQo
dHlwZSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxz
ZUIpIHt9CisKICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwor
CiAgICAgYm9vbCB1c2VzVGVybmFyeU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Vm9pZDsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldENvbmRpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbjsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUq
IGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVCbG9jazsgfQotICAgIHZpcnR1YWwg
VEludGVybU5vZGUqIGdldEZhbHNlQmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9
Ci0gICAgdmlydHVhbCBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJl
dHVybiB0aGlzOyB9CisgICAgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGNvbmRpdGlvbjsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7
IHJldHVybiB0cnVlQmxvY2s7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1Nl
bGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJt
VHlwZWQqIGNvbmRpdGlvbjsKICAgICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOwpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIzICsxMiwzMSBAQAog
Ly8KIGNsYXNzIFRDb25zdFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKIHB1
YmxpYzoKLSAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNp
bmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmss
IFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwg
dHlwZSh0KSwKLSAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVD
b25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFi
bGUoc3ltVGFibGUpLCBlcnJvcihmYWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgw
KQotCXsKLQkJaW5kZXggPSAwOwotCX0KKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlv
biogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBl
LCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KQorICAg
ICAgICA6IGVycm9yKGZhbHNlKSwKKyAgICAgICAgICBpbmRleCgwKSwKKyAgICAgICAgICB1bmlv
bkFycmF5KGNVbmlvbiksCisgICAgICAgICAgdHlwZSh0KSwKKyAgICAgICAgICBjb25zdHJ1Y3Rv
clR5cGUoY29uc3RydWN0VHlwZSksCisgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbShzaW5n
bGVDb25zdFBhcmFtKSwKKyAgICAgICAgICBpbmZvU2luayhzaW5rKSwKKyAgICAgICAgICBzeW1i
b2xUYWJsZShzeW1UYWJsZSksCisgICAgICAgICAgc2l6ZSgwKSwKKyAgICAgICAgICBpc01hdHJp
eChmYWxzZSksCisgICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgfQogCi0JYm9vbCBlcnJv
cjsKKyAgICBib29sIGVycm9yOwogCiBwcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50
ZXJtU3ltYm9sKik7Ci0Jdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5p
b24qKTsKLQlib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0J
Ym9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0
U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotCWJvb2wgdmlzaXRMb29w
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopOwotCWJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqKTsKKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwor
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBi
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCopOwogCiAgICAgaW50IGluZGV4OwogICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYwkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2F0b20uYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElB
IENvcnBvcmF0aW9uLgogCkBAIC02MjQsNyArNjE5LDcgQEAgc3RhdGljIGludCBBZGRBdG9tRml4
ZWQoQXRvbVRhYmxlICphdGFibAogCiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJs
ZSwgaW50IGh0c2l6ZSkKIHsKLSAgICBpbnQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAg
ICAgaHRzaXplID0gaHRzaXplIDw9IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsK
ICAgICBpZiAoIUluaXRTdHJpbmdUYWJsZSgmYXRhYmxlLT5zdGFibGUpKQpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCAr
MSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmln
aHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCAr
MSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmln
aHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9jcHAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2NwcC5jCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY3BwLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3BwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1
Y3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0
cnVjdC5jCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY3Bwc3RydWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9t
ZW1vcnkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21l
bW9yeS5jCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvbWVtb3J5LmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1v
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9y
eS5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
bWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jw
b3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3Jh
dGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9j
ZXNzLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9wcmVwcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmMJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
Y2FubmVyLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zY2FubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJ
QSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9z
bGdsb2JhbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3NsZ2xvYmFscy5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2xnbG9iYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zeW1ib2xzLmMJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zeW1ib2xzLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIs
IE5WSURJQSBDb3Jwb3JhdGlvbi4KIApAQCAtMTU3LDcgKzE1Miw3IEBAIFN5bWJvbCAqTmV3U3lt
Ym9sKFNvdXJjZUxvYyAqbG9jLCBTY29wZSAKIHsKICAgICBTeW1ib2wgKmxTeW1iOwogICAgIGNo
YXIgKnBjaDsKLSAgICBpbnQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgbFN5bWIg
PSAoU3ltYm9sICopIG1lbV9BbGxvYyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKICAg
ICBsU3ltYi0+bGVmdCA9IE5VTEw7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3N5bWJvbHMuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3N5bWJvbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL3Rva2Vucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvdG9rZW5zLmMJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci90b2tlbnMuYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJ
RElBIENvcnBvcmF0aW9uLgogCkBAIC0yMTAsNyArMjA1LDcgQEAgdm9pZCBEZWxldGVUb2tlblN0
cmVhbShUb2tlblN0cmVhbSAqcFRvawogdm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRv
aywgaW50IHRva2VuLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKICAgICBjb25zdCBjaGFyICpz
OwotICAgIHVuc2lnbmVkIGNoYXIgKnN0cj1OVUxMOworICAgIGNoYXIgKnN0cj1OVUxMOwogCiAg
ICAgaWYgKHRva2VuID4gMjU2KQogICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hh
cikoKHRva2VuICYgMHg3ZikgKyAweDgwKSk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvdG9rZW5zLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci90b2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAw
MiwgTlZJRElBIENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsMTIgQEAgbmFtZXNwYWNlIGVnbAogewogRGlzcGxheTo6RGlzcGxheShIREMg
ZGV2aWNlQ29udGV4dCkgOiBtRGMoZGV2aWNlQ29udGV4dCkKIHsKKyAgICBtRDNkOU1vZHVsZSA9
IE5VTEw7CisgICAgCiAgICAgbUQzZDkgPSBOVUxMOworICAgIG1EM2Q5ZXggPSBOVUxMOwogICAg
IG1EZXZpY2UgPSBOVUxMOworICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogCiAgICAgbUFkYXB0
ZXIgPSBEM0RBREFQVEVSX0RFRkFVTFQ7CiAKQEAgLTUxLDcgKzU1LDM4IEBAIGJvb2wgRGlzcGxh
eTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1EM2Q5
ID0gRGlyZWN0M0RDcmVhdGU5KEQzRF9TREtfVkVSU0lPTik7CisgICAgbUQzZDlNb2R1bGUgPSBM
b2FkTGlicmFyeShURVhUKCJkM2Q5LmRsbCIpKTsKKyAgICBpZiAobUQzZDlNb2R1bGUgPT0gTlVM
TCkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdHlwZWRlZiBJRGlyZWN0M0Q5KiAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlG
dW5jKShVSU5UKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlGdW5jIERpcmVjdDNEQ3JlYXRlOVB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQz
ZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTkiKSk7CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5
UHRyID09IE5VTEwpCisgICAgeworICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENy
ZWF0ZTlFeEZ1bmMpKFVJTlQsIElEaXJlY3QzRDlFeCoqKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlF
eEZ1bmMgRGlyZWN0M0RDcmVhdGU5RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3Jl
YXRlOUV4RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlF
eCIpKTsKKworICAgIC8vIFVzZSBEaXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVy
IHRoaW5ncywgdGhpcyB2ZXJzaW9uIGlzIGxlc3MKKyAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQg
YSBsb3N0IGNvbnRleHQsIGZvciBleGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKKyAgICAv
LyBkZXNrdG9wLiBEaXJlY3QzRDlFeCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQg
bGF0ZXIgaWYgc3VpdGFibGUgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChEaXJlY3Qz
RENyZWF0ZTlFeFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19W
RVJTSU9OLCAmbUQzZDlleCkpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1EM2Q5ZXgpOworICAg
ICAgICBtRDNkOWV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZtRDNkOSkpOworICAgICAgICBBU1NFUlQobUQzZDkpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOVB0cihEM0RfU0RL
X1ZFUlNJT04pOworICAgIH0KIAogICAgIGlmIChtRDNkOSkKICAgICB7CkBAIC02OSw4NiArMTA0
LDkxIEBAIGJvb2wgRGlzcGxheTo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgaWYgKG1EZXZpY2VD
YXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRDNkOSA9IE5VTEw7
CisgICAgICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Tk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtTWluU3dhcEludGVydmFsID0gNDsKLSAgICAgICAgICAgIG1NYXhT
d2FwSW50ZXJ2YWwgPSAwOwogCi0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0
aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9JTU1FRElBVEUpIHttTWluU3dhcElu
dGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMCk7IG1NYXhTd2FwSW50ZXJ2YWwg
PSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAwKTt9Ci0gICAgICAgICAgICBpZiAobURldmlj
ZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpICAg
ICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7IG1N
YXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAxKTt9Ci0gICAgICAg
ICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9J
TlRFUlZBTF9UV08pICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJ
bnRlcnZhbCwgMik7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFs
LCAyKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxz
ICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRSkgICAgIHttTWluU3dhcEludGVydmFsID0gc3Rk
OjptaW4obU1pblN3YXBJbnRlcnZhbCwgMyk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heCht
TWF4U3dhcEludGVydmFsLCAzKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2Vu
dGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHttTWluU3dh
cEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2FwSW50ZXJ2
YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9CisgICAgICAgIG1NaW5Td2FwSW50
ZXJ2YWwgPSA0OworICAgICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKIAotICAgICAgICAgICAg
Y29uc3QgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdHNbXSA9Ci0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAotICAgICAgICAgICAgLy8gIEQzREZNVF9B
MlIxMEcxMEIxMCwgICAvLyBUaGUgY29sb3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVh
ZFBpeGVscyB3aXRoIFVOU0lHTkVEX0JZVEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRl
cmluZyBza2lwcGVkIGEgY29sb3VyIHZhbHVlLgotICAgICAgICAgICAgICAgIEQzREZNVF9BOFI4
RzhCOCwKLSAgICAgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAgICAgICAgIEQz
REZNVF9YMVI1RzVCNSwKLSAgICAgICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAg
ICAgIH07CisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBE
M0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1p
bihtTWluU3dhcEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhT
d2FwSW50ZXJ2YWwsIDApO30KKyAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbklu
dGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3Rk
OjptYXgobU1heFN3YXBJbnRlcnZhbCwgMSk7fQorICAgICAgICBpZiAobURldmljZUNhcHMuUHJl
c2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pICAgICAgIHttTWlu
U3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7IG1NYXhTd2FwSW50
ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTt9CisgICAgICAgIGlmIChtRGV2
aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVF
KSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsg
bU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KKyAgICAg
ICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5U
RVJWQUxfRk9VUikgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50
ZXJ2YWwsIDQpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
NCk7fQogCi0gICAgICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1td
ID0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAot
ICAgICAgICAgICAgICAgIEQzREZNVF9EMzIsCi0gICAgICAgICAgICAvLyAgRDNERk1UX0QxNVMx
LAotICAgICAgICAgICAgICAgIEQzREZNVF9EMjRTOCwKLSAgICAgICAgICAgICAgICBEM0RGTVRf
RDI0WDgsCi0gICAgICAgICAgICAvLyAgRDNERk1UX0QyNFg0UzQsCi0gICAgICAgICAgICAgICAg
RDNERk1UX0QxNiwKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAg
ICAgICAgIC8vICBEM0RGTVRfRDI0RlM4Ci0gICAgICAgICAgICB9OworICAgICAgICBjb25zdCBE
M0RGT1JNQVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAgICAg
RDNERk1UX0ExUjVHNUI1LAorICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRo
ZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdO
RURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xv
dXIgdmFsdWUuCisgICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgICAgICBEM0RG
TVRfUjVHNkI1LAorICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgRDNE
Rk1UX1g4UjhHOEI4CisgICAgICAgIH07CiAKLSAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1
cnJlbnREaXNwbGF5TW9kZTsKLSAgICAgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1v
ZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOworICAgICAgICBjb25zdCBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAvLyAgRDNERk1U
X0QxNl9MT0NLQUJMRSwKKyAgICAgICAgICAgIEQzREZNVF9EMzIsCisgICAgICAgIC8vICBEM0RG
TVRfRDE1UzEsCisgICAgICAgICAgICBEM0RGTVRfRDI0UzgsCisgICAgICAgICAgICBEM0RGTVRf
RDI0WDgsCisgICAgICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKKyAgICAgICAgICAgIEQzREZNVF9E
MTYsCisgICAgICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKKyAgICAgICAgLy8gIEQzREZN
VF9EMjRGUzgKKyAgICAgICAgfTsKIAotICAgICAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsK
KyAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgICAgICBtRDNk
OS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsK
IAotICAgICAgICAgICAgZm9yIChpbnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHNp
emVvZihyZW5kZXJUYXJnZXRGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3JtYXRJbmRl
eCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJn
ZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKyAgICAgICAgQ29u
ZmlnU2V0IGNvbmZpZ1NldDsKIAotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCBy
ZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZv
cm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1B
VCk7IGZvcm1hdEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzREZPUk1BVCByZW5k
ZXJUYXJnZXRGb3JtYXQgPSByZW5kZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CiAKLSAgICAg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgZGVw
dGhTdGVuY2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5j
aWxGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVuY2ls
SW5kZXggPSAwOyBkZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRz
KSAvIHNpemVvZihEM0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAg
ICAgICAgICBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9ybWF0
c1tkZXB0aFN0ZW5jaWxJbmRleF07CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVu
dERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJG
QUNFLCBkZXB0aFN0ZW5jaWxGb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgRDNERk9STUFUIGRlcHRoU3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZvcm1hdHNb
ZGVwdGhTdGVuY2lsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NV
UkZBQ0UsIGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBk
ZXB0aFN0ZW5jaWxGb3JtYXQpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRj
aChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRl
clRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0KTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBFbnVtZXJh
dGUgbXVsdGktc2FtcGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
ZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZmlnU2V0LmFkZChjdXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1N
YXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAw
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZmlnU2V0LmFkZChjdXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWws
IG1NYXhTd2FwSW50ZXJ2YWwsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0
LCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBp
bnRlcm5hbGx5Ci0gICAgICAgICAgICBFR0xpbnQgaW5kZXggPSAxOwotICAgICAgICAgICAgZm9y
IChDb25maWdTZXQ6Okl0ZXJhdG9yIGNvbmZpZyA9IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNv
bmZpZyAhPSBjb25maWdTZXQubVNldC5lbmQoKTsgY29uZmlnKyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOwotICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb24ubUNvbmZpZ0lEID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgLy8gR2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQg
YW5kIHN0b3JlIHRoZW0gaW50ZXJuYWxseQorICAgICAgICBFR0xpbnQgaW5kZXggPSAxOworICAg
ICAgICBmb3IgKENvbmZpZ1NldDo6SXRlcmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVn
aW4oKTsgY29uZmlnICE9IGNvbmZpZ1NldC5tU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICAgICAg
eworICAgICAgICAgICAgQ29uZmlnIGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOworICAgICAgICAg
ICAgY29uZmlndXJhdGlvbi5tQ29uZmlnSUQgPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4Kys7
CiAKLSAgICAgICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24p
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25m
aWd1cmF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZSgpOworCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE4NSw2ICsyMjUsMjQgQEAgdm9pZCBEaXNw
bGF5Ojp0ZXJtaW5hdGUoKQogICAgICAgICBtRDNkOS0+UmVsZWFzZSgpOwogICAgICAgICBtRDNk
OSA9IE5VTEw7CiAgICAgfQorCisgICAgaWYgKG1EZXZpY2VXaW5kb3cpCisgICAgeworICAgICAg
ICBEZXN0cm95V2luZG93KG1EZXZpY2VXaW5kb3cpOworICAgICAgICBtRGV2aWNlV2luZG93ID0g
TlVMTDsKKyAgICB9CisgICAgCisgICAgaWYgKG1EM2Q5ZXgpCisgICAgeworICAgICAgICBtRDNk
OWV4LT5SZWxlYXNlKCk7CisgICAgICAgIG1EM2Q5ZXggPSBOVUxMOworICAgIH0KKworICAgIGlm
IChtRDNkOU1vZHVsZSkKKyAgICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EM2Q5TW9kdWxlKTsK
KyAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOworICAgIH0KIH0KIAogdm9pZCBEaXNwbGF5Ojpz
dGFydFNjZW5lKCkKQEAgLTI1NCwxMzIgKzMxMiw3NCBAQCBib29sIERpc3BsYXk6OmdldENvbmZp
Z0F0dHJpYihFR0xDb25maWcgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVN1cmZhY2UgKkRpc3Bs
YXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCiti
b29sIERpc3BsYXk6OmNyZWF0ZURldmljZSgpCiB7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1
cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIg
d2luZG93TmFtZVtdID0gVEVYVCgiQW5nbGVIaWRkZW5XaW5kb3ciKTsKKyAgICBzdGF0aWMgY29u
c3QgVENIQVIgY2xhc3NOYW1lW10gPSBURVhUKCJTVEFUSUMiKTsKKworICAgIG1EZXZpY2VXaW5k
b3cgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRvd05h
bWUsIFdTX0RJU0FCTEVEIHwgV1NfUE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVM
TCwgR2V0TW9kdWxlSGFuZGxlKE5VTEwpLCBOVUxMKTsKIAogICAgIEQzRFBSRVNFTlRfUEFSQU1F
VEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKIAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1
dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb25maWd1cmF0aW9uLT5tRGVwdGhTdGVuY2lsRm9ybWF0
OworICAgIC8vIFRoZSBkZWZhdWx0IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4g
U3VyZmFjZSB3aWxsIGNyZWF0ZSBhIG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJh
bWV0ZXJzLgorICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBE
M0RGTVRfVU5LTk9XTjsKICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAx
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBjb25maWd1cmF0aW9u
LT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJX
aWR0aCA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDA7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IGNvbmZpZ3VyYXRp
b24tPm1EZXB0aFNpemUgPyBUUlVFIDogRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdo
dCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZB
TFNFOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5oRGV2aWNlV2luZG93ID0gd2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50
ZWQKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBM
RV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMu
aERldmljZVdpbmRvdyA9IG1EZXZpY2VXaW5kb3c7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVs
dGlTYW1wbGVRdWFsaXR5ID0gMDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5
cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRh
dGlvbkludGVydmFsID0gY29udmVydEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwpOwotICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7Ci0gICAgcHJl
c2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisgICAgcHJlc2VudFBh
cmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CiAKLSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpz
d2FwQ2hhaW4gPSBOVUxMOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJm
YWNlID0gTlVMTDsKKyAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVT
RVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7CiAKLSAgICBpZiAoIW1EZXZpY2UpCisg
ICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9W
RVJURVhQUk9DRVNTSU5HIHwgRDNEQ1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVy
cywgJm1EZXZpY2UpOworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICB7Ci0gICAgICAgIERXT1JEIGJlaGF2
aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hB
TkdFUzsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9
CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVy
LCBtRGV2aWNlVHlwZSwgd2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJF
X1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0
ZXJzLCAmbURldmljZSk7CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
cmVzdWx0ID0gbUQzZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZp
Y2VXaW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VT
U0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CiAKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6
OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgd2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NP
RlRXQVJFX1ZFUlRFWFBST0NFU1NJTkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwot
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0K
LSAgICAgICAgaWYgKG1EZXZpY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TY2VuZVN0YXJ0
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkdldFN3YXBDaGFpbigwLCAmc3dhcENo
YWluKTsKLSAgICAgICAgICAgIG1EZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJmRlcHRo
U3RlbmNpbFN1cmZhY2UpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAo
IW1TdXJmYWNlU2V0LmVtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHRoZSBk
ZXZpY2UgYWxyZWFkeSBleGlzdHMsIGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFjZXMvd2luZG93
cyBjdXJyZW50bHkgaW4gdXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZQotICAgICAgICAgICAgLy8gYSBz
ZXBhcmF0ZSBzd2FwIGNoYWluIGZvciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KLSAgICAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJl
c2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlv
bmFsIHN3YXAgY2hhaW5zLiBPdXQgb2YgbWVtb3J5LiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAg
ICAgLy8gQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlIGEgZGVwdGhzdGVuY2lsIHN1cmZhY2UsIHVubGlrZSAKLSAgICAgICAgICAgIC8vIENy
ZWF0ZURldmljZSwgc28gd2UgbXVzdCBkbyBzbyBleHBsaWNpdGx5LgotICAgICAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJz
Lk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBG
QUxTRSwgJmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CiAKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbi4gT3V0
IG9mIG1lbW9yeS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExP
QywgKGVnbDo6U3VyZmFjZSopTlVMTCk7Ci0gICAgICAgICAgICB9CisgICAgLy8gUGVybWFuZW50
IG5vbi1kZWZhdWx0IHN0YXRlcworICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BP
SU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKIAotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3VyZmFj
ZXMgaW4gdXNlLCB0aGVuIGFsbCB0aGUgc3VyZmFjZXMvd2luZG93cwotICAgICAgICAgICAgLy8g
aGF2ZSBiZWVuIGRlc3Ryb3llZCwgYW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdpbmFs
bHkgY3JlYXRlZCBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IKLSAgICAgICAgICAgIC8vIHVzZSB3
aXRoIHRoZSBuZXcgc3VyZmFjZSB3ZSBhcmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1EZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgbVNjZW5l
U3RhcnRlZCA9IGZhbHNlOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IHJlc2V0IHByZXNlbnRhdGlvbiBwYXJhbWV0
ZXJzIGZvciBkZXZpY2UuIE91dCBvZiBtZW1vcnkuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAg
ICBpZiAobURldmljZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU2NlbmVTdGFy
dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZz
d2FwQ2hhaW4pOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZh
Y2UoJmRlcHRoU3RlbmNpbFN1cmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IE5VTEw7CisgICAgcmV0dXJuIHRydWU7Cit9CiAK
LSAgICBpZiAoc3dhcENoYWluKQotICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNl
KHRoaXMsIHN3YXBDaGFpbiwgZGVwdGhTdGVuY2lsU3VyZmFjZSwgY29uZmlndXJhdGlvbik7Ci0g
ICAgICAgIG1TdXJmYWNlU2V0Lmluc2VydChzdXJmYWNlKTsKK1N1cmZhY2UgKkRpc3BsYXk6OmNy
ZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCit7CisgICAg
Y29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKIAot
ICAgICAgICBzd2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU3VyZmFjZSAqc3VyZmFj
ZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdyk7CisgICAgbVN1cmZh
Y2VTZXQuaW5zZXJ0KHN1cmZhY2UpOwogCiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLUVHTENv
bnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQorRUdM
Q29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNv
bnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiB7CiAgICAgY29uc3QgZWdsOjpDb25maWcg
KmNvbmZpZyA9IG1Db25maWdTZXQuZ2V0KGNvbmZpZ0hhbmRsZSk7CiAKLSAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjb25maWcpOworICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0KTsKICAgICBtQ29u
dGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKICAgICByZXR1cm4gY29udGV4dDsKQEAgLTQ2OCw0
ICs0NjgsMjMgQEAgRDNEQ0FQUzkgRGlzcGxheTo6Z2V0RGV2aWNlQ2FwcygpCiB7CiAgICAgcmV0
dXJuIG1EZXZpY2VDYXBzOwogfQorCit2b2lkIERpc3BsYXk6OmdldE11bHRpU2FtcGxlU3VwcG9y
dChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAo
aW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FN
UExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNh
bXBsZUluZGV4LCBOVUxMKTsKKworICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxl
SW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7CisgICAgfQorfQorCitib29sIERpc3BsYXk6Omdl
dENvbXByZXNzZWRUZXh0dXJlU3VwcG9ydCgpCit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVu
dERpc3BsYXlNb2RlOworICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIs
ICZjdXJyZW50RGlzcGxheU1vZGUpOworCisgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMSkpOworfQogfQpJbmRleDog
QU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRGlzcGxheQogICAgIGJv
b2wgZ2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVH
TGludCAqdmFsdWUpOwogCiAgICAgZWdsOjpTdXJmYWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhX
TkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnKTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRl
eHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0
KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQp
OwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAg
IHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtNjAsMTYgKzYw
LDIyIEBAIGNsYXNzIERpc3BsYXkKIAogICAgIHZpcnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0
RGV2aWNlKCk7CiAgICAgdmlydHVhbCBEM0RDQVBTOSBnZXREZXZpY2VDYXBzKCk7CisgICAgdmly
dHVhbCB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICpt
dWx0aVNhbXBsZUFycmF5KTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29tcHJlc3NlZFRleHR1cmVT
dXBwb3J0KCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlz
cGxheSk7CiAgICAgY29uc3QgSERDIG1EYzsKIAorICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7Cisg
ICAgCiAgICAgVUlOVCBtQWRhcHRlcjsKICAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwotICAg
IElEaXJlY3QzRDkgKm1EM2Q5OworICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZh
bGlkIGFmdGVyIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uCisgICAgSURpcmVjdDNEOUV4ICpt
RDNkOWV4OyAgLy8gTWlnaHQgYmUgbnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KICAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwogICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOwor
ICAgIEhXTkQgbURldmljZVdpbmRvdzsKIAogICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKICAgICBH
TGludCBtU3dhcEludGVydmFsOwpAQCAtODQsNiArOTAsOCBAQCBjbGFzcyBEaXNwbGF5CiAKICAg
ICB0eXBlZGVmIHN0ZDo6c2V0PGdsOjpDb250ZXh0Kj4gQ29udGV4dFNldDsKICAgICBDb250ZXh0
U2V0IG1Db250ZXh0U2V0OworCisgICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKIH07CiB9CiAKSW5k
ZXg6IEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2xpYkVHTC9TdXJmYWNlLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw5ICsxNywxMSBAQAogCiBuYW1lc3Bh
Y2UgZWdsCiB7Ci1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3
YXBDaGFpbjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwgY29u
c3QgQ29uZmlnICpjb25maWcpIAotICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hhaW4o
c3dhcENoYWluKSwgbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZpZykK
K1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcs
IEhXTkQgd2luZG93KSAKKyAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyks
IG1XaW5kb3cod2luZG93KQogeworICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1EZXB0aFN0
ZW5jaWwgPSBOVUxMOwogICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0
ID0gTlVMTDsKICAgICBtRmxpcFRleHR1cmUgPSBOVUxMOwpAQCAtMzAsNDIgKzMyLDcgQEAgU3Vy
ZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBJRGlyZQogICAgIG1SZW5kZXJCdWZmZXIg
PSBFR0xfQkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VS
VkVEOwogCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5B
ZGRSZWYoKTsKLSAgICAgICAgbVN3YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVG
RkVSX1RZUEVfTU9OTywgJm1CYWNrQnVmZmVyKTsKLQotICAgICAgICBEM0RTVVJGQUNFX0RFU0Mg
ZGVzY3JpcHRpb247Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7
Ci0KLSAgICAgICAgbVdpZHRoID0gZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQg
PSBkZXNjcmlwdGlvbi5IZWlnaHQ7Ci0KLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVSZW5kZXJUYXJnZXQobVdpZHRoLCBtSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQs
IGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSwgZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVRdWFs
aXR5LCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwotCi0gICAgICAgIGlmIChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKEVHTF9CQURfQUxMT0MpOwotCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShtV2lkdGgsIG1IZWln
aHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09M
X0RFRkFVTFQsICZtRmxpcFRleHR1cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgICAg
IGVycm9yKEVHTF9CQURfQUxMT0MpOwotCi0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxl
YXNlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXNl
dFN3YXBDaGFpbigpOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC0xMDYsMjAgKzczLDEy
MSBAQCBTdXJmYWNlOjp+U3VyZmFjZSgpCiAgICAgfQogfQogCi1IV05EIFN1cmZhY2U6OmdldFdp
bmRvd0hhbmRsZSgpCit2b2lkIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKIHsKLSAgICBpZiAo
bVN3YXBDaGFpbikKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0
RGV2aWNlKCk7CisKKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMg
PSB7MH07CisKKyAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
bUNvbmZpZy0+bURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNr
QnVmZmVyQ291bnQgPSAxOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQg
PSBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVu
YWJsZUF1dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFn
cyA9IDA7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRvd0hh
bmRsZSgpOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBV
bmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwg
PSBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwobUNvbmZpZy0+bU1pblN3YXBJbnRlcnZhbCk7Cisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsK
KyAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICBSRUNUIHdpbmRv
d1JlY3Q7CisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93
UmVjdCkpCisgICAgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gd2luZG93UmVj
dC5yaWdodCAtIHdpbmRvd1JlY3QubGVmdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVm
ZmVySGVpZ2h0ID0gd2luZG93UmVjdC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcDsKKworICAgIElE
aXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAm
c3dhcENoYWluKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworCisgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3
YXAgY2hhaW5zOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DKTsKKyAgICB9CisKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3Vy
ZmFjZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJm
YWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2Vu
dFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHks
IEZBTFNFLCAmZGVwdGhTdGVuY2lsU3VyZmFjZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCiAgICAgewotICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFt
ZXRlcnM7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50
UGFyYW1ldGVycyk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFpbi0+
UmVsZWFzZSgpOwogCi0gICAgICAgIHJldHVybiBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2lu
ZG93OworICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2Ug
Zm9yIG5ldyBzd2FwIGNoYWluOiAlMDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DKTsKICAgICB9CiAKLSAgICByZXR1cm4gTlVMTDsKKyAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldChwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVUeXBlLCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVF1YWxpdHksIEZBTFNFLCAmcmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFp
bi0+UmVsZWFzZSgpOworICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisK
KyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSBmb3Ig
bmV3IHN3YXAgY2hhaW46ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICBJRGlyZWN0M0RUZXh0dXJlOSAqZmxpcFRleHR1cmUgPSBOVUxMOworICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgs
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRB
UkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRl
cnMuQmFja0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmZmxpcFRleHR1cmUsIE5VTEwp
OworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisKKyAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbFN1
cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGZsaXAgdGV4dHVyZSBmb3IgbmV3IHN3YXAgY2hh
aW46ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Mp
OworICAgIH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpiYWNrQnVmZmVyID0gTlVMTDsKKyAg
ICBzd2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZi
YWNrQnVmZmVyKTsKKworICAgIGlmIChtU3dhcENoYWluKSBtU3dhcENoYWluLT5SZWxlYXNlKCk7
CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICBp
ZiAobUJhY2tCdWZmZXIpIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgaWYgKG1SZW5kZXJU
YXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICBpZiAobUZsaXBUZXh0dXJlKSBt
RmxpcFRleHR1cmUtPlJlbGVhc2UoKTsKKworICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aDsKKyAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1
ZmZlckhlaWdodDsKKworICAgIG1Td2FwQ2hhaW4gPSBzd2FwQ2hhaW47CisgICAgbURlcHRoU3Rl
bmNpbCA9IGRlcHRoU3RlbmNpbFN1cmZhY2U7CisgICAgbUJhY2tCdWZmZXIgPSBiYWNrQnVmZmVy
OworICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7CisgICAgbUZsaXBUZXh0dXJlID0g
ZmxpcFRleHR1cmU7CisKKyAgICAvLyBUaGUgZmxpcCBzdGF0ZSBibG9jayByZWNvcmRlZCBtRmxp
cFRleHR1cmUgc28gaXQgaXMgbm93IGludmFsaWQuCisgICAgcmVsZWFzZVJlY29yZGVkU3RhdGUo
ZGV2aWNlKTsKK30KKworSFdORCBTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQoreworICAgIHJl
dHVybiBtV2luZG93OwogfQogCi12b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0
ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit2
b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UpCiB7CiAgICAgLy8gRGlzYWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucwogICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwpAQCAtMTM4
LDE2ICsyMDYsMTggQEAgdm9pZCBTdXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSQog
ICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRP
UF9TRUxFQ1RBUkcxKTsKICAgICBkZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRT
U19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOwogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdl
U3RhdGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgc291cmNlKTsKKyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7IC8v
IFRoZSBhY3R1YWwgdGV4dHVyZSB3aWxsIGNoYW5nZSBhZnRlciByZXNpemluZy4gQnV0IHRoZSBw
cmUtZmxpcCBzdGF0ZSBibG9jayBtdXN0IHNhdmUvcmVzdG9yZSB0aGUgdGV4dHVyZS4KICAgICBk
ZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lO
VCk7CiAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQz
RFRFWEZfUE9JTlQpOwogICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JH
QlRFWFRVUkUsIEZBTFNFKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwogICAgIGRldmljZS0+
U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CiAKICAgICBkZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoMCwgMSk7IC8vIERyYXdQcmltaXRpdmVVUCBvbmx5IGNhcmVzIGFib3V0
IHN0cmVhbSAwLCBub3QgdGhlIHJlc3QuCiB9CiAKLXZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3Rh
dGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQor
dm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCiB7
CiAgICAgSFJFU1VMVCBocjsKIApAQCAtMTU4LDcgKzIyOCw3IEBAIHZvaWQgU3VyZmFjZTo6YXBw
bHlGbGlwU3RhdGUoSURpcmVjdDNERGUKICAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxsIHJl
Y29yZCB0aGUgb3JpZ2luYWwgc3RhdGUgZWFjaCBlbnRyeS4KICAgICAgICAgaHIgPSBkZXZpY2Ut
PkJlZ2luU3RhdGVCbG9jaygpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
ICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAgIHdy
aXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UpOwogICAgICAgICBociA9IGRldmljZS0+RW5k
U3RhdGVCbG9jaygmbVByZUZsaXBTdGF0ZSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
IHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkp
OwogCkBAIC0xNzEsNyArMjQxLDcgQEAgdm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGly
ZWN0M0REZQogICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CiAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3Rh
dGUoZGV2aWNlLCBzb3VyY2UpOworICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoZGV2
aWNlKTsKIAogICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBTdGF0ZSk7
CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVP
TUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMjIzLDI5ICsyOTMsODggQEAgdm9p
ZCBTdXJmYWNlOjpyZXN0b3JlU3RhdGUoSURpcmVjdDNERGV2aQogICAgIH0KIH0KIAorLy8gT24g
dGhlIG5leHQgZmxpcCwgdGhpcyB3aWxsIGNhdXNlIHRoZSBzdGF0ZSB0byBiZSByZWNvcmRlZCBm
cm9tIHNjcmF0Y2guCisvLyBJbiBwYXJ0aWN1bGFyIHdlIG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUg
ZmxpcCB0ZXh0dXJlIGNoYW5nZXMuCit2b2lkIFN1cmZhY2U6OnJlbGVhc2VSZWNvcmRlZFN0YXRl
KElEaXJlY3QzRERldmljZTkgKmRldmljZSkKK3sKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7
CisgICAgICAgIG1GbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAgICAgbUZsaXBTdGF0ZSA9IE5V
TEw7CisgICAgfQorCisgICAgaWYgKG1QcmVGbGlwU3RhdGUpCisgICAgeworICAgICAgICBtUHJl
RmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOworICAg
IH0KK30KKworYm9vbCBTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpCit7CisgICAgUkVD
VCBjbGllbnQ7CisgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xp
ZW50KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0V2lkdGgoKSAhPSBjbGllbnQucmlnaHQgLSBjbGllbnQu
bGVmdCB8fCBnZXRIZWlnaHQoKSAhPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcCkKKyAgICB7
CisgICAgICAgIHJlc2V0U3dhcENoYWluKCk7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVn
bDo6U3VyZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQorICAgICAgICB7
CisgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQoKSwgc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBib29sIFN1cmZhY2U6OnN3YXAoKQogewogICAgIGlmIChtU3dhcENoYWluKQogICAgIHsK
KyAgICAgICAgSURpcmVjdDNEVGV4dHVyZTkgKmZsaXBUZXh0dXJlID0gbUZsaXBUZXh0dXJlOwor
ICAgICAgICBmbGlwVGV4dHVyZS0+QWRkUmVmKCk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7CisgICAgICAgIHJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisKKyAgICAgICAgRUdMaW50IG9sZFdpZHRoID0gbVdpZHRoOworICAgICAgICBF
R0xpbnQgb2xkSGVpZ2h0ID0gbUhlaWdodDsKKworICAgICAgICBjaGVja0ZvcldpbmRvd1Jlc2l6
ZSgpOworCiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXRE
ZXZpY2UoKTsKIAogICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0g
ICAgICAgIG1GbGlwVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7
CisgICAgICAgIGZsaXBUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNl
KTsKIAogICAgICAgICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJl
dGNoUmVjdChtUmVuZGVyVGFyZ2V0LCBOVUxMLCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVY
Rl9OT05FKTsKKyAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChyZW5kZXJUYXJnZXQsIE5VTEws
IHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAgICAgICByZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKIAotICAgICAgICBhcHBseUZsaXBTdGF0ZShkZXZpY2UsIG1GbGlwVGV4
dHVyZSk7CisgICAgICAgIGFwcGx5RmxpcFN0YXRlKGRldmljZSk7CisgICAgICAgIGRldmljZS0+
U2V0VGV4dHVyZSgwLCBmbGlwVGV4dHVyZSk7CisKKyAgICAgICAgZmxvYXQgeHNjYWxlID0gKGZs
b2F0KW1XaWR0aCAvIG9sZFdpZHRoOworICAgICAgICBmbG9hdCB5c2NhbGUgPSAoZmxvYXQpbUhl
aWdodCAvIG9sZEhlaWdodDsKIAogICAgICAgICAvLyBSZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRl
IGRvd24gaW50byB0aGUgYmFjayBidWZmZXIKLSAgICAgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7
ICAgICAwIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGZ9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCAgICAgICAwIC0gMC41
ZiwgMC4wZiwgMS4wZiwgMS4wZiwgMS4wZn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
e21XaWR0aCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAu
NWYsIDAuMGYsIDEuMGYsIDAuMGYsIDAuMGZ9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKyAg
ICAgICAgLy8gVGV4Y29vcmRzIGFyZSBjaG9zZW4gdG8gcGluIGEgcG90ZW50aWFsbHkgcmVzaXpl
ZCBpbWFnZSBpbnRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciB3aXRob3V0IHNjYWxpbmcuCisgICAg
ICAgIGZsb2F0IHF1YWRbNF1bNl0gPSB7eyAgICAgMCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAw
LjBmLCAxLjBmLCAwLjBmLCAgIDEuMGYgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7bVdpZHRoIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIHhzY2FsZSwg
MS4wZiAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVm
LCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmLXlzY2FsZX0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgMCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAw
LjBmLCAxLjBmLCAwLjBmLCAgIDEuMGYteXNjYWxlfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2
CiAKICAgICAgICAgbURpc3BsYXktPnN0YXJ0U2NlbmUoKTsKICAgICAgICAgZGV2aWNlLT5EcmF3
UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQp
KTsKIAorICAgICAgICBmbGlwVGV4dHVyZS0+UmVsZWFzZSgpOwogICAgICAgICB0ZXh0dXJlU3Vy
ZmFjZS0+UmVsZWFzZSgpOwogCiAgICAgICAgIHJlc3RvcmVTdGF0ZShkZXZpY2UpOwpAQCAtMjY0
LDYgKzM5Myw3IEBAIGJvb2wgU3VyZmFjZTo6c3dhcCgpCiAgICAgICAgIH0KIAogICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBDb25maWc7CiBj
bGFzcyBTdXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXks
IElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkqIGRlcHRo
U3RlbmNpbCwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyk7CisgICAgU3VyZmFjZShEaXNwbGF5
ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdyk7CiAKICAg
ICB+U3VyZmFjZSgpOwogCkBAIC00MiwyMCArNDIsMjUgQEAgY2xhc3MgU3VyZmFjZQogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIAogICAgIERpc3BsYXkgKmNvbnN0IG1E
aXNwbGF5OwotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKmNvbnN0IG1Td2FwQ2hhaW47CisgICAg
SURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bUJhY2tCdWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSURpcmVjdDNEVGV4dHVyZTkg
Km1GbGlwVGV4dHVyZTsKIAotICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHJlc2V0U3dh
cENoYWluKCk7CisgICAgYm9vbCBjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpOworCisgICAgdm9pZCBh
cHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwogICAgIHZvaWQgcmVzdG9y
ZVN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7Ci0gICAgdm9pZCB3cml0ZVJlY29yZGFi
bGVGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAq
c291cmNlKTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZp
Y2U5ICpkZXZpY2UpOworICAgIHZvaWQgcmVsZWFzZVJlY29yZGVkU3RhdGUoSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlKTsKICAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKICAg
ICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbVByZUZsaXBTdGF0ZTsKICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbVByZUZsaXBCYWNrQnVmZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxp
cERlcHRoU3RlbmNpbDsKIAorICAgIGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBX
aW5kb3cgdGhhdCB0aGUgc3VyZmFjZSBpcyBjcmVhdGVkIGZvci4KICAgICBjb25zdCBlZ2w6OkNv
bmZpZyAqbUNvbmZpZzsgICAgLy8gRUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgK
ICAgICBFR0xpbnQgbUhlaWdodDsgICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UK
ICAgICBFR0xpbnQgbVdpZHRoOyAgICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQpJ
bmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJFR0wvbGliRUdMLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdM
L2xpYkVHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Miw3ICs3NzIsNyBAQCBFR0xDb250ZXh0
IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05P
X0NPTlRFWFQ7CiAgICAgICAgIH0KIAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNw
bGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZyk7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9
IGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+
KHNoYXJlX2NvbnRleHQpKTsKIAogICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKICAg
ICB9CkBAIC04MjQsOSArODI0LDggQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJl
bnQoRUdMRAogICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6
OkRpc3BsYXkqPihkcHkpOwogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19j
YXN0PGdsOjpDb250ZXh0Kj4oY3R4KTsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gZGlzcGxheS0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIERXT1JEIHBhc3NlczsKIAotICAgICAg
ICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlZhbGlkYXRlRGV2aWNlKCZwYXNzZXMpID09IEQzREVS
Ul9ERVZJQ0VMT1NUKQorICAgICAgICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlRlc3RDb29wZXJh
dGl2ZUxldmVsKCkgIT0gRDNEX09LKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpJbmRleDogQU5HTEUv
c3JjL2xpYkVHTC9saWJFR0wudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wv
bGliRUdMLnZjcHJvagkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVH
TC52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAKIAkJCS8+DQogCQkJPFRv
b2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVz
PSJkM2Q5LmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZHhndWlkLmxpYiINCiAJ
CQkJTGlua0luY3JlbWVudGFsPSIyIg0KIAkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdM
LmRlZiINCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KQEAgLTE0MCw3ICsx
NDAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJ
CUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5k
ZW5jaWVzPSJkeGd1aWQubGliIg0KIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCU1vZHVs
ZURlZmluaXRpb25GaWxlPSJsaWJFR0wuZGVmIg0KIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRp
b249InRydWUiDQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFO
R0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiwxMiArMjMy
LDEyIEBAIGJvb2wgQmxpdDo6c2V0U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY28KIAogYm9vbCBC
bGl0OjpzZXRWZXJ0ZXhTaGFkZXIoU2hhZGVySWQgc2hhZGVyKQogewotICAgIHJldHVybiBzZXRT
aGFkZXI8SURpcmVjdDNEVmVydGV4U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0VmVydGV4
U2hhZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAm
SURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKKyAgICByZXR1cm4gc2V0U2hhZGVy
PElEaXJlY3QzRFZlcnRleFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgPyAidnNfM18wIiA6ICJ2c18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRl
VmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKIH0KIAog
Ym9vbCBCbGl0OjpzZXRQaXhlbFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCiB7Ci0gICAgcmV0dXJu
IHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPmdldFBp
eGVsU2hhZGVyUHJvZmlsZSgpLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIs
ICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7CisgICAgcmV0dXJuIHNldFNoYWRl
cjxJRGlyZWN0M0RQaXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgPyAicHNfM18wIiA6ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRl
UGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7CiB9CiAKIFJF
Q1QgQmxpdDo6Z2V0U3VyZmFjZVJlY3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0
CkBAIC0zMjUsNiArMzI1LDcgQEAgYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhH
TGVudQogICAgIHsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICBjYXNlIEdM
X1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgogICAgICAgY2FzZSBHTF9SR0I6CiAgICAg
ICBjYXNlIEdMX0FMUEhBOgogICAgICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihT
SEFERVJfUFNfQ09NUE9ORU5UTUFTSyk7CkBAIC0zNTEsNiArMzUyLDcgQEAgYm9vbCBCbGl0Ojpz
ZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudQogICAgIHsKICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgog
ICAgICAgICBwc0NvbnN0MFtYXSA9IDE7CiAgICAgICAgIHBzQ29uc3QwW1pdID0gMTsKICAgICAg
ICAgYnJlYWs7CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyAr
MTMsNyBAQAogbmFtZXNwYWNlIGdsCiB7CiAKLUJ1ZmZlcjo6QnVmZmVyKCkKK0J1ZmZlcjo6QnVm
ZmVyKEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBtQ29udGVudHMgPSBO
VUxMOwogICAgIG1TaXplID0gMDsKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gNjY2
MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OCwxNCArMTgsMTUgQEAKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBnbAogewogCi1jbGFzcyBCdWZmZXIKK2NsYXNzIEJ1ZmZlciA6IHB1YmxpYyBS
ZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0gICAgQnVmZmVyKCk7CisgICAgZXhwbGljaXQg
QnVmZmVyKEdMdWludCBpZCk7CiAKICAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKIApJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL0NvbnRleHQuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL0JsaXQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3Vy
Y2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCkBA
IC0zMyw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBnbAogewotQ29udGV4dDo6Q29udGV4dChjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnKQorQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KQogICAgIDogbUNvbmZp
Zyhjb25maWcpCiB7CiAgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsK
QEAgLTEwMywzNyArMTA0LDM5IEBAIENvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcg
KmNvbmYKICAgICBtU3RhdGUuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogICAgIG1TdGF0ZS5kZXB0
aE1hc2sgPSB0cnVlOwogCisgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQorICAgIHsKKyAg
ICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsK
KyAgICAgICAgbVJlc291cmNlTWFuYWdlci0+YWRkUmVmKCk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7Cisg
ICAgfQorCiAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6CiAg
ICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9N
QVAgaGF2ZSB0d29kaW1lbnNpb25hbAogICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRl
IHZlY3RvcnMgcmVzcGVjdGl2ZWx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgogICAgIC8vIEluIG9y
ZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRo
ZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQogICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5h
bWVzIGFyZSAwLgogCi0gICAgbVRleHR1cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKHRoaXMpOwot
ICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAg
bVRleHR1cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKDApOworICAgIG1UZXh0dXJlQ3ViZU1hcFpl
cm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAoMCk7CiAKICAgICBtQ29sb3JidWZmZXJaZXJvID0gTlVM
TDsKLSAgICBtRGVwdGhidWZmZXJaZXJvID0gTlVMTDsKLSAgICBtU3RlbmNpbGJ1ZmZlclplcm8g
PSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKIAogICAgIG1TdGF0
ZS5hY3RpdmVTYW1wbGVyID0gMDsKLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOwotICAgIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsKKyAg
ICBiaW5kRWxlbWVudEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsK
ICAgICBiaW5kVGV4dHVyZTJEKDApOwotICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5k
UmVhZEZyYW1lYnVmZmVyKDApOworICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmlu
ZFJlbmRlcmJ1ZmZlcigwKTsKIAogICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExF
Ul9UWVBFX0NPVU5UOyB0eXBlKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0g
MDsgc2FtcGxlciA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBM
RVJfVFlQRV9DT1VOVDsgdHlwZSsrKQotICAgIHsKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJl
c1t0eXBlXSA9IE5VTEw7CiAgICAgfQogCkBAIC0xNTUsNjUgKzE1OCw3MiBAQCBDb250ZXh0OjpD
b250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25mCiAKICAgICBtSGFzQmVlbkN1cnJlbnQgPSBm
YWxzZTsKIAorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKICAgICBtTWFza2VkQ2xlYXJT
YXZlZFN0YXRlID0gTlVMTDsKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCiBDb250ZXh0
Ojp+Q29udGV4dCgpCiB7Ci0gICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLQotICAgIGZv
ciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAg
aWYgKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSAhPSAwKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1J
bmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7Cisg
ICAgICAgIGlmIChwcm9ncmFtT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9n
cmFtID0gMDsKICAgICB9CiAKLSAgICBkZWxldGUgbVRleHR1cmUyRFplcm87Ci0gICAgZGVsZXRl
IG1UZXh0dXJlQ3ViZU1hcFplcm87Ci0KLSAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKLSAg
ICBkZWxldGUgbURlcHRoYnVmZmVyWmVybzsKLSAgICBkZWxldGUgbVN0ZW5jaWxidWZmZXJaZXJv
OwotCi0gICAgZGVsZXRlIG1CdWZmZXJCYWNrRW5kOwotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1h
bmFnZXI7Ci0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtQmxpdDsK
LQotICAgIHdoaWxlICghbUJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZyYW1lYnVm
ZmVyTWFwLmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5i
ZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1h
cC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCi0gICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0
eSgpKQorICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAg
IGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAg
bU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwog
ICAgIH0KIAotICAgIHdoaWxlICghbVNoYWRlck1hcC5lbXB0eSgpKQorICAgIGZvciAoaW50IHR5
cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCiAgICAgewotICAgICAg
ICBkZWxldGVTaGFkZXIobVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGZvciAo
aW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBs
ZXIrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVd
W3NhbXBsZXJdLnNldChOVUxMKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHdoaWxlICghbUZy
YW1lYnVmZmVyTWFwLmVtcHR5KCkpCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1Q
TEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVy
KG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSBtSW5jb21w
bGV0ZVRleHR1cmVzW3R5cGVdOwogICAgIH0KIAotICAgIHdoaWxlICghbVJlbmRlcmJ1ZmZlck1h
cC5lbXB0eSgpKQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCiAgICAgewotICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5i
ZWdpbigpLT5maXJzdCk7CisgICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5k
QnVmZmVyLnNldChOVUxMKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5
KCkpCi0gICAgewotICAgICAgICBkZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZp
cnN0KTsKLSAgICB9CisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUudGV4dHVyZTJELnNl
dChOVUxMKTsKKyAgICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOworICAgIG1TdGF0
ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOworCisgICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOwor
ICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1CdWZmZXJCYWNr
RW5kOworICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7CisgICAgZGVsZXRlIG1JbmRleERh
dGFNYW5hZ2VyOworICAgIGRlbGV0ZSBtQmxpdDsKIAogICAgIGlmIChtTWFza2VkQ2xlYXJTYXZl
ZFN0YXRlKQogICAgIHsKICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgp
OwogICAgIH0KKworICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKIH0KIAogdm9pZCBD
b250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSkKQEAgLTIyOSw2ICsyMzksMzQgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChl
Z2w6OkRpc3BsYXkgKgogICAgICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFN
YW5hZ2VyKHRoaXMsIG1CdWZmZXJCYWNrRW5kKTsKICAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0
aGlzKTsKIAorICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0K
KyAgICAgICAgeworICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgRDNE
Rk1UX1g4UjhHOEI4LAorICAgICAgICAgICAgRDNERk1UX1I1RzZCNSwKKyAgICAgICAgICAgIEQz
REZNVF9EMjRTOAorICAgICAgICB9OworCisgICAgICAgIGludCBtYXggPSAwOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihE
M0RGT1JNQVQpOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxl
QXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07CisgICAgICAg
ICAgICBkaXNwbGF5LT5nZXRNdWx0aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9ybWF0c1tp
XSwgbXVsdGlzYW1wbGVBcnJheSk7CisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3Jl
bmRlckJ1ZmZlckZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKKworICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGog
IT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG1heCA9IGo7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBt
YXg7CisKKyAgICAgICAgbVN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzID0gZGlzcGxheS0+Z2V0
Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0KCk7CisKICAgICAgICAgaW5pdEV4dGVuc2lvblN0cmlu
ZygpOwogCiAgICAgICAgIG1TdGF0ZS52aWV3cG9ydFggPSAwOwpAQCAtMjQ4LDE5ICsyODYsMTEg
QEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0
KCk7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERl
cHRoU3RlbmNpbCgpOwogCi0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBG
cmFtZWJ1ZmZlcigpOwogICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29s
b3JidWZmZXIoZGVmYXVsdFJlbmRlclRhcmdldCk7Ci0gICAgRGVwdGhidWZmZXIgKmRlcHRoYnVm
ZmVyWmVybyA9IG5ldyBEZXB0aGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIFN0ZW5jaWxidWZm
ZXIgKnN0ZW5jaWxidWZmZXJaZXJvID0gbmV3IFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsK
KyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVw
dGhTdGVuY2lsYnVmZmVyKGRlcHRoU3RlbmNpbCk7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0
ZW5jaWxidWZmZXJaZXJvKTsKIAogICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclpl
cm8pOwotICAgIHNldENvbG9yYnVmZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOwotICAgIHNldERl
cHRoYnVmZmVyWmVybyhkZXB0aGJ1ZmZlclplcm8pOwotICAgIHNldFN0ZW5jaWxidWZmZXJaZXJv
KHN0ZW5jaWxidWZmZXJaZXJvKTsKLQotICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3JidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKLSAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRoYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7Ci0gICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVuY2ls
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CiAKICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5S
ZWxlYXNlKCk7CiAKQEAgLTI2OSwxNiArMjk5LDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVu
dChlZ2w6OkRpc3BsYXkgKgogICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKICAgICB9
CiAgICAgCi0gICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19W
RVJTSU9OKDMsIDApKQotICAgIHsKLSAgICAgICAgbVBzUHJvZmlsZSA9ICJwc18zXzAiOwotICAg
ICAgICBtVnNQcm9maWxlID0gInZzXzNfMCI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGVnbDo6RGlz
cGxheSBndWFyYW50ZWVzIHN1cHBvcnQgZm9yIGF0IGxlYXN0IDIuMAotICAgIHsKLSAgICAgICAg
bVBzUHJvZmlsZSA9ICJwc18yXzAiOwotICAgICAgICBtVnNQcm9maWxlID0gInZzXzJfMCI7Ci0g
ICAgfQorICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVy
VmVyc2lvbiA9PSBEM0RQU19WRVJTSU9OKDMsIDApOwogCiAgICAgbWFya0FsbFN0YXRlRGlydHko
KTsKIH0KQEAgLTMwMCw2ICszMjEsMTIgQEAgdm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0
eSgpCiAgICAgbVNjaXNzb3JTdGF0ZURpcnR5ID0gdHJ1ZTsKICAgICBtU2FtcGxlU3RhdGVEaXJ0
eSA9IHRydWU7CiAgICAgbURpdGhlclN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Gcm9udEZhY2VE
aXJ0eSA9IHRydWU7CisKKyAgICBpZiAobUJ1ZmZlckJhY2tFbmQgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIG1CdWZmZXJCYWNrRW5kLT5pbnZhbGlkYXRlKCk7CisgICAgfQogfQogCiB2b2lkIENv
bnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwg
ZmxvYXQgYWxwaGEpCkBAIC02NzEsMTkgKzY5OCwyNCBAQCB2b2lkIENvbnRleHQ6OnNldEFjdGl2
ZVNhbXBsZXIoaW50IGFjdGl2CiAgICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7CiB9
CiAKLUdMdWludCBDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0CitHTHVpbnQg
Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKK30KKworR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5mcmFtZWJ1ZmZlcjsK
KyAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKIH0KIAogR0x1aW50IENvbnRleHQ6
OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5k
ZXJidWZmZXI7CisgICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsKIH0KIAogR0x1
aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVN0YXRlLmFycmF5QnVmZmVyOworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsK
IH0KIAogdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBh
dHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkKQEAgLTY5NiwxMCArNzI4LDEwIEBAIGNvbnN0IEF0dHJp
YnV0ZVN0YXRlICZDb250ZXh0OjpnZXRWZXJ0ZXgKICAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVthdHRyaWJOdW1dOwogfQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwgR0xpbnQgc2l6
ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4
QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwg
R0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIp
CiB7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlciA9
IGJvdW5kQnVmZmVyOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91
bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0
dHJpYk51bV0ubVNpemUgPSBzaXplOwogICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
TnVtXS5tVHlwZSA9IHR5cGU7CiAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKQEAgLTczOCw3MiArNzcwLDI5IEBAIEdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnMKICAgICByZXR1cm4gbVN0YXRlLnVucGFj
a0FsaWdubWVudDsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKIEdMdWlu
dCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQogewotICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAx
OwotCi0gICAgd2hpbGUgKG1CdWZmZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICBoYW5kbGUrKzsKLSAgICB9Ci0KLSAgICBtQnVmZmVyTWFwW2hh
bmRsZV0gPSBOVUxMOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKKyAgICByZXR1cm4gbVJlc291cmNl
TWFuYWdlci0+Y3JlYXRlQnVmZmVyKCk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRl
ci9wcm9ncmFtIG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUp
CitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGhh
bmRsZSA9IDE7Ci0KLSAgICB3aGlsZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRl
ck1hcC5lbmQoKSB8fCBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5k
KCkpICAgLy8gU2hhcmVkIG5hbWUgc3BhY2UKLSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAg
IH0KLQotICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBt
U2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAg
ICAgbVNoYWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7
Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgIHJldHVybiBoYW5kbGU7Cisg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVByb2dyYW0oKTsKIH0KIAotLy8gUmV0
dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZVByb2dyYW0oKQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKIHsK
LSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtUHJvZ3JhbU1hcC5m
aW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5maW5kKGhhbmRs
ZSkgIT0gbVNoYWRlck1hcC5lbmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQotICAgIHsKLSAg
ICAgICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQ
cm9ncmFtKCk7Ci0KLSAgICByZXR1cm4gaGFuZGxlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5jcmVhdGVTaGFkZXIodHlwZSk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1
cmUgbmFtZQogR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIHVuc2lnbmVk
IGludCBoYW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKSAh
PSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQot
ICAgIG1UZXh0dXJlTWFwW2hhbmRsZV0gPSBOVUxMOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5jcmVhdGVUZXh0dXJlKCk7Cit9CiAKLSAgICByZXR1cm4gaGFuZGxlOworR0x1aW50IENv
bnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFt
ZWJ1ZmZlciBuYW1lCkBAIC04MjEsODUgKzgxMCw0NCBAQCBHTHVpbnQgQ29udGV4dDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51
c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVy
KCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtUmVuZGVy
YnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsK
LSAgICAgICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVd
ID0gTlVMTDsKLQotICAgIHJldHVybiBoYW5kbGU7Ci19Ci0KIHZvaWQgQ29udGV4dDo6ZGVsZXRl
QnVmZmVyKEdMdWludCBidWZmZXIpCiB7Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJP
YmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKLQotICAgIGlmIChidWZmZXJPYmplY3Qg
IT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVy
KGJ1ZmZlcikpCiAgICAgewogICAgICAgICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsKLQotICAgICAg
ICBkZWxldGUgYnVmZmVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1CdWZmZXJNYXAuZXJhc2Uo
YnVmZmVyT2JqZWN0KTsKICAgICB9CisgICAgCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRl
QnVmZmVyKGJ1ZmZlcik7CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBz
aGFkZXIpCiB7Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVy
TWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmlzQXR0YWNo
ZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25k
OwotICAgICAgICAgICAgbVNoYWRlck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNv
bmQtPmZsYWdGb3JEZWxldGlvbigpOwotICAgICAgICB9Ci0gICAgfQorICAgIG1SZXNvdXJjZU1h
bmFnZXItPmRlbGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIENvbnRleHQ6OmRlbGV0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pCiB7Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3Jh
bU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9i
amVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtICE9
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHBy
b2dyYW1PYmplY3QtPnNlY29uZDsKLSAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dy
YW1PYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgcHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQog
CiB2b2lkIENvbnRleHQ6OmRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCiB7Ci0gICAgVGV4
dHVyZU1hcDo6aXRlcmF0b3IgdGV4dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZSk7Ci0KLSAgICBpZiAodGV4dHVyZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICBp
ZiAobVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKICAgICB7CiAgICAgICAg
IGRldGFjaFRleHR1cmUodGV4dHVyZSk7CisgICAgfQogCi0gICAgICAgIGlmICh0ZXh0dXJlICE9
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQ7
Ci0gICAgICAgIH0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUp
OworfQogCi0gICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOwordm9pZCBD
b250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBp
ZiAobVJlc291cmNlTWFuYWdlci0+Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisgICAg
eworICAgICAgICBkZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKICAgICB9CisgICAg
CisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7
CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVy
KQpAQCAtOTE1LDMwNyArODYzLDE4NiBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmCiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihH
THVpbnQgcmVuZGVyYnVmZmVyKQorQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhh
bmRsZSkKIHsKLSAgICBSZW5kZXJidWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlck9iamVj
dCA9IG1SZW5kZXJidWZmZXJNYXAuZmluZChyZW5kZXJidWZmZXIpOwotCi0gICAgaWYgKHJlbmRl
cmJ1ZmZlck9iamVjdCAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAg
ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICAgICAgZGVsZXRlIHJlbmRl
cmJ1ZmZlck9iamVjdC0+c2Vjb25kOwotICAgICAgICBtUmVuZGVyYnVmZmVyTWFwLmVyYXNlKHJl
bmRlcmJ1ZmZlck9iamVjdCk7Ci0gICAgfQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRCdWZmZXIoaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5z
aWduZWQgaW50IGJ1ZmZlcikKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5k
bGUpCiB7Ci0gICAgaWYgKGJ1ZmZlciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7
Ci0gICAgICAgIG1CdWZmZXJNYXBbYnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKLSAgICB9Ci0KLSAg
ICBtU3RhdGUuYXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmdldFNoYWRlcihoYW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJy
YXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dy
YW0oR0x1aW50IGhhbmRsZSkKIHsKLSAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihi
dWZmZXIpKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gbmV3IEJ1ZmZlcigp
OwotICAgIH0KLQotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KIAotdm9pZCBD
b250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQorVGV4dHVyZSAqQ29udGV4dDo6
Z2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKQogewotICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJl
KSAmJiB0ZXh0dXJlICE9IDApCi0gICAgewotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9
IG5ldyBUZXh0dXJlMkQodGhpcyk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnRleHR1cmUyRCA9IHRl
eHR1cmU7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFj
dGl2ZVNhbXBsZXJdID0gdGV4dHVyZTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0
VGV4dHVyZShoYW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChH
THVpbnQgdGV4dHVyZSkKK1JlbmRlcmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdM
dWludCBoYW5kbGUpCiB7Ci0gICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUg
IT0gMCkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmVD
dWJlTWFwKHRoaXMpOwotICAgIH0KLQotICAgIG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9IHRleHR1
cmU7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0gPSB0ZXh0dXJlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRS
ZW5kZXJidWZmZXIoaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIo
R0x1aW50IGZyYW1lYnVmZmVyKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1
ZmZlcigpCiB7Ci0gICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewot
ICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7
Ci0gICAgfQotCi0gICAgbVN0YXRlLmZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgcmV0
dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIpOwogfQogCi12b2lkIENv
bnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK0ZyYW1lYnVmZmVy
ICpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIoKQogewotICAgIGlmIChyZW5kZXJidWZmZXIg
IT0gMCAmJiAhZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBt
UmVuZGVyYnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSBuZXcgUmVuZGVyYnVmZmVyKCk7Ci0gICAg
fQotCi0gICAgbVN0YXRlLnJlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlcjsKKyAgICByZXR1cm4g
Z2V0RnJhbWVidWZmZXIobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29udGV4
dDo6dXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3ZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCiB7Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGdldEN1cnJlbnRQcm9ncmFtKCk7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJB
bGxvY2F0aW9uKGJ1ZmZlcik7CiAKLSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1
cnJlbnRQcm9ncmFtOwotICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAg
ICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lz
ZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KLQotICAgIGlmIChwcm9ncmFtT2JqZWN0ICYmIHByb2dy
YW1PYmplY3QtPmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkpCi0gICAgewotICAgICAgICBkZWxldGVQ
cm9ncmFtKHByaW9yUHJvZ3JhbSk7Ci0gICAgfQorICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQo
Z2V0QnVmZmVyKGJ1ZmZlcikpOwogfQogCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVy
byhGcmFtZWJ1ZmZlciAqYnVmZmVyKQordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVm
ZmVyKHVuc2lnbmVkIGludCBidWZmZXIpCiB7Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFsw
XTsKLSAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Ci19CisgICAgbVJlc291cmNlTWFu
YWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CiAKLXZvaWQgQ29udGV4dDo6c2V0
Q29sb3JidWZmZXJaZXJvKENvbG9yYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1Db2xv
cmJ1ZmZlclplcm87Ci0gICAgbUNvbG9yYnVmZmVyWmVybyA9IGJ1ZmZlcjsKKyAgICBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKLXZvaWQgQ29u
dGV4dDo6c2V0RGVwdGhidWZmZXJaZXJvKERlcHRoYnVmZmVyICpidWZmZXIpCit2b2lkIENvbnRl
eHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCiB7Ci0gICAgZGVsZXRlIG1EZXB0aGJ1
ZmZlclplcm87Ci0gICAgbURlcHRoYnVmZmVyWmVybyA9IGJ1ZmZlcjsKLX0KKyAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfMkQpOwog
Ci12b2lkIENvbnRleHQ6OnNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIgKmJ1ZmZl
cikKLXsKLSAgICBkZWxldGUgbVN0ZW5jaWxidWZmZXJaZXJvOwotICAgIG1TdGVuY2lsYnVmZmVy
WmVybyA9IGJ1ZmZlcjsKLX0KKyAgICBtU3RhdGUudGV4dHVyZTJELnNldChnZXRUZXh0dXJlKHRl
eHR1cmUpKTsKIAotdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXIoUmVuZGVyYnVmZmVyICpi
dWZmZXIpCi17Ci0gICAgZGVsZXRlIG1SZW5kZXJidWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZl
cl07Ci0gICAgbVJlbmRlcmJ1ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXSA9IGJ1ZmZlcjsK
KyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBs
ZXJdLnNldChtU3RhdGUudGV4dHVyZTJELmdldCgpKTsKIH0KIAotQnVmZmVyICpDb250ZXh0Ojpn
ZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVD
dWJlTWFwKEdMdWludCB0ZXh0dXJlKQogewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVy
ID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJN
YXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfQ1VC
RSk7CiAKLVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17
Ci0gICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXIgPSBtU2hhZGVyTWFwLmZpbmQoaGFuZGxl
KTsKKyAgICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwog
Ci0gICAgaWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaGFkZXIt
PnNlY29uZDsKLSAgICB9CisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfQ1VCRV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOwog
fQogCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCit2
b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewot
ICAgIFByb2dyYW1NYXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRs
ZSk7Ci0KLSAgICBpZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZl
cihmcmFtZWJ1ZmZlcikpCiAgICAgewotICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOwor
ICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7
CiAgICAgfQotfQotCi1UZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKHVuc2lnbmVkIGludCBo
YW5kbGUpCi17Ci0gICAgaWYgKGhhbmRsZSA9PSAwKSByZXR1cm4gTlVMTDsKLQotICAgIFRleHR1
cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhhbmRsZSk7CiAKLSAg
ICBpZiAodGV4dHVyZSA9PSBtVGV4dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gdGV4dHVyZS0+
c2Vjb25kOwotICAgIH0KKyAgICBtU3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CiB9CiAKLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQg
aGFuZGxlKQordm9pZCBDb250ZXh0OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1
ZmZlcikKIHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJh
bWVidWZmZXJNYXAuZmluZChoYW5kbGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFt
ZWJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAg
ICBlbHNlCisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCiAgICAgewotICAg
ICAgICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFw
W2ZyYW1lYnVmZmVyXSA9IG5ldyBGcmFtZWJ1ZmZlcigpOwogICAgIH0KKworICAgIG1TdGF0ZS5k
cmF3RnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKIH0KIAotUmVuZGVyYnVmZmVyICpDb250ZXh0
OjpnZXRSZW5kZXJidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6Ymlu
ZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQogewotICAgIFJlbmRlcmJ1ZmZlck1h
cDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7
CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRl
cmJ1ZmZlcik7CiAKLSAgICBpZiAocmVuZGVyYnVmZmVyID09IG1SZW5kZXJidWZmZXJNYXAuZW5k
KCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmJ1ZmZlci0+c2Vjb25kOwotICAgIH0KKyAgICBtU3RhdGUu
cmVuZGVyYnVmZmVyLnNldChnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSk7CiB9CiAKLUNv
bG9yYnVmZmVyICpDb250ZXh0OjpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBD
b250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewotICAgIGlmIChoYW5kbGUgIT0g
MCkKKyAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAg
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBz
d2l0Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxh
Z2dlZC4KKworICAgIGlmIChwcmlvclByb2dyYW0gIT0gcHJvZ3JhbSkKICAgICB7Ci0gICAgICAg
IFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7Cisg
ICAgICAgIFByb2dyYW0gKm5ld1Byb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFt
KHByb2dyYW0pOworICAgICAgICBQcm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdl
ci0+Z2V0UHJvZ3JhbShwcmlvclByb2dyYW0pOwogCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIg
JiYgcmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCisgICAgICAgIGlmIChuZXdQcm9ncmFt
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JidWZmZXIq
PihyZW5kZXJidWZmZXIpOworICAgICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvbGRQcm9ncmFtKQorICAgICAgICB7CisgICAg
ICAgICAgICBvbGRQcm9ncmFtLT5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxz
ZSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVy
IHRhcmdldHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclplcm87Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CiB9CiAKLURl
cHRoYnVmZmVyICpDb250ZXh0OjpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBD
b250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKIHsKLSAgICBp
ZiAoaGFuZGxlICE9IDApCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
ciA9IGdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwotCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIg
JiYgcmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVy
ZW50IGluaXRpYWwgcmVuZGVyIHRhcmdldHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclplcm87Ci0gICAgfQorICAgIGRlbGV0
ZSBtRnJhbWVidWZmZXJNYXBbMF07CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOwor
fQogCi0gICAgcmV0dXJuIE5VTEw7Cit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZl
ciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKKyAgICBy
ZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKIH0KIAotU3RlbmNp
bGJ1ZmZlciAqQ29udGV4dDo6Z2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQorRnJhbWVi
dWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCiB7Ci0g
ICAgaWYgKGhhbmRsZSAhPSAwKQotICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJi
dWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRl
cmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOwogCi0gICAg
ICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0ZW5jaWxidWZmZXIq
PihyZW5kZXJidWZmZXIpOwotICAgICAgICB9CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFt
ZWJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJaZXJvOworICAgICAg
ICByZXR1cm4gZnJhbWVidWZmZXItPnNlY29uZDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsK
IH0KIAogQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCiB7Ci0gICAgcmV0dXJuIGdl
dEJ1ZmZlcihtU3RhdGUuYXJyYXlCdWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZm
ZXIuZ2V0KCk7CiB9CiAKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkK
IHsKLSAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpOworICAg
IHJldHVybiBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOwogfQogCiBQcm9ncmFtICpD
b250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbSgpCiB7Ci0gICAgcmV0dXJuIGdldFByb2dyYW0obVN0
YXRlLmN1cnJlbnRQcm9ncmFtKTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJv
Z3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOwogfQogCiBUZXh0dXJlMkQgKkNvbnRleHQ6Omdl
dFRleHR1cmUyRCgpCiB7Ci0gICAgaWYgKG1TdGF0ZS50ZXh0dXJlMkQgPT0gMCkgICAvLyBTcGVj
aWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9u
IHRoZSB0YXJnZXQKKyAgICBpZiAobVN0YXRlLnRleHR1cmUyRC5pZCgpID09IDApICAgLy8gU3Bl
Y2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBv
biB0aGUgdGFyZ2V0CiAgICAgewogICAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm87CiAgICAg
fQogCi0gICAgcmV0dXJuIChUZXh0dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmUyRCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KG1TdGF0ZS50ZXh0dXJlMkQuZ2V0
KCkpOwogfQogCiBUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQog
ewotICAgIGlmIChtU3RhdGUudGV4dHVyZUN1YmVNYXAgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6
IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJn
ZXQKKyAgICBpZiAobVN0YXRlLnRleHR1cmVDdWJlTWFwLmlkKCkgPT0gMCkgICAvLyBTcGVjaWFs
IGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRo
ZSB0YXJnZXQKICAgICB7CiAgICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOwogICAg
IH0KIAotICAgIHJldHVybiAoVGV4dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0YXRlLnRleHR1
cmVDdWJlTWFwKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihtU3Rh
dGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOwogfQogCiBUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1w
bGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAg
ICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07Cisg
ICAgR0x1aW50IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlk
KCk7CiAKICAgICBpZiAodGV4aWQgPT0gMCkKICAgICB7CkBAIC0xMjI3LDEyICsxMDU0LDcgQEAg
VGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaQogICAgICAgICB9CiAgICAg
fQogCi0gICAgcmV0dXJuIGdldFRleHR1cmUodGV4aWQpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29u
dGV4dDo6Z2V0RnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3Rh
dGUuZnJhbWVidWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1b
c2FtcGxlcl0uZ2V0KCk7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBu
YW1lLCBHTGJvb2xlYW4gKnBhcmFtcykKQEAgLTEyODMsNyArMTEwNSw3IEBAIGJvb2wgQ29udGV4
dDo6Z2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0wKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNl
IEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKICAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYOworICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0c1No
YWRlck1vZGVsMygpID8gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDogZ2w6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yOwogICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfREVQVEhfUkFOR0U6CiAgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVhcjsK
QEAgLTEzMjYsMTMgKzExNDgsMTMgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0g
cG5hbWUsIAogICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRTsgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2Ug
R0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTOiAvKiBubyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVk
ICovICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAg
IC8qIG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcjsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVi
dWZmZXI7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzog
ICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFr
OworICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAvLyBu
b3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKKyAgICAg
IGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIu
aWQoKTsgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0x
MzYzLDggKzExODUsNjMgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUs
IAogICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX1NJWkU7ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRTsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVS
UzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAg
IAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBhdCBjdXJyZW50LCBvbmx5IEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgYW5kIAorICAgICAgICAgICAgICAgIC8vIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIGFyZSBzdXBwb3J0ZWQKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKTsKKyAgICAgICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCisgICAg
ICBjYXNlIEdMX1NBTVBMRVM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChm
cmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgorICAgICAg
ICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVTOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9UWVBFOiAgICpwYXJhbXMgPSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBF
OyAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1B
VDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7
CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgpAQCAtMTM3NCw2ICsxMjUxLDE1IEBA
IGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgIHBh
cmFtc1sxXSA9IG1heERpbWVuc2lvbjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7
CisgICAgICAgICAgICAgICAgcGFyYW1zWzFdID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX1ZJRVdQT1JUOgogICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwog
ICAgICAgICBwYXJhbXNbMV0gPSBtU3RhdGUudmlld3BvcnRZOwpAQCAtMTM5Myw3ICsxMjc5LDcg
QEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBH
TF9CTFVFX0JJVFM6CiAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOwor
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwogICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwogCiAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXIp
CkBAIC0xNDE0LDggKzEzMDAsOCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBw
bmFtZSwgCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0
aFN0ZW5jaWxidWZmZXIgKmRlcHRoYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCk7CiAKICAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICAgICAgICAgIHsKQEAgLTE0
MjksOCArMTMxNSw4IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAK
ICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzoKICAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICBnbDo6U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RGVw
dGhTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKTsKIAogICAgICAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCiAgICAgICAgICAgICB7
CkBAIC0xNDUwLDcgKzEzMzYsNyBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBw
bmFtZSwgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfMkRdW21T
dGF0ZS5hY3RpdmVTYW1wbGVyXTsKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
clRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01B
UDoKQEAgLTE0NjEsNyArMTM0Nyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVt
IHBuYW1lLCAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJF
XVttU3RhdGUuYWN0aXZlU2FtcGxlcl07CisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW1NBTVBMRVJfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgpAQCAtMTU1Miw2ICsxNDM4
LDE5IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfU0FNUExFU19BTkdMRToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAgICAgIHsKICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwpAQCAtMTYyNiw3ICsxNTI1LDcgQEAgYm9vbCBDb250ZXh0OjphcHBs
eVJlbmRlclRhcmdldChib29sIGlnbgogewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9
IGdldERldmljZSgpOwogCi0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0
RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKIAogICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVi
dWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQog
ICAgIHsKQEAgLTE2MzYsMjAgKzE1MzUsMzUgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRh
cmdldChib29sIGlnbgogICAgIH0KIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5j
aWwoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKIAogICAg
IHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBw
bGllZFJlbmRlclRhcmdldFNlcmlhbCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
VGFyZ2V0KDAsIHJlbmRlclRhcmdldCk7CiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2Vy
aWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0
cnVlOyAvLyBTY2lzc29yIGFyZWEgbXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBz
aXplLS0gdGhpcyBpcyBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIHVuc2ln
bmVkIGludCBzdGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmpl
Y3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0
aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhT
dGVuY2lsKCk7CisgICAgICAgIGRlcHRoYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyKCktPmdldFNlcmlhbCgpOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsK
KyAgICAgICAgZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZm
ZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBpbnQgZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKLSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0g
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCkKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0g
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAorICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFs
ICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKICAgICB7CiAgICAgICAgIGRldmljZS0+
U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwogICAgICAgICBtQXBwbGllZERl
cHRoYnVmZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3Rl
bmNpbGJ1ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CiAgICAgfQogCiAgICAgRDNE
VklFV1BPUlQ5IHZpZXdwb3J0OwpAQCAtMTY5MCw3ICsxNjA0LDggQEAgYm9vbCBDb250ZXh0Ojph
cHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0
ZS5zY2lzc29yWSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3NvclggKyBt
U3RhdGUuc2Npc3NvcldpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lz
c29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0fTsKLQorICAgICAgICAgICAgcmVjdC5yaWdodCA9
IHN0ZDo6bWluKHN0YXRpY19jYXN0PFVJTlQ+KHJlY3QucmlnaHQpLCBkZXNjLldpZHRoKTsKKyAg
ICAgICAgICAgIHJlY3QuYm90dG9tID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8VUlOVD4ocmVjdC5i
b3R0b20pLCBkZXNjLkhlaWdodCk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0
KCZyZWN0KTsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NP
UlRFU1RFTkFCTEUsIFRSVUUpOwogICAgICAgICB9CkBAIC0xNjk4LDcgKzE2MTMsNyBAQCBib29s
IENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNF
KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBm
YWxzZTsKICAgICB9CiAKQEAgLTE3MTAsNyArMTYyNSw3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlS
ZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmll
d3BvcnQuV2lkdGgsIDEuMGYgLyB2aWV3cG9ydC5IZWlnaHR9OwogICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5zZXRVbmlmb3JtMmZ2KGhhbGZQaXhlbFNpemUsIDEsIChHTGZsb2F0KikmeHkpOwogCi0g
ICAgICAgIEdMaW50IHdpbmRvdyA9IHByb2dyYW1PYmplY3QtPmdldER4V2luZG93TG9jYXRpb24o
KTsKKyAgICAgICAgR0xpbnQgd2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhWaWV3cG9ydExv
Y2F0aW9uKCk7CiAgICAgICAgIEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0
aCAvIDIuMGYsIG1TdGF0ZS52aWV3cG9ydEhlaWdodCAvIDIuMGYsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRo
IC8gMi4wZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3Bv
cnRZICsgbVN0YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZn07CkBAIC0xNzQ4LDYgKzE2NjMsOCBA
QCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgR0xpbnQgYWx3
YXlzRnJvbnQgPSAhaXNUcmlhbmdsZU1vZGUoZHJhd01vZGUpOwogICAgIHByb2dyYW1PYmplY3Qt
PnNldFVuaWZvcm0xaXYocG9pbnRzT3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAorICAgIEZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCiAg
ICAgaWYgKG1DdWxsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCiAgICAgewogICAgICAg
ICBpZiAobVN0YXRlLmN1bGxGYWNlKQpAQCAtMTc2NCw3ICsxNjgxLDcgQEAgdm9pZCBDb250ZXh0
OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogCiAgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkp
CiAgICAgewotICAgICAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCkKKyAgICAgICAgaWYgKG1TdGF0
ZS5kZXB0aFRlc3QgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9
IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkVOQUJMRSwgRDNEWkJfVFJVRSk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1pGVU5DLCBlczJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRo
RnVuYykpOwpAQCAtMTgyNiw3ICsxNzQzLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdM
ZW51bSBkcmF3TW9kZQogCiAgICAgaWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNl
RGlydHkpCiAgICAgewotICAgICAgICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGhhc1N0ZW5j
aWwoKSkKKyAgICAgICAgaWYgKG1TdGF0ZS5zdGVuY2lsVGVzdCAmJiBmcmFtZWJ1ZmZlck9iamVj
dC0+aGFzU3RlbmNpbCgpKQogICAgICAgICB7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKQEAgLTE4NDQs
OCArMTc2MSw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhl
IHN0ZW5jaWwgcmVmCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
Z2V0RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgIGds
OjpEZXB0aFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8
PCBzdGVuY2lsYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpKSAtIDE7CiAKICAgICAgICAgICAgIGRl
dmljZS0+U2V0UmVuZGVyU3RhdGUobVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19T
VEVOQ0lMV1JJVEVNQVNLIDogRDNEUlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVu
Y2lsV3JpdGVtYXNrKTsKQEAgLTE4OTcsNyArMTgxMyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlT
dGF0ZShHTGVudW0gZHJhd01vZGUKICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9m
ZnNldEZpbGwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAg
Z2w6OkRlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0RGVwdGhidWZmZXIoKTsKICAgICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BF
U0NBTEVERVBUSEJJQVMsICooKERXT1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsK
QEAgLTE5MTQsNyArMTgzMCw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJh
d01vZGUKICAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7CiAgICAgfQog
Ci0gICAgaWYgKG1Db25maWctPm1NdWx0aVNhbXBsZSAhPSAwICYmIG1TYW1wbGVTdGF0ZURpcnR5
KQorICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aXNNdWx0aXNhbXBsZSgpICYmIG1TYW1wbGVT
dGF0ZURpcnR5KQogICAgIHsKICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJh
Z2UpCiAgICAgICAgIHsKQEAgLTE5MjMsNyArMTgzOSwzNCBAQCB2b2lkIENvbnRleHQ6OmFwcGx5
U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAKICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFn
ZSkKICAgICAgICAgewotICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmlt
cGxlbWVudGVkLiIpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19N
VUxUSVNBTVBMRUFOVElBTElBUywgVFJVRSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFz
ayA9IDA7CisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVmOwor
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+
Z2V0U2FtcGxlcygpOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtYXNrIDw8PSAxOworCisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICogbVN0YXRl
LnNhbXBsZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgKz0gMS4wZjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1hc2sgfD0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1T
dGF0ZS5zYW1wbGVDb3ZlcmFnZUludmVydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtYXNrID0gfm1hc2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfTVVMVElTQU1QTEVBTlRJQUxJQVMsIEZBTFNFKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1TYW1wbGVTdGF0ZURpcnR5ID0gZmFsc2U7CkBAIC0yMDA1LDcgKzE5NDgsNyBAQCBHTGVudW0g
Q29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoY29uc3QgCiAvLyBBcHBsaWVzIHRoZSBpbmRpY2Vz
IGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQogR0xl
bnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pCiB7Ci0gICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5k
ZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwgZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIpLCBpbmRpY2VzLCBpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtSW5kZXhE
YXRhTWFuYWdlci0+cHJlUmVuZGVyVmFsaWRhdGUobW9kZSwgdHlwZSwgY291bnQsIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7CiAKICAgICBpZiAo
ZXJyID09IEdMX05PX0VSUk9SKQogICAgIHsKQEAgLTIwOTIsNyArMjAzNSwxOCBAQCB2b2lkIENv
bnRleHQ6OmFwcGx5VGV4dHVyZXMoKQogCiB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBn
ZXRSZWFkRnJhbWVidWZmZXIoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNz
KCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmIChn
ZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVz
KCkgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgfQorCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1l
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBnZXREZXZpY2UoKTsKIApAQCAtMjE1NSw2ICsyMTA5LDE5IEBAIHZvaWQgQ29udGV4dDo6cmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCAKIAogICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsgaisrKQogICAgIHsKKyAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09
IEQzREZNVF9BOFI4RzhCOCAmJgorICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYm
CisgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCisgICAg
ICAgICAgICAvLyBhbiBSR0JBIHNvdXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRo
IG5vCisgICAgICAgICAgICAvLyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cu
CisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICBzb3VyY2UgKyBqICogbG9jay5QaXRjaCwKKyAgICAgICAgICAgICAgICAgICAocmVj
dC5yaWdodCAtIHJlY3QubGVmdCkgKiA0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
OyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZsb2F0IHI7CkBAIC0yMjQzLDYgKzIyMTAs
NDYgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAw
LjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1
NSAqIHIgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRv
IHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVz
IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMg
Zm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDEx
ICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAor
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8
ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAorICAgICAgICAgICAgICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8g
aW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUg
c2Vjb25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAq
IG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAorICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41
ZikgPDwgNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUg
KiBiICsgMC41ZikgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6CisgICAgICAg
ICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAi
VHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAg
IC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAg
NSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAg
ICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21w
b25lbnQgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlz
IHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAg
ICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCldID0KKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAg
ICAgYSArIDAuNWYpIDw8IDE1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVk
IHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCOiAgIC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFU
CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICAgICAgIHsKQEAgLTIy
NjcsNyArMjI3NCw3IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCAK
IAogdm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAgIGlmICgh
ZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKQEAgLTIyOTksMjIgKzIzMDYsMjQgQEAg
dm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoU3RlbmNpbCgpOwotCiAgICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsK
IAotICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZGVwdGhTdGVuY2ls
KQorICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2M7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVz
Yyk7Ci0KICAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3Jt
YXQpOwotICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7
Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDApCisgICAgICAgIGlmIChmcmFt
ZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICAgICAgRDNEU1VSRkFD
RV9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwor
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNp
bFNpemUoZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8
PCBzdGVuY2lsU2l6ZSkgLSAxOworCisgICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9
IDB4MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9T
VEVOQ0lMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjE4LDcgKzI2
MjcsOCBAQCB2b2lkIENvbnRleHQ6OmZpbmlzaCgpCiAgICAgICAgIElEaXJlY3QzRFN0YXRlQmxv
Y2s5ICpzYXZlZFN0YXRlID0gTlVMTDsKICAgICAgICAgZGV2aWNlLT5DcmVhdGVTdGF0ZUJsb2Nr
KEQzRFNCVF9BTEwsICZzYXZlZFN0YXRlKTsKIAotICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNz
dWUoRDNESVNTVUVfQkVHSU4pOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG9jY2x1c2lvblF1
ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9CRUdJTik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CiAKICAgICAgICAgLy8gUmVuZGVyIHNvbWV0aGluZyBvdXRzaWRlIHRoZSByZW5kZXIg
dGFyZ2V0CiAgICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKQEAgLTI2
MjksNyArMjYzOSw4IEBAIHZvaWQgQ29udGV4dDo6ZmluaXNoKCkKICAgICAgICAgZGlzcGxheS0+
c3RhcnRTY2VuZSgpOwogICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9QT0lO
VExJU1QsIDEsIGRhdGEsIHNpemVvZihkYXRhKSk7CiAKLSAgICAgICAgb2NjbHVzaW9uUXVlcnkt
Pklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgICAgIHJlc3VsdCA9IG9jY2x1c2lvblF1ZXJ5LT5J
c3N1ZShEM0RJU1NVRV9FTkQpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwog
CiAgICAgICAgIHdoaWxlIChvY2NsdXNpb25RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVRE
QVRBX0ZMVVNIKSA9PSBTX0ZBTFNFKQogICAgICAgICB7CkBAIC0yNjYzLDE1ICsyNjc0LDE2IEBA
IHZvaWQgQ29udGV4dDo6Zmx1c2goKQogCiAgICAgaWYgKGV2ZW50UXVlcnkpCiAgICAgewotICAg
ICAgICBldmVudFF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGV2ZW50UXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgcmVzdWx0ID0gZXZlbnRRdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKyAgICAgICAgZXZlbnRRdWVyeS0+UmVsZWFz
ZSgpOwogCi0gICAgICAgIHdoaWxlIChldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdF
VERBVEFfRkxVU0gpID09IFNfRkFMU0UpCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RF
VklDRUxPU1QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFs
bG93IG90aGVyIHRocmVhZHMgdG8gZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAotICAgICAgICAg
ICAgU2xlZXAoMCk7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAg
ICAgfQotCi0gICAgICAgIGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKICAgICB9CiB9CiAKQEAgLTI3
NDIsMTQgKzI3NTQsNDMgQEAgR0xlbnVtIENvbnRleHQ6OmdldEVycm9yKCkKICAgICByZXR1cm4g
R0xfTk9fRVJST1I7CiB9CiAKLWNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldFBpeGVsU2hhZGVyUHJv
ZmlsZSgpCitib29sIENvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN1cHBvcnRzU2hhZGVyTW9kZWwzOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4
U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1w
bGVzOworfQorCitpbnQgQ29udGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9S
TUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVBzUHJvZmls
ZTsKKyAgICBpZiAocmVxdWVzdGVkID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVz
dGVkOworICAgIH0KKworICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0
ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIH0KKworICAgIGZvciAoaW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1Q
TEVfMTZfU0FNUExFUzsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYm
IGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQogCi1jb25z
dCBjaGFyICpDb250ZXh0OjpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCkKK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtVnNQcm9m
aWxlOworICAgIHJldHVybiBtU3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXM7CiB9CiAKIHZvaWQg
Q29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIpCkBAIC0yNzU4LDIxICsyNzk5LDIx
IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVyKEdMdWludCBidWZmZXIKICAgICAvLyBJZiBh
IGJ1ZmZlciBvYmplY3QgaXMgZGVsZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdz
IHRvIHRoYXQgb2JqZWN0IGluIHRoZSBjdXJyZW50IGNvbnRleHQKICAgICAvLyAoaS5lLiBpbiB0
aGUgdGhyZWFkIHRoYXQgY2FsbGVkIERlbGV0ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8gemVyby4K
IAotICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIGlmIChtU3RhdGUu
YXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCiAgICAgewotICAgICAgICBtU3RhdGUuYXJyYXlC
dWZmZXIgPSAwOworICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0K
IAotICAgIGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICBpZiAo
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKICAgICB7Ci0gICAgICAg
IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSAwOworICAgICAgICBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyLnNldChOVUxMKTsKICAgICB9CiAKICAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAw
OyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQogICAgIHsKLSAg
ICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIg
PT0gYnVmZmVyKQorICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVd
Lm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlciA9IDA7CisgICAgICAg
ICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChO
VUxMKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI3ODcsOSArMjgyOCw5IEBAIHZvaWQgQ29u
dGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHUKICAgICB7CiAgICAgICAgIGZvciAoaW50
IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIr
KykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBl
XVtzYW1wbGVyXSA9PSB0ZXh0dXJlKQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpID09IHRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAg
ICAgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5V
TEwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc5OSwxMSArMjg0MCwx
NyBAQCB2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1CiAgICAgLy8gYXMg
aWYgRnJhbWVidWZmZXJUZXh0dXJlMkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBv
ZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKICAgICAvLyBpbWFn
ZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAg
IEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVi
dWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1l
YnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIGlm
IChmcmFtZWJ1ZmZlcikKKyAgICBpZiAocmVhZEZyYW1lYnVmZmVyKQogICAgIHsKLSAgICAgICAg
ZnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7CisgICAgICAgIHJlYWRGcmFtZWJ1
ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICB9CisKKyAgICBpZiAoZHJhd0ZyYW1l
YnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCisgICAgeworICAg
ICAgICBkcmF3RnJhbWVidWZmZXItPmRldGFjaFRleHR1cmUodGV4dHVyZSk7CiAgICAgfQogfQog
CkBAIC0yODEzLDkgKzI4NjAsMTQgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihH
THVpbnQgZgogICAgIC8vIElmIGEgZnJhbWVidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQg
dG8gdGhlIHRhcmdldCBGUkFNRUJVRkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKICAg
ICAvLyBCaW5kRnJhbWVidWZmZXIgaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9m
IEZSQU1FQlVGRkVSIGFuZCBmcmFtZWJ1ZmZlciBvZiB6ZXJvLgogCi0gICAgaWYgKG1TdGF0ZS5m
cmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
ciA9PSBmcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7
CisgICAgfQorCisgICAgaWYgKG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIp
CiAgICAgewotICAgICAgICBiaW5kRnJhbWVidWZmZXIoMCk7CisgICAgICAgIGJpbmREcmF3RnJh
bWVidWZmZXIoMCk7CiAgICAgfQogfQogCkBAIC0yODI1LDcgKzI4NzcsNyBAQCB2b2lkIENvbnRl
eHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgCiAgICAgLy8gSWYgYSByZW5kZXJidWZmZXIg
dGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlz
IGFzIHRob3VnaCBCaW5kUmVuZGVyYnVmZmVyCiAgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0
aCB0aGUgdGFyZ2V0IFJFTkRFUkJVRkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgogCi0gICAgaWYgKG1T
dGF0ZS5yZW5kZXJidWZmZXIgPT0gcmVuZGVyYnVmZmVyKQorICAgIGlmIChtU3RhdGUucmVuZGVy
YnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyKQogICAgIHsKICAgICAgICAgYmluZFJlbmRlcmJ1
ZmZlcigwKTsKICAgICB9CkBAIC0yODM1LDExICsyODg3LDE3IEBAIHZvaWQgQ29udGV4dDo6ZGV0
YWNoUmVuZGVyYnVmZmVyKEdMdWludCAKICAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyIGhhZCBiZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAw
LCBmb3IgZWFjaCBhdHRhY2htZW50CiAgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3
YXMgYXR0YWNoZWQgaW4gdGhlIGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAgIEZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZm
ZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVm
ZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChy
ZWFkRnJhbWVidWZmZXIpCisgICAgeworICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgIH0KIAotICAgIGlmIChmcmFtZWJ1ZmZlcikK
KyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVi
dWZmZXIpCiAgICAgewotICAgICAgICBmcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcik7CisgICAgICAgIGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yODU5LDcgKzI5MTcsNyBAQCBUZXh0dXJl
ICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBjYXNlIFNBTVBM
RVJfMkQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBs
ZXRlMmQgPSBuZXcgVGV4dHVyZTJEKHRoaXMpOworICAgICAgICAgICAgICAgIFRleHR1cmUyRCAq
aW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVf
SUQpOwogICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgR0xfUkdCQSwg
MSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwogICAgICAgICAgICAg
ICAgIHQgPSBpbmNvbXBsZXRlMmQ7CiAgICAgICAgICAgICB9CkBAIC0yODY3LDcgKzI5MjUsNyBA
QCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBj
YXNlIFNBTVBMRVJfQ1VCRToKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1
YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAgICAg
ICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVN
YXAoVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKIAogICAgICAgICAgICAgICBpbmNv
bXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKICAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNl
dEltYWdlTmVnWCgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAx
LCBjb2xvcik7CkBAIC0yOTExLDIzICsyOTY5LDYgQEAgYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xl
TW9kZShHTGVudW0gZHJhdwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBDb250ZXh0Ojpo
YXNTdGVuY2lsKCkKLXsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRG
cmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyKCk7Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3Qp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsU2l6ZSgpID4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZXMpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUyk7CkBAIC0yOTQyLDYgKzI5ODMsMjIgQEAgdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZAogCiB2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogewor
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOwor
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAi
OworICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Cisg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOworICAg
IG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7CisKKyAgICBpZiAoc3Vw
cG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKKyAgICB9CisKKyAgICBp
ZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCisgICAgeworICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAiOworICAgIH0K
KwogICAgIGlmIChtQnVmZmVyQmFja0VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKICAgICB7CiAg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsK
QEAgLTI5NTksMTMgKzMwMTYsMjg1IEBAIGNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lv
blN0cmluZygKICAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwogfQogCit2b2lk
IENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50
IHNyY1gxLCBHTGludCBzcmNZMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKworICAgIEZyYW1lYnVmZmVyICpyZWFkRnJh
bWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0Zy
YW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIXJlYWRGcmFtZWJ1
ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFIHx8CisgICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVy
LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAg
fQorCisgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAg
IFJFQ1Qgc291cmNlUmVjdDsKKyAgICBSRUNUIGRlc3RSZWN0OworCisgICAgaWYgKHNyY1gwIDwg
c3JjWDEpCisgICAgeworICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKKyAgICAgICAg
c291cmNlUmVjdC5yaWdodCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7
CisgICAgICAgIGRlc3RSZWN0LnJpZ2h0ID0gZHN0WDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0
ID0gZHN0WDE7CisgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKKyAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMDsKKyAgICB9CisKKyAgICAvLyBBcmd1bWVudHMgdG8gU3RyZXRj
aFJlY3QgbXVzdCBiZSBpbiBEM0Qtc3R5bGUgKDAtdG9wKSBjb29yZGluYXRlcywgc28gd2UgbXVz
dCAKKyAgICAvLyBmbGlwIG91ciBZLXZhbHVlcyBoZXJlCisgICAgaWYgKHNyY1kwIDwgc3JjWTEp
CisgICAgeworICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHNyY1kxOworICAgICAgICBkZXN0
UmVjdC5ib3R0b20gPSBkc3RZMTsKKyAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMDsKKyAg
ICAgICAgZGVzdFJlY3QudG9wID0gZHN0WTA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9
IGRzdFkwOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kxOworICAgICAgICBkZXN0UmVj
dC50b3AgPSBkc3RZMTsKKyAgICB9CisKKyAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBz
b3VyY2VSZWN0OworICAgIFJFQ1QgZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKKworICAg
IGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCisgICAgeworICAgICAgICAvLyBPbmx5IHdyaXRlIHRv
IHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lz
c29yIHRlc3QKKyAgICAgICAgLy8gUGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4g
RDNELXN0eWxlIGNvb3JkaW5hdGVzLCBzbyB0aGUgKnRvcCogb2YgdGhlCisgICAgICAgIC8vIHJl
Y3Qgd2lsbCBiZSBjaGVja2VkIGFnYWluc3Qgc2Npc3NvclksIHJhdGhlciB0aGFuIHRoZSBib3R0
b20uCisgICAgICAgIGlmIChkZXN0UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbnQgeERpZmYgPSBtU3RhdGUuc2Npc3NvclggLSBkZXN0UmVjdC5s
ZWZ0OworICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29y
WDsKKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChkZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1T
dGF0ZS5zY2lzc29yV2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB4RGlmZiA9IGRl
c3RSZWN0LnJpZ2h0IC0gKG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOwor
ICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBt
U3RhdGUuc2Npc3NvcldpZHRoOworICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5yaWdo
dCAtPSB4RGlmZjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZXN0UmVjdC50b3AgPCBtU3Rh
dGUuc2Npc3NvclkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5z
Y2lzc29yWSAtIGRlc3RSZWN0LnRvcDsKKyAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnRv
cCA9IG1TdGF0ZS5zY2lzc29yWTsKKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QudG9w
ICs9IHlEaWZmOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1T
dGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29ySGVpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpbnQgeURpZmYgPSBkZXN0UmVjdC5ib3R0b20gLSAobVN0YXRlLnNjaXNzb3JZICsgbVN0
YXRlLnNjaXNzb3JIZWlnaHQpOworICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9t
ID0gbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LmJvdHRvbSAtPSB5RGlmZjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOworICAgIGJvb2wgYmxpdERlcHRoU3Rl
bmNpbCA9IGZhbHNlOworCisgICAgUkVDVCBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJjZVNjaXNz
b3JlZFJlY3Q7CisgICAgUkVDVCBkZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsK
KworICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5l
ZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCisgICAg
Ly8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2VzLgorICAgIGlmIChzb3VyY2VUcmlt
bWVkUmVjdC5sZWZ0IDwgMCkKKyAgICB7CisgICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VU
cmltbWVkUmVjdC5sZWZ0OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsKKyAg
ICAgICAgZGVzdFRyaW1tZWRSZWN0LmxlZnQgKz0geERpZmY7CisgICAgfQorCisgICAgaW50IHJl
YWRCdWZmZXJXaWR0aCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lk
dGgoKTsKKyAgICBpbnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7CisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKKyAgICBpbnQgZHJhd0J1
ZmZlckhlaWdodCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0
KCk7CisKKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgp
CisgICAgeworICAgICAgICBpbnQgeERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJl
YWRCdWZmZXJXaWR0aDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVm
ZmVyV2lkdGg7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKKyAgICB9
CisKKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGlu
dCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC50b3A7CisgICAgICAgIHNvdXJjZVRyaW1t
ZWRSZWN0LnRvcCA9IDA7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7Cisg
ICAgfQorCisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWln
aHQpCisgICAgeworICAgICAgICBpbnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20g
LSByZWFkQnVmZmVySGVpZ2h0OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSBy
ZWFkQnVmZmVySGVpZ2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZm
OworICAgIH0KKworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCisgICAgeworICAg
ICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQ7CisgICAgICAgIGRlc3RU
cmltbWVkUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4
RGlmZjsKKyAgICB9CisKKyAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZl
cldpZHRoKQorICAgIHsKKyAgICAgICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0
IC0gZHJhd0J1ZmZlcldpZHRoOworICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3
QnVmZmVyV2lkdGg7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwor
ICAgIH0KKworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAg
IGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QudG9wOworICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QudG9wID0gMDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOwor
ICAgIH0KKworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdo
dCkKKyAgICB7CisgICAgICAgIGludCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBk
cmF3QnVmZmVySGVpZ2h0OworICAgICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1
ZmZlckhlaWdodDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOwor
ICAgIH0KKworICAgIGJvb2wgcGFydGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKKyAgICBpZiAoc291
cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSB8fAorICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkRnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVyKCktPmdldFdpZHRoKCkgfHwgCisgICAgICAgIGRlc3RUcmltbWVk
UmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJlY3QudG9wIDwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKSB8fAorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qucmln
aHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoKS0+Z2V0V2lkdGgoKSB8fAorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8
fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAw
IHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDApCisgICAgeworICAgICAgICBwYXJ0aWFsQnVm
ZmVyQ29weSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJf
QklUKQorICAgIHsKKyAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJU
eXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSB8fAorICAgICAg
ICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAh
PSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBp
biBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24iKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAg
YmxpdFJlbmRlclRhcmdldCA9IHRydWU7CisKKyAgICB9CisKKyAgICBpZiAobWFzayAmIChHTF9E
RVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKKyAgICB7CisgICAgICAg
IERlcHRoU3RlbmNpbGJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKKyAgICAgICAgRGVwdGhT
dGVuY2lsYnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOworCisgICAgICAgIC8vIFdlIHN1cHBv
cnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0
ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQorICAg
ICAgICAvLyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBz
YW1lIGJ1ZmZlci4KKworICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgp
ICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQo
KSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBi
bGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZHJhd0RT
QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAor
ICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+
Z2V0RDNERm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdl
dEQzREZvcm1hdCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBy
ZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAg
ICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJ0aWFsQnVm
ZmVyQ29weSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBk
ZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRp
b24uIik7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAv
LyBvbmx5IHdob2xlLWJ1ZmZlciBjb3BpZXMgYXJlIHBlcm1pdHRlZAorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKChkcmF3RFNCdWZmZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0g
MCkgfHwgCisgICAgICAgICAgICAocmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJsaXRSZW5kZXJU
YXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAq
ZGlzcGxheSA9IGdldERpc3BsYXkoKTsKKyAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKwor
ICAgICAgICBpZiAoYmxpdFJlbmRlclRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVu
ZGVyVGFyZ2V0KCksICZzb3VyY2VUcmltbWVkUmVjdCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJn
ZXQoKSwgJmRlc3RUcmltbWVkUmVjdCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQmxp
dEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXRE
ZXB0aFN0ZW5jaWwoKSwgTlVMTCwgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwg
TlVMTCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUg
ZmFpbGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogfQogCiBl
eHRlcm4gIkMiCiB7Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29u
ZmlnICpjb25maWcpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29u
ZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiB7Ci0gICAgcmV0
dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcpOworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQo
Y29uZmlnLCBzaGFyZUNvbnRleHQpOwogfQogCiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNv
bnRleHQgKmNvbnRleHQpCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gNjY2MTEp
CisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw4
ICs3LDggQEAKIC8vIENvbnRleHQuaDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1h
bmFnaW5nIGFsbCBHTCBzdGF0ZSBhbmQgcGVyZm9ybWluZwogLy8gcmVuZGVyaW5nIG9wZXJhdGlv
bnMuIEl0IGlzIHRoZSBHTEVTMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0
LgogCi0jaWZuZGVmIElOQ0xVREVfQ09OVEVYVF9IXwotI2RlZmluZSBJTkNMVURFX0NPTlRFWFRf
SF8KKyNpZm5kZWYgTElCR0xFU1YyX0NPTlRFWFRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0NPTlRF
WFRfSF8KIAogI2RlZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CkBAIC0x
OSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bWFwPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBlZ2wKIHsKQEAgLTQwLDkg
KzQyLDExIEBAIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOwogY2xhc3Mg
RnJhbWVidWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXI7CitjbGFzcyBSZW5kZXJidWZmZXJTdG9y
YWdlOwogY2xhc3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5j
aWxidWZmZXI7CitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CiBjbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBCdWZmZXJCYWNrRW5kOwpAQCAt
NjcsMTUgKzcxLDggQEAgZW51bQogY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdF
X01JTiA9IDEuMGY7CiBjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0g
MS4wZjsKIGNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwot
Y29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWCA9IDEuMGY7Ci0KLWVudW0g
U2FtcGxlclR5cGUKLXsKLSAgICBTQU1QTEVSXzJELAotICAgIFNBTVBMRVJfQ1VCRSwKLQotICAg
IFNBTVBMRVJfVFlQRV9DT1VOVAotfTsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00yID0gMS4wZjsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NQVhfU00zID0gNjQuMGY7CiAKIHN0cnVjdCBDb2xvcgogewpAQCAtOTAsNyArODcsNyBAQCBj
bGFzcyBBdHRyaWJ1dGVTdGF0ZQogewogICBwdWJsaWM6CiAgICAgQXR0cmlidXRlU3RhdGUoKQot
ICAgICAgICA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNlKSwg
bVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1Cb3VuZEJ1ZmZlcigwKSwgbUVuYWJsZWQoZmFs
c2UpCisgICAgICAgIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFs
c2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUVuYWJsZWQoZmFsc2UpCiAgICAgewog
ICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9
IDA7CkBAIC0xMDUsNyArMTAyLDcgQEAgY2xhc3MgQXR0cmlidXRlU3RhdGUKICAgICBHTHNpemVp
IG1TdHJpZGU7IC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKICAgICBjb25zdCB2b2lkICptUG9p
bnRlcjsKIAotICAgIEdMdWludCBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4
QXJyYXlQb2ludGVyIGlzIGNhbGxlZC4KKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3Vu
ZEJ1ZmZlcjsgLy8gQ2FwdHVyZWQgd2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIgaXMgY2FsbGVkLgog
CiAgICAgYm9vbCBtRW5hYmxlZDsgLy8gRnJvbSBFbmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5CiAKQEAgLTE4MCwxNiArMTc3LDE3IEBAIHN0cnVjdCBTdGF0ZQogICAgIGJvb2wgZGVwdGhN
YXNrOwogCiAgICAgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBz
ZWxlY3RvciAtIEdMX1RFWFRVUkUwCi0gICAgR0x1aW50IGFycmF5QnVmZmVyOwotICAgIEdMdWlu
dCBlbGVtZW50QXJyYXlCdWZmZXI7Ci0gICAgR0x1aW50IHRleHR1cmUyRDsKLSAgICBHTHVpbnQg
dGV4dHVyZUN1YmVNYXA7Ci0gICAgR0x1aW50IGZyYW1lYnVmZmVyOwotICAgIEdMdWludCByZW5k
ZXJidWZmZXI7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKKyAgICBC
aW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9p
bnRlcjxUZXh0dXJlPiB0ZXh0dXJlMkQ7CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gdGV4
dHVyZUN1YmVNYXA7CisgICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQgZHJh
d0ZyYW1lYnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVm
ZmVyOwogICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKIAogICAgIEF0dHJpYnV0ZVN0YXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMdWludCBzYW1wbGVyVGV4
dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBC
aW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRd
W01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIEdMaW50IHVucGFja0FsaWdubWVudDsK
ICAgICBHTGludCBwYWNrQWxpZ25tZW50OwpAQCAtMTk4LDcgKzE5Niw3IEBAIHN0cnVjdCBTdGF0
ZQogY2xhc3MgQ29udGV4dAogewogICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBlZ2w6OkNv
bmZpZyAqY29uZmlnKTsKKyAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNv
bnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwogCiAgICAgfkNvbnRleHQoKTsKIApAQCAt
Mjc2LDE0ICsyNzQsMTUgQEAgY2xhc3MgQ29udGV4dAogCiAgICAgdm9pZCBzZXRBY3RpdmVTYW1w
bGVyKGludCBhY3RpdmUpOwogCi0gICAgR0x1aW50IGdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29u
c3Q7CisgICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OworICAgIEdM
dWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0UmVu
ZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5k
bGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOwogICAgIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZn
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKLSAgICB2b2lkIHNl
dFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1
ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJT
dGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBz
aXplLCBHTGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9y
bWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0
IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29u
c3Q7CiAKQEAgLTI5NSwzMyArMjk0LDM2IEBAIGNsYXNzIENvbnRleHQKICAgICB2b2lkIHNldFBh
Y2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50
KCkgY29uc3Q7CiAKKyAgICAvLyBUaGVzZSBjcmVhdGUgIGFuZCBkZXN0cm95IG1ldGhvZHMgYXJl
IG1lcmVseSBwYXNzLXRocm91Z2hzIHRvIAorICAgIC8vIFJlc291cmNlTWFuYWdlciwgd2hpY2gg
b3ducyB0aGVzZSBvYmplY3QgdHlwZXMKICAgICBHTHVpbnQgY3JlYXRlQnVmZmVyKCk7CiAgICAg
R0x1aW50IGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CiAgICAgR0x1aW50IGNyZWF0ZVByb2dy
YW0oKTsKICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwotICAgIEdMdWludCBjcmVhdGVGcmFt
ZWJ1ZmZlcigpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKIAogICAgIHZvaWQg
ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWlu
dCBzaGFkZXIpOwogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAg
dm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIo
R0x1aW50IHJlbmRlcmJ1ZmZlcik7CiAKKyAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5
IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKKyAgICBH
THVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdM
dWludCBmcmFtZWJ1ZmZlcik7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGJpbmRUZXh0
dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZy
YW1lYnVmZmVyKTsKKyAgICB2b2lkIGJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVm
ZmVyKTsKICAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CiAg
ICAgdm9pZCB1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKIAogICAgIHZvaWQgc2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRDb2xvcmJ1
ZmZlclplcm8oQ29sb3JidWZmZXIgKnJlbmRlcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1
ZmZlclplcm8oRGVwdGhidWZmZXIgKmRlcHRoQnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxi
dWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxCdWZmZXIpOwotICAgIHZvaWQgc2V0UmVu
ZGVyYnVmZmVyKFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpOwogCiAg
ICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZXMpOwogCkBAIC0zMzEsOSArMzMzLDYgQEAgY2xhc3MgQ29udGV4dAogICAgIFRleHR1cmUgKmdl
dFRleHR1cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVy
KEdMdWludCBoYW5kbGUpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWlu
dCBoYW5kbGUpOwotICAgIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxl
KTsKLSAgICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAg
U3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKIAogICAgIEJ1
ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKICAgICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZl
cigpOwpAQCAtMzQxLDcgKzM0MCw4IEBAIGNsYXNzIENvbnRleHQKICAgICBUZXh0dXJlMkQgKmdl
dFRleHR1cmUyRCgpOwogICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwog
ICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1w
bGVyVHlwZSB0eXBlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBG
cmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmdldERy
YXdGcmFtZWJ1ZmZlcigpOwogCiAgICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZs
b2F0ICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKTsKQEAgLTM3MywxMCArMzczLDE1IEBAIGNsYXNzIENvbnRleHQKIAogICAgIEdMZW51
bSBnZXRFcnJvcigpOwogCi0gICAgY29uc3QgY2hhciAqZ2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7
Ci0gICAgY29uc3QgY2hhciAqZ2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpOwotCisgICAgYm9vbCBz
dXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVk
U2FtcGxlcygpIGNvbnN0OworICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RG
T1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpnZXRF
eHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1
cmVzKCkgY29uc3Q7CisKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKIAogICAgIEJsaXQg
KmdldEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQogCkBAIC0zOTYsNyArNDAxLDYgQEAgY2xh
c3MgQ29udGV4dAogCiAgICAgYm9vbCBjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSk7CiAg
ICAgYm9vbCBpc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpOwotICAgIGJvb2wgaGFzU3Rl
bmNpbCgpOwogCiAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbnN0IG1Db25maWc7CiAKQEAgLTQw
NiwyNyArNDEwLDExIEBAIGNsYXNzIENvbnRleHQKICAgICBUZXh0dXJlQ3ViZU1hcCAqbVRleHR1
cmVDdWJlTWFwWmVybzsKIAogICAgIENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJvOwotICAg
IERlcHRoYnVmZmVyICptRGVwdGhidWZmZXJaZXJvOwotICAgIFN0ZW5jaWxidWZmZXIgKm1TdGVu
Y2lsYnVmZmVyWmVybzsKLQotICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBC
dWZmZXJNYXA7Ci0gICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6
bWFwPEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFw
OwotCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwot
ICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWlu
dCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7Ci0gICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKyAg
ICBEZXB0aFN0ZW5jaWxidWZmZXIgKm1EZXB0aFN0ZW5jaWxidWZmZXJaZXJvOwogCiAgICAgdHlw
ZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CiAgICAg
RnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwogCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxH
THVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJN
YXAgbVJlbmRlcmJ1ZmZlck1hcDsKLQogICAgIHZvaWQgaW5pdEV4dGVuc2lvblN0cmluZygpOwog
ICAgIHN0ZDo6c3RyaW5nIG1FeHRlbnNpb25TdHJpbmc7CiAKQEAgLTQzNSw3ICs0MjMsNyBAQCBj
bGFzcyBDb250ZXh0CiAgICAgSW5kZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1hbmFnZXI7CiAK
ICAgICBCbGl0ICptQmxpdDsKLQorICAgIAogICAgIFRleHR1cmUgKm1JbmNvbXBsZXRlVGV4dHVy
ZXNbU0FNUExFUl9UWVBFX0NPVU5UXTsKIAogICAgIC8vIFJlY29yZGVkIGVycm9ycwpAQCAtNDUw
LDkgKzQzOCwxMiBAQCBjbGFzcyBDb250ZXh0CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJv
Z3JhbTsKICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CiAgICAg
dW5zaWduZWQgaW50IG1BcHBsaWVkRGVwdGhidWZmZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50
IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbDsKIAotICAgIGNvbnN0IGNoYXIgKm1Qc1Byb2Zp
bGU7Ci0gICAgY29uc3QgY2hhciAqbVZzUHJvZmlsZTsKKyAgICBib29sIG1TdXBwb3J0c1NoYWRl
ck1vZGVsMzsKKyAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3Vw
cG9ydDsKKyAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIGJvb2wgbVN1cHBv
cnRzQ29tcHJlc3NlZFRleHR1cmVzOwogCiAgICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncwogICAg
IGJvb2wgbUNsZWFyU3RhdGVEaXJ0eTsKQEAgLTQ3MSwxMyArNDYyLDE1IEBAIGNsYXNzIENvbnRl
eHQKICAgICBJRGlyZWN0M0RTdGF0ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKIAog
ICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworCisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3Vy
Y2VNYW5hZ2VyOwogfTsKIH0KIAogZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25z
IGZvciB1c2UgYnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6
Q29uZmlnICpjb25maWcpOworZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KTsKIHZvaWQg
Z2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CiB2b2lkIGdsTWFrZUN1cnJl
bnQoZ2w6OkNvbnRleHQgKmNvbnRleHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJm
YWNlICpzdXJmYWNlKTsKIGdsOjpDb250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCk7CkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdM
RS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsODUg
KzE2LDEwOSBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKKwogRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVy
KCkKIHsKICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtQ29sb3JidWZmZXJI
YW5kbGUgPSAwOwotCiAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbURlcHRo
YnVmZmVySGFuZGxlID0gMDsKLQogICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0g
ICAgbVN0ZW5jaWxidWZmZXJIYW5kbGUgPSAwOwogfQogCiBGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVm
ZmVyKCkKIHsKKyAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtRGVwdGhi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5V
TEwpOworfQorCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVM
TDsKKworICAgIGlmICh0eXBlID09IEdMX05PTkUpCisgICAgeworICAgICAgICBidWZmZXIgPSBO
VUxMOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7
CisgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworICAg
IH0KKyAgICBlbHNlIGlmIChJc1RleHR1cmVUYXJnZXQodHlwZSkpCisgICAgeworICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldENvbG9yYnVmZmVyKHR5cGUp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBidWZmZXI7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVm
ZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCiB7CiAgICAgbUNvbG9yYnVmZmVy
VHlwZSA9IHR5cGU7Ci0gICAgbUNvbG9yYnVmZmVySGFuZGxlID0gY29sb3JidWZmZXI7CisgICAg
bUNvbG9yYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVm
ZmVyKSk7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgZGVwdGhidWZmZXIpCiB7CiAgICAgbURlcHRoYnVmZmVyVHlwZSA9IHR5cGU7Ci0g
ICAgbURlcHRoYnVmZmVySGFuZGxlID0gZGVwdGhidWZmZXI7CisgICAgbURlcHRoYnVmZmVyUG9p
bnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7CiB9CiAKIHZv
aWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVu
Y2lsYnVmZmVyKQogewogICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbVN0ZW5j
aWxidWZmZXJIYW5kbGUgPSBzdGVuY2lsYnVmZmVyOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIpKTsKIH0KIAogdm9p
ZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKIHsKLSAgICBpZiAo
bUNvbG9yYnVmZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1
ZmZlclR5cGUpKQorICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAm
JiBJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCiAgICAgewogICAgICAgICBtQ29s
b3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsK
KyAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYg
KG1EZXB0aGJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhi
dWZmZXJUeXBlKSkKKyAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUg
JiYgSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQogICAgIHsKICAgICAgICAgbURl
cHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7
CisgICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlm
IChtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3Rl
bmNpbGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0
ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgIHsKICAg
ICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJIYW5kbGUgPSAwOworICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwog
ICAgIH0KIH0KIAogdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCBy
ZW5kZXJidWZmZXIpCiB7Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlckhhbmRsZSA9PSByZW5kZXJidWZm
ZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1Db2xv
cmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgewogICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xf
Tk9ORTsKLSAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRs
ZSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURl
cHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgewogICAgICAgICBtRGVwdGhi
dWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAg
ICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1T
dGVuY2lsYnVmZmVySGFuZGxlID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUg
PT0gR0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9
PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikK
ICAgICB7CiAgICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1T
dGVuY2lsYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKICAgICB9CiB9CiAKIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKCkKIHsKLSAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29s
b3JidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVy
UG9pbnRlci5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1ZmZlcikKICAgICB7CkBAIC0xMDYsNyAr
MTMwLDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogCiBJRGly
ZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgUmVu
ZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENvbG9yYnVmZmVyKCk7CisgICAgUmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKICAgICBpZiAo
Y29sb3JidWZmZXIpCiAgICAgewpAQCAtMTE2LDEwICsxNDAsMjYgQEAgSURpcmVjdDNEU3VyZmFj
ZTkgKkZyYW1lYnVmZmVyOjpnZXRSZW5kZQogICAgIHJldHVybiBOVUxMOwogfQogCitJRGlyZWN0
M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgUmVuZGVy
YnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOwor
ICAgIAorICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQorICAgIHsKKyAgICAgICAgZGVwdGhz
dGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIH0KKworICAg
IGlmIChkZXB0aHN0ZW5jaWxidWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhzdGVu
Y2lsYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKwogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCiB7
Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIERlcHRo
YnVmZmVyICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZl
ckhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CiAKICAgICBpZiAoZGVwdGhidWZmZXIpCiAgICAgewpAQCAtMTI5LDcwICsx
NjksNTggQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcgogICAgIHJl
dHVybiAwOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3Rl
bmNpbCgpCit1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwo
KQogewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBE
ZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhi
dWZmZXJIYW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2ls
YnVmZmVyUG9pbnRlci5nZXQoKTsKIAotICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICBpZiAoc3Rl
bmNpbGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CisgICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gMDsKIH0KIAogQ29sb3JidWZmZXIg
KkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlcigpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IE5V
TEw7CisgICAgUmVuZGVyYnVmZmVyICpyYiA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAK
LSAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9OT05FKQorICAgIGlmIChyYiAhPSBOVUxM
ICYmIHJiLT5pc0NvbG9yYnVmZmVyKCkpCiAgICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICBjb2xvcmJ1ZmZlciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Db2xvcmJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQotICAgIHsKLSAgICAgICAgY29sb3JidWZmZXIg
PSBjb250ZXh0LT5nZXRDb2xvcmJ1ZmZlcihtQ29sb3JidWZmZXJIYW5kbGUpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JidWZmZXIqPihyYi0+Z2V0U3RvcmFnZSgpKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0
dXJlKG1Db2xvcmJ1ZmZlckhhbmRsZSktPmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlclR5cGUp
OwotICAgIH0KLQotICAgIGlmIChjb2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+aXNDb2xvcmJ1
ZmZlcigpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbG9yYnVmZmVyOworICAgICAgICByZXR1
cm4gTlVMTDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAotRGVwdGhidWZmZXIgKkZy
YW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlcigpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOwotICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdl
dERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpyYiA9
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgZGVw
dGhidWZmZXItPmlzRGVwdGhidWZmZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNE
ZXB0aGJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVwdGhTdGVuY2lsYnVmZmVyKj4ocmItPmdldFN0b3JhZ2Uo
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0K
LQotICAgIHJldHVybiBOVUxMOwogfQogCi1TdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0
U3RlbmNpbGJ1ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVu
Y2lsYnVmZmVyKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7Ci0gICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5j
aWxidWZmZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqcmIgPSBt
U3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBz
dGVuY2lsYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiBy
Yi0+aXNTdGVuY2lsYnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZl
cjsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERlcHRoU3RlbmNpbGJ1ZmZlcio+KHJiLT5n
ZXRTdG9yYWdlKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlclR5cGUoKQpAQCAtMjEyLDI1ICsyNDAsNTYgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9y
YnVmZmVySGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVySGFuZGxlOworICAgIHJl
dHVybiBtQ29sb3JidWZmZXJQb2ludGVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6
Z2V0RGVwdGhidWZmZXJIYW5kbGUoKQogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJIYW5kbGU7
CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKTsKIH0KIAogR0x1aW50IEZyYW1l
YnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxi
dWZmZXJIYW5kbGU7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpOwogfQog
Ci1HTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCitib29sIEZyYW1lYnVmZmVyOjpo
YXNTdGVuY2lsKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0
KCk7CisgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAg
ICAgRGVwdGhTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1
ZmZlcigpOwogCisgICAgICAgIGlmIChzdGVuY2lsYnVmZmVyT2JqZWN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+
IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJh
bWVidWZmZXI6OmlzTXVsdGlzYW1wbGUoKQoreworICAgIC8vIElmIHRoZSBmcmFtZWJ1ZmZlciBp
cyBub3QgY29tcGxldGUsIGF0dGFjaG1lbnQgc2FtcGxlcyBtYXkgYmUgbWlzbWF0Y2hlZCwgYW5k
IGl0CisgICAgLy8gY2Fubm90IGJlIHVzZWQgYXMgYSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlci4g
SWYgaXQgaXMgY29tcGxldGUsIGl0IGlzIHJlcXVpcmVkIHRvCisgICAgLy8gaGF2ZSBhIGNvbG9y
IGF0dGFjaG1lbnQsIGFuZCBhbGwgaXRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBu
dW1iZXIgb2Ygc2FtcGxlcywKKyAgICAvLyBzbyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRo
ZSBjb2xvcmJ1ZmZlciB3aWxsIGluZGljYXRlIHdoZXRoZXIgdGhlIGZyYW1lYnVmZmVyIGlzCisg
ICAgLy8gbXVsdGlzYW1wbGVkLgorICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSAmJiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgPiAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVu
ZXNzKCkKK3sKICAgICBpbnQgd2lkdGggPSAwOwogICAgIGludCBoZWlnaHQgPSAwOworICAgIGlu
dCBzYW1wbGVzID0gLTE7CiAKICAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQog
ICAgIHsKQEAgLTI0NiwxMyArMzA1LDI5IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVu
ZXNzKCkKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1
ZmZlclR5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9y
YnVmZmVyLT5nZXRGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVp
Z2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOworICAgICAgICBzYW1wbGVzID0gY29sb3Ji
dWZmZXItPmdldFNhbXBsZXMoKTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgIH0K
KworICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOworICAgIERlcHRo
U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IE5VTEw7CiAKICAgICBpZiAobURlcHRoYnVm
ZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVm
ZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKyAgICAg
ICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhi
dWZmZXIpCiAgICAgICAgIHsKQEAgLTI3MywxMSArMzQ4LDI4IEBAIEdMZW51bSBGcmFtZWJ1ZmZl
cjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAgICAgfQorCisgICAgICAgIGlmIChz
YW1wbGVzID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZm
ZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9
IGRlcHRoYnVmZmVyLT5nZXRTYW1wbGVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGRlcHRoYnVmZmVyLT5n
ZXRGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAg
U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIo
bVN0ZW5jaWxidWZmZXJIYW5kbGUpOworICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNp
bGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghc3RlbmNpbGJ1ZmZlcikKICAgICAgICAgewpAQCAt
Mjk4LDggKzM5MCw2NiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVO
U0lPTlM7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgc2FtcGxlcyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNh
bXBsZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEVfQU5HTEU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChJc1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChzdGVuY2lsYnVmZmVyLT5nZXRGb3JtYXQoKSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EZXB0
aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCisgICAgeworICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldEZvcm1h
dCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8CisgICAgICAgICAgICBzdGVuY2lsYnVm
ZmVyLT5nZXRGb3JtYXQoKSAhPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAorICAgICAgICAg
ICAgZGVwdGhidWZmZXItPmdldFNlcmlhbCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgp
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JU
RUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEU7Cit9CisKK0RlZmF1bHRGcmFtZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVm
ZmVyICpjb2xvciwgRGVwdGhTdGVuY2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpCit7CisgICAgbUNv
bG9yYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKKyAgICBtRGVwdGhidWZmZXJUeXBlID0g
R0xfUkVOREVSQlVGRkVSOworICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZF
UjsKKworICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KG5ldyBSZW5kZXJidWZmZXIoMCwgY29s
b3IpKTsKKworICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyID0gbmV3
IFJlbmRlcmJ1ZmZlcigwLCBkZXB0aFN0ZW5jaWwpOworICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
c2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7CisgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVy
LnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworfQorCitpbnQgRnJhbWVidWZmZXI6Omdl
dFNhbXBsZXMoKQoreworICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1w
bGVzKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0K
K30KIAorR0xlbnVtIERlZmF1bHRGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK3sKICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7CiB9CisKIH0KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxOSArMTUsMjIgQEAKICNpbmNsdWRl
IDxkM2Q5Lmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFJlbmRl
cmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBT
dGVuY2lsYnVmZmVyOworY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwogCiBjbGFzcyBGcmFtZWJ1
ZmZlcgogewogICBwdWJsaWM6CiAgICAgRnJhbWVidWZmZXIoKTsKIAotICAgIH5GcmFtZWJ1ZmZl
cigpOworICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7CiAKICAgICB2b2lkIHNldENvbG9yYnVm
ZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwogICAgIHZvaWQgc2V0RGVwdGhi
dWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7CkBAIC00MSwxMCArNDQsMTEg
QEAgY2xhc3MgRnJhbWVidWZmZXIKIAogICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKyAgICB1
bnNpZ25lZCBpbnQgZ2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpOwogCiAgICAgQ29sb3JidWZmZXIg
KmdldENvbG9yYnVmZmVyKCk7Ci0gICAgRGVwdGhidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7Ci0g
ICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5j
aWxidWZmZXIoKTsKIAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVu
dW0gZ2V0RGVwdGhidWZmZXJUeXBlKCk7CkBAIC01NCwyMCArNTgsMzkgQEAgY2xhc3MgRnJhbWVi
dWZmZXIKICAgICBHTHVpbnQgZ2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICBHTHVpbnQgZ2V0
U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwogCi0gICAgR0xlbnVtIGNvbXBsZXRlbmVzcygpOworICAg
IGJvb2wgaGFzU3RlbmNpbCgpOworICAgIGJvb2wgaXNNdWx0aXNhbXBsZSgpOworICAgIGludCBn
ZXRTYW1wbGVzKCk7CiAKLSAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
RnJhbWVidWZmZXIpOworICAgIHZpcnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwogCi0gICAg
R0x1aW50IG1Db2xvcmJ1ZmZlckhhbmRsZTsKKyAgcHJvdGVjdGVkOgogICAgIEdMZW51bSBtQ29s
b3JidWZmZXJUeXBlOworICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVm
ZmVyUG9pbnRlcjsKIAotICAgIEdMdWludCBtRGVwdGhidWZmZXJIYW5kbGU7CiAgICAgR0xlbnVt
IG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVw
dGhidWZmZXJQb2ludGVyOwogCi0gICAgR0x1aW50IG1TdGVuY2lsYnVmZmVySGFuZGxlOwogICAg
IEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVm
ZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOworCisgICAgUmVuZGVyYnVmZmVyICpsb29rdXBS
ZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OworfTsKKworY2xh
c3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoK
KyAgICBEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yLCBEZXB0aFN0ZW5jaWxi
dWZmZXIgKmRlcHRoU3RlbmNpbCk7CisKKyAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3Mo
KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJh
bWVidWZmZXIpOwogfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJf
SF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIFVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHMKIHsKIH0KIAotUHJv
Z3JhbTo6UHJvZ3JhbSgpCitQcm9ncmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdl
ciwgR0x1aW50IGhhbmRsZSkgOiBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhh
bmRsZSkKIHsKICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgIG1WZXJ0ZXhTaGFkZXIg
PSBOVUxMOwpAQCAtNjIsNiArNjIsOCBAQCBQcm9ncmFtOjpQcm9ncmFtKCkKIAogICAgIG1EZWxl
dGVTdGF0dXMgPSBmYWxzZTsKIAorICAgIG1SZWZDb3VudCA9IDA7CisKICAgICBtU2VyaWFsID0g
aXNzdWVTZXJpYWwoKTsKIH0KIApAQCAtNzEsMTIgKzczLDEyIEBAIFByb2dyYW06On5Qcm9ncmFt
KCkKIAogICAgIGlmIChtVmVydGV4U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVy
dGV4U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwog
ICAgIH0KIAogICAgIGlmIChtRnJhZ21lbnRTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAg
IG1GcmFnbWVudFNoYWRlci0+ZGV0YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVs
ZWFzZSgpOwogICAgIH0KIH0KIApAQCAtOTAsNyArOTIsNyBAQCBib29sIFByb2dyYW06OmF0dGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlCiAgICAgICAgIH0KIAogICAgICAgICBtVmVydGV4U2hhZGVy
ID0gKFZlcnRleFNoYWRlciopc2hhZGVyOwotICAgICAgICBtVmVydGV4U2hhZGVyLT5hdHRhY2go
KTsKKyAgICAgICAgbVZlcnRleFNoYWRlci0+YWRkUmVmKCk7CiAgICAgfQogICAgIGVsc2UgaWYg
KHNoYWRlci0+Z2V0VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7CkBAIC0xMDAs
NyArMTAyLDcgQEAgYm9vbCBQcm9ncmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAg
ICAgICB9CiAKICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFk
ZXI7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+YXR0YWNoKCk7CisgICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+YWRkUmVmKCk7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIApAQCAt
MTE2LDcgKzExOCw3IEBAIGJvb2wgUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGUK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG1WZXJ0ZXhT
aGFkZXItPmRldGFjaCgpOworICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAg
ICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIGlmIChzaGFkZXItPmdl
dFR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCkBAIC0xMjYsNyArMTI4LDcgQEAgYm9vbCBQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgIG1GcmFnbWVudFNoYWRl
ciA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKQEAgLTExOTUsNiArMTE5
NywxMCBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGJvb2wgc20zID0gY29u
dGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKTsKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2Vt
YW50aWMgPSAoc20zID8gIkNPTE9SIiA6ICJURVhDT09SRCIpOworCiAgICAgbVZlcnRleEhMU0wg
Kz0gInN0cnVjdCBWU19JTlBVVFxuIgogICAgICAgICAgICAgICAgICAgICJ7XG4iOwogCkBAIC0x
MjI4LDEyICsxMjM0LDE3IEBAIGJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICB7CiAg
ICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3Jd
WzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKIAotICAgICAgICBtVmVydGV4SExT
TCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIg
OiBURVhDT09SRCIgKyBzdHIocikgKyAiO1xuIjsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZh
cnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwogICAgIH0KIAogICAgIGlmIChtRnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAi
O1xuIjsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDog
IiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisg
ICAgaWYgKG1WZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAg
ICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwog
ICAgIH0KIAogICAgIG1WZXJ0ZXhITFNMICs9ICJ9O1xuIgpAQCAtMTI2Miw2ICsxMjczLDExIEBA
IGJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAu
NTtcbiIKICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xf
UG9zaXRpb24udztcbiI7CiAKKyAgICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc20zKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9p
bnRTaXplID0gY2xhbXAoZ2xfUG9pbnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BP
SU5UX1NJWkVfUkFOR0VfTUFYX1NNMykgKyAiKTtcbiI7CisgICAgfQorCiAgICAgaWYgKG1GcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCiAgICAgewogICAgICAgICBtVmVydGV4SExTTCAr
PSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CkBAIC0xMzQ1LDcg
KzEzNjEsNyBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCiAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dz
ICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIg
KyBuICsgIiA6IFRFWENPT1JEIiArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyAr
IG4gKyAiO1xuIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTEzNTQsOSArMTM3MCwxNCBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAKICAg
ICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKICAgICB7Ci0gICAgICAgIG1Q
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJl
Z2lzdGVycykgKyAiO1xuIjsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9G
cmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsK
KyAgICB9CisKKyAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20z
KQorICAgIHsKKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3Jk
IDogVEVYQ09PUkQwO1xuIjsKICAgICB9Ci0gICAgICAgIAorCiAgICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNGcm9udEZhY2luZykKICAgICB7CiAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdCB2RmFjZSA6IFZGQUNFO1xuIjsKQEAgLTEzNzUsMTIgKzEzOTYsMTcgQEAgYm9vbCBQ
cm9ncmFtOjpsaW5rVmFyeWluZ3MoKQogICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQogICAgIHsKICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEu
MCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAg
Z2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfV2luZG93
LnggKyBkeF9XaW5kb3cuejtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1dpbmRvdy55ICsgZHhf
V2luZG93Lnc7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueCA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9WaWV3cG9ydC54ICsgZHhfVmlld3Bv
cnQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlu
cHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnkgKyBkeF9WaWV3cG9ydC53
O1xuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCiAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7CiAgICAgfQog
CisgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7
CisgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkID0gZmxvYXQyKGlucHV0
LmdsX1BvaW50Q29vcmQueCwgMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55KTtcbiI7CisgICAg
fQorCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKICAgICB7CiAg
ICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGlu
ZXMgfHwgKGR4X0Zyb250Q0NXID8gKGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2Ug
PD0gMC4wKSk7XG4iOwpAQCAtMTQ0NywxMCArMTQ3Myw2IEBAIHZvaWQgUHJvZ3JhbTo6bGluaygp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29u
dGV4dCgpOwotICAgIGNvbnN0IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5nZXRWZXJ0
ZXhTaGFkZXJQcm9maWxlKCk7Ci0gICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4
dC0+Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7Ci0KICAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50
U2hhZGVyLT5nZXRITFNMKCk7CiAgICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRI
TFNMKCk7CiAKQEAgLTE0NTksNiArMTQ4MSwxMCBAQCB2b2lkIFByb2dyYW06OmxpbmsoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQo
KTsKKyAgICBjb25zdCBjaGFyICp2ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFk
ZXJNb2RlbDMoKSA/ICJ2c18zXzAiIDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQ
cm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBz
XzJfMCI7CisKICAgICBJRDNEWEJ1ZmZlciAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5
KG1WZXJ0ZXhITFNMLmNfc3RyKCksIHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsK
ICAgICBJRDNEWEJ1ZmZlciAqcGl4ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExT
TC5jX3N0cigpLCBwaXhlbFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKIApAQCAtMTUwMyw3
ICsxNTI5LDcgQEAgdm9pZCBQcm9ncmFtOjpsaW5rKCkKICAgICAgICAgICAgIG1EZXB0aFJhbmdl
RmFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1
ZSk7CiAgICAgICAgICAgICBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZ2xfRGVwdGhSYW5nZS5kaWZmIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhEZXB0aExv
Y2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIsIHRydWUpOwotICAgICAgICAg
ICAgbUR4V2luZG93TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1dpbmRvdyIsIHRy
dWUpOworICAgICAgICAgICAgbUR4Vmlld3BvcnRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlv
bigiZHhfVmlld3BvcnQiLCB0cnVlKTsKICAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2Nh
dGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOwogICAg
ICAgICAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJv
bnRDQ1ciLCB0cnVlKTsKICAgICAgICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdl
dFVuaWZvcm1Mb2NhdGlvbigiZHhfUG9pbnRzT3JMaW5lcyIsIHRydWUpOwpAQCAtMjM1NSwxMyAr
MjM4MSwxMyBAQCB2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgewogICAg
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21l
bnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNl
KCk7CiAgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhT
aGFkZXItPmRldGFjaCgpOworICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwog
ICAgICAgICAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
NDEyLDcgKzI0MzgsNyBAQCB2b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAg
bURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSAtMTsKICAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9u
ID0gLTE7CiAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IC0xOwotICAgIG1EeFdpbmRvd0xvY2F0aW9u
ID0gLTE7CisgICAgbUR4Vmlld3BvcnRMb2NhdGlvbiA9IC0xOwogICAgIG1EeEhhbGZQaXhlbFNp
emVMb2NhdGlvbiA9IC0xOwogICAgIG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKICAgICBtRHhQ
b2ludHNPckxpbmVzTG9jYXRpb24gPSAtMTsKQEAgLTI0MzgsNiArMjQ2NCwyNiBAQCBib29sIFBy
b2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QgCiAgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CiB9CiAK
K3ZvaWQgUHJvZ3JhbTo6cmVsZWFzZSgpCit7CisgICAgbVJlZkNvdW50LS07CisKKyAgICBpZiAo
bVJlZkNvdW50ID09IDAgJiYgbURlbGV0ZVN0YXR1cykKKyAgICB7CisgICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0obUhhbmRsZSk7CisgICAgfQorfQorCit2b2lkIFByb2dy
YW06OmFkZFJlZigpCit7CisgICAgbVJlZkNvdW50Kys7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9n
cmFtOjpnZXRSZWZDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZWZDb3VudDsKK30KKwog
dW5zaWduZWQgaW50IFByb2dyYW06OmdldFNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1T
ZXJpYWw7CkBAIC0yNzM3LDkgKzI3ODMsOSBAQCBHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9j
YXRpb24oKSBjb25zCiAgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247CiB9CiAKLUdMaW50IFBy
b2dyYW06OmdldER4V2luZG93TG9jYXRpb24oKSBjb25zdAorR0xpbnQgUHJvZ3JhbTo6Z2V0RHhW
aWV3cG9ydExvY2F0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUR4V2luZG93TG9jYXRpb247
CisgICAgcmV0dXJuIG1EeFZpZXdwb3J0TG9jYXRpb247CiB9CiAKIEdMaW50IFByb2dyYW06Omdl
dER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCkgY29uc3QKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw2ICsyMCw3IEBACiAKIG5hbWVzcGFjZSBnbAogeworY2xhc3MgUmVz
b3VyY2VNYW5hZ2VyOwogY2xhc3MgRnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7
CiAKQEAgLTU1LDcgKzU2LDcgQEAgc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgogY2xhc3MgUHJvZ3Jh
bQogewogICBwdWJsaWM6Ci0gICAgUHJvZ3JhbSgpOworICAgIFByb2dyYW0oUmVzb3VyY2VNYW5h
Z2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAogICAgIH5Qcm9ncmFtKCk7CiAKQEAgLTk3
LDcgKzk4LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIEdMaW50IGdldERlcHRoUmFuZ2VOZWFyTG9j
YXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREZXB0aFJhbmdlRmFyTG9jYXRpb24oKSBjb25z
dDsKICAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXRE
eFdpbmRvd0xvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhWaWV3cG9ydExvY2F0aW9u
KCkgY29uc3Q7CiAgICAgR0xpbnQgZ2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsK
ICAgICBHTGludCBnZXREeEZyb250Q0NXTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXRE
eFBvaW50c09yTGluZXNMb2NhdGlvbigpIGNvbnN0OwpAQCAtMTE5LDYgKzEyMCw5IEBAIGNsYXNz
IFByb2dyYW0KICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKICAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZv
aWQgcmVsZWFzZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwogICAg
IHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigp
IGNvbnN0OwogCkBAIC0yMDQsNyArMjA4LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIEdMaW50IG1E
ZXB0aFJhbmdlTmVhckxvY2F0aW9uOwogICAgIEdMaW50IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247
CiAgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKLSAgICBHTGludCBtRHhXaW5kb3dMb2NhdGlv
bjsKKyAgICBHTGludCBtRHhWaWV3cG9ydExvY2F0aW9uOwogICAgIEdMaW50IG1EeEhhbGZQaXhl
bFNpemVMb2NhdGlvbjsKICAgICBHTGludCBtRHhGcm9udENDV0xvY2F0aW9uOwogICAgIEdMaW50
IG1EeFBvaW50c09yTGluZXNMb2NhdGlvbjsKQEAgLTIxNCw5ICsyMTgsMTQgQEAgY2xhc3MgUHJv
Z3JhbQogICAgIGNoYXIgKm1JbmZvTG9nOwogICAgIGJvb2wgbVZhbGlkYXRlZDsKIAorICAgIHVu
c2lnbmVkIGludCBtUmVmQ291bnQ7CisKICAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKIAogICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CisKKyAgICBSZXNvdXJjZU1hbmFn
ZXIgKm1SZXNvdXJjZU1hbmFnZXI7CisgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CiB9OwogfQog
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUsNzMgKzE1LDE0OCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLXVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXI6Om1DdXJyZW50U2VyaWFsID0gMTsKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJT
dG9yYWdlOjptQ3VycmVudFNlcmlhbCA9IDE7CiAKLVJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVy
KCkKK1JlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVyU3Rv
cmFnZSAqc3RvcmFnZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKLSAgICBtV2lkdGggPSAwOwot
ICAgIG1IZWlnaHQgPSAwOwotICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy8gZGVmYXVsdCBmb3Jt
YXQsIG5lZWRzIHRvIGJlIG9uZSBvZiB0aGUgZXhwZWN0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMK
LSAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKKyAgICBBU1NFUlQoc3RvcmFnZSAhPSBOVUxM
KTsKKyAgICBtU3RvcmFnZSA9IHN0b3JhZ2U7CiB9CiAKIFJlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1
ZmZlcigpCiB7CisgICAgZGVsZXRlIG1TdG9yYWdlOworfQorCitib29sIFJlbmRlcmJ1ZmZlcjo6
aXNDb2xvcmJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5pc0NvbG9yYnVm
ZmVyKCk7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN0b3JhZ2UtPmlzRGVwdGhidWZmZXIoKTsKK30KKworYm9vbCBSZW5kZXJi
dWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5p
c1N0ZW5jaWxidWZmZXIoKTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldFJlbmRlclRhcmdl
dCgpOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5j
aWwoKQoreworICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Cit9CisKK2lu
dCBSZW5kZXJidWZmZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2Ut
PmdldFdpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJidWZmZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRIZWlnaHQoKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1
ZmZlcjo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldEZvcm1h
dCgpOworfQorCitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyOjpnZXREM0RGb3JtYXQoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0RDNERm9ybWF0KCk7Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdl
LT5nZXRTZXJpYWwoKTsKK30KKwordm9pZCBSZW5kZXJidWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVy
YnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSkKK3sKKyAgICBBU1NFUlQobmV3U3RvcmFnZSAhPSBO
VUxMKTsKKworICAgIGRlbGV0ZSBtU3RvcmFnZTsKKyAgICBtU3RvcmFnZSA9IG5ld1N0b3JhZ2U7
Cit9CisKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQoreworICAg
IG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgpOworfQorCitSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpCit7CiB9CiAKLWJvb2wgUmVuZGVyYnVmZmVyOjppc0NvbG9yYnVm
ZmVyKCkKK2Jvb2wgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZl
cigpCitib29sIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzRGVwdGhidWZmZXIoKSBjb25zdAogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZl
cigpCitib29sIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXRSZW5kZXJUYXJnZXQoKQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLUlEaXJlY3Qz
RFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCitJRGlyZWN0M0RTdXJm
YWNlOSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1
cm4gTlVMTDsKIH0KIAotaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKQoraW50IFJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OmdldFdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVdpZHRoOwogfQog
Ci1pbnQgUmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKQoraW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6
OmdldEhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1IZWlnaHQ7CiB9CiAKLXZvaWQgUmVu
ZGVyYnVmZmVyOjpzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgUmVuZGVyYnVm
ZmVyU3RvcmFnZTo6c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgbVdpZHRo
ID0gd2lkdGg7CiAgICAgbUhlaWdodCA9IGhlaWdodDsKIH0KIAotCi1HTGVudW0gUmVuZGVyYnVm
ZmVyOjpnZXRGb3JtYXQoKQorR0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1Gb3JtYXQ7CiB9CiAKLXVuc2lnbmVkIGludCBSZW5kZXJi
dWZmZXI6OmdldFNlcmlhbCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUQzREZvcm1hdDsKK30KKworR0xz
aXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVNhbXBsZXM7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRT
ZXJpYWwoKSBjb25zdAogewogICAgIHJldHVybiBtU2VyaWFsOwogfQogCi11bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyOjppc3N1ZVNlcmlhbCgpCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwogfQpA
QCAtOTYsMzYgKzE3MSw1OSBAQCBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoSURpcmVjdDNEU3Vy
ZmFjCiAgICAgICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwogCiAgICAg
ICAgIHNldFNpemUoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAg
ICAgIG1EM0RGb3JtYXQgPSBkZXNjcmlwdGlvbi5Gb3JtYXQ7CisgICAgICAgIG1TYW1wbGVzID0g
ZXMyZHg6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2Ft
cGxlVHlwZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EM0RGb3JtYXQgPSBE
M0RGTVRfVU5LTk9XTjsKKyAgICAgICAgbVNhbXBsZXMgPSAwOwogICAgIH0KLQogfQogCi1Db2xv
cmJ1ZmZlcjo6Q29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
KQorQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOwogCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBlczJk
eDo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZB
TFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1h
dCA9IGVzMmR4OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisgICAgaW50IHN1
cHBvcnRlZFNhbXBsZXMgPSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVz
KHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CiAKLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIGlmIChzdXBw
b3J0ZWRTYW1wbGVzID09IC0xKQogICAgIHsKICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0
LCByZXF1ZXN0ZWRGb3JtYXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBw
b3J0ZWRTYW1wbGVzKSwgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgICAg
ICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICB9CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7
CiAgICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1Gb3JtYXQgPSBmb3Jt
YXQ7CisgICAgICAgIG1EM0RGb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgIG1TYW1w
bGVzID0gc3VwcG9ydGVkU2FtcGxlczsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAg
c2V0U2l6ZSgwLCAwKTsKICAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OworICAgICAgICBtRDNE
Rm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAgICAgIG1TYW1wbGVzID0gMDsKICAgICB9CiB9
CiAKQEAgLTEzNywxMiArMjM1LDEyIEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogICAg
IH0KIH0KIAotYm9vbCBDb2xvcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCitib29sIENvbG9yYnVm
ZmVyOjppc0NvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotR0x1
aW50IENvbG9yYnVmZmVyOjpnZXRSZWRTaXplKCkKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVk
U2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMTU1LDcg
KzI1Myw3IEBAIEdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKK0dMdWludCBDb2xvcmJ1
ZmZlcjo6Z2V0R3JlZW5TaXplKCkgY29uc3QKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAg
ICB7CkBAIC0xNjgsNyArMjY2LDcgQEAgR0x1aW50IENvbG9yYnVmZmVyOjpnZXRHcmVlblNpemUo
KQogICAgIHJldHVybiAwOwogfQogCi1HTHVpbnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkK
K0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAogewogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTE4MSw3ICsyNzksNyBAQCBHTHVpbnQgQ29sb3JidWZmZXI6
OmdldEJsdWVTaXplKCkKICAgICByZXR1cm4gMDsKIH0KIAotR0x1aW50IENvbG9yYnVmZmVyOjpn
ZXRBbHBoYVNpemUoKQorR0x1aW50IENvbG9yYnVmZmVyOjpnZXRBbHBoYVNpemUoKSBjb25zdAog
ewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTE5OSw3ICsyOTcsNyBAQCBJRGly
ZWN0M0RTdXJmYWNlOSAqQ29sb3JidWZmZXI6OmdldFJlbmRlCiAgICAgcmV0dXJuIG1SZW5kZXJU
YXJnZXQ7CiB9CiAKLURlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVwdGhTdGVuY2lsKSA6IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQorRGVwdGhTdGVuY2ls
YnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNp
bCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCkKIHsKICAgICBpZiAoZGVwdGhTdGVuY2ls
KQogICAgIHsKQEAgLTIwOSwxOCArMzA3LDM0IEBAIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJ
RGlyZWN0M0RTdXJmYWMKICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlv
bik7CiAKICAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVp
Z2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAvLyBJZiB0aGUg
cmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qg
b25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQorICAgICAgICBtRm9ybWF0ID0gKGRlc2NyaXB0aW9uLkZvcm1hdCA9PSBEM0RGTVRfRDE2ID8g
R0xfREVQVEhfQ09NUE9ORU5UMTYgOiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyk7CisgICAgICAg
IG1TYW1wbGVzID0gZXMyZHg6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0
aW9uLk11bHRpU2FtcGxlVHlwZSk7IAorICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24u
Rm9ybWF0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRDNERm9ybWF0ID0gRDNE
Rk1UX1VOS05PV047IAorICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCi1EZXB0aGJ1
ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRGVwdGhTdGVuY2lsYnVm
ZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNh
bXBsZXMpCiB7CiAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CiAK
ICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIEQz
RE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7CisgICAgCisg
ICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZNVF9EMjRTOCwgc2FtcGxlcyk7CisKKyAgICBpZiAoc3VwcG9ydGVkU2Ft
cGxlcyA9PSAtMSkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIGVzMmR4
OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxT
RSwgJm1EZXB0aFN0ZW5jaWwsIDApOwogCiAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICB7CkBAIC0yMzQsMTgg
KzM0OCwyMCBAQCBEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgCiAgICAg
aWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewogICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5k
ZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUg
b2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisg
ICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgICAgbUQzREZv
cm1hdCA9IEQzREZNVF9EMjRTODsKKyAgICAgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVz
OwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICBzZXRTaXplKDAsIDApOwogICAgICAg
ICBtRm9ybWF0ID0gR0xfUkdCQTQ7IC8vZGVmYXVsdCBmb3JtYXQKKyAgICAgICAgbUQzREZvcm1h
dCA9IEQzREZNVF9VTktOT1dOOworICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCi1E
ZXB0aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3Rl
bmNpbGJ1ZmZlcigpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewpAQCAtMjUzLDEy
ICszNjksMTcgQEAgRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCiAgICAgfQogfQogCi1ib29s
IERlcHRoYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkKK2Jvb2wgRGVwdGhTdGVuY2lsYnVmZmVyOjpp
c0RlcHRoYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXB0
aFN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLUdMdWludCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkKK0dMdWludCBEZXB0
aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1EZXB0aFN0
ZW5jaWwpCiAgICAgewpAQCAtMjcxLDg1ICszOTIsOTMgQEAgR0x1aW50IERlcHRoYnVmZmVyOjpn
ZXREZXB0aFNpemUoKQogICAgIHJldHVybiAwOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqRGVw
dGhidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCitHTHVpbnQgRGVwdGhTdGVuY2lsYnVmZmVyOjpn
ZXRTdGVuY2lsU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgewor
ICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1EZXB0aFN0ZW5j
aWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldFN0
ZW5jaWxTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK0lEaXJlY3QzRFN1cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKLVN0ZW5jaWxidWZmZXI6OlN0
ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVu
Y2lsKGRlcHRoU3RlbmNpbCkKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCiB7
CiAgICAgaWYgKGRlcHRoU3RlbmNpbCkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+QWRk
UmVmKCk7Ci0KLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBk
ZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBzZXRTaXplKGRl
c2NyaXB0aW9uLldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOwotICAgICAgICBtRm9ybWF0ID0g
R0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUg
cXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBm
b3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01Q
T05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0
aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMg
Zm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9CiB9CiAKLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxi
dWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZl
cih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQogewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOwotCi0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdo
dCwgRDNERk1UX0QyNFM4LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0
ZW5jaWwsIDApOwotCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8
fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICBpZiAoZ2V0RGVwdGhTdGVuY2lsKCkpCiAg
ICAgewotICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47
CisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRl
cmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBv
ZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAg
ICB9Cit9CiAKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworRGVwdGhidWZmZXI6On5E
ZXB0aGJ1ZmZlcigpCit7Cit9CiAKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKK2Jvb2wgRGVwdGhi
dWZmZXI6OmlzRGVwdGhidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIERlcHRoYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworU3RlbmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCit7Cisg
ICAgaWYgKGRlcHRoU3RlbmNpbCkKICAgICB7Ci0gICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdo
dCk7CiAgICAgICAgIG1Gb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRl
cmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0
aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgc2V0U2l6ZSgwLCAwKTsKICAgICAgICAgbUZvcm1hdCA9
IEdMX1JHQkE0OyAvL2RlZmF1bHQgZm9ybWF0CiAgICAgfQogfQogCi1TdGVuY2lsYnVmZmVyOjp+
U3RlbmNpbGJ1ZmZlcigpCitTdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwg
aW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwg
aGVpZ2h0LCBzYW1wbGVzKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIGlmIChnZXRE
ZXB0aFN0ZW5jaWwoKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
KyAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJZiB0aGUgcmVuZGVyYnVm
ZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2
YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQogICAgIH0KIH0KIAot
R0x1aW50IFN0ZW5jaWxidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkKK1N0ZW5jaWxidWZmZXI6On5T
dGVuY2lsYnVmZmVyKCkKIHsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAg
IEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzY3JpcHRpb24pOwotCi0gICAgICAgIHJldHVybiBlczJkeDo6R2V0U3RlbmNpbFNp
emUoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKIH0KIAotYm9v
bCBTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQorYm9vbCBTdGVuY2lsYnVmZmVyOjpp
c0RlcHRoYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5j
aWwoKQorYm9vbCBTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAg
IHJldHVybiBtRGVwdGhTdGVuY2lsOworICAgIHJldHVybiB0cnVlOwogfQogfQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQsOCArNCw5IEBACiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAotLy8gUmVuZGVyYnVmZmVyLmg6IERl
ZmluZXMgdGhlIHZpcnR1YWwgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQK
LS8vIGNsYXNzZXMgQ29sb3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJ
bXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgorLy8gUmVuZGVyYnVmZmVyLmg6IERlZmluZXMgdGhl
IHdyYXBwZXIgY2xhc3MgZ2w6OlJlbmRlcmJ1ZmZlciwgYXMgd2VsbCBhcyB0aGUKKy8vIGNsYXNz
IGhpZXJhcmNoeSB1c2VkIHRvIHN0b3JlIGl0cyBjb250ZW50czogUmVuZGVyYnVmZmVyU3RvcmFn
ZSwgQ29sb3JidWZmZXIsCisvLyBEZXB0aFN0ZW5jaWxidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBT
dGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgogLy8gb2JqZWN0cyBhbmQg
cmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBw
YWdlIDEwOC4KIAogI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCkBAIC0xNiwyNiAr
MTcsMzMgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oIgogCiBuYW1lc3BhY2Ug
Z2wKIHsKLWNsYXNzIFJlbmRlcmJ1ZmZlcgorCisvLyBBIGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5k
ZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQgd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
CisvLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZpYyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hl
dGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlzCisvLyBjb2xvdXIgZGVwdGgsIHN0ZW5jaWwgb3Ig
cGFja2VkIGRlcHRoL3N0ZW5jaWwuCitjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXJTdG9yYWdlKCk7CiAK
LSAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXIoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJT
dG9yYWdlKCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29sb3JidWZmZXIoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOwotICAgIHZpcnR1YWwgYm9vbCBpc1N0ZW5jaWxi
dWZmZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb2xvcmJ1ZmZlcigpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU3Rl
bmNpbGJ1ZmZlcigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0
UmVuZGVyVGFyZ2V0KCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhT
dGVuY2lsKCk7CiAKLSAgICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpOwotICAgIHZpcnR1YWwgaW50
IGdldEhlaWdodCgpOwotICAgIEdMZW51bSBnZXRGb3JtYXQoKTsKKyAgICB2aXJ0dWFsIGludCBn
ZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RG
b3JtYXQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKICAgICB1bnNp
Z25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlU2VyaWFsKCk7CkBAIC00MywxMCArNTEsMTIgQEAgY2xhc3MgUmVuZGVyYnVmZmVyCiAgIHBy
b3RlY3RlZDoKICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBH
TGVudW0gbUZvcm1hdDsKKyAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsKKyAgICBHTHNpemVpIG1T
YW1wbGVzOwogICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOwogCiAgIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlcik7CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBtQ3VycmVudFNlcmlhbDsKIApAQCAtNTQsMjAgKzY0LDUyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZl
cgogICAgIGludCBtSGVpZ2h0OwogfTsKIAotY2xhc3MgQ29sb3JidWZmZXIgOiBwdWJsaWMgUmVu
ZGVyYnVmZmVyCisvLyBSZW5kZXJidWZmZXIgaW1wbGVtZW50cyB0aGUgR0wgcmVuZGVyYnVmZmVy
IG9iamVjdC4KKy8vIEl0J3Mgb25seSBhIHdyYXBwZXIgZm9yIGEgUmVuZGVyYnVmZmVyU3RvcmFn
ZSwgYnV0IHRoZSBpbnRlcm5hbCBvYmplY3QKKy8vIGNhbiBjaGFuZ2Ugd2hlbmV2ZXIgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlIGlzIGNhbGxlZC4KK2NsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1YmxpYyBS
ZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyKEdMdWludCBpZCwg
UmVuZGVyYnVmZmVyU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAgICB+UmVuZGVyYnVmZmVyKCk7CisK
KyAgICBib29sIGlzQ29sb3JidWZmZXIoKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGhidWZmZXIo
KSBjb25zdDsKKyAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworCisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKKworICAgIGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIGludCBn
ZXRIZWlnaHQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Q7CisgICAgRDNE
Rk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpuZXdT
dG9yYWdlKTsKKyAgICBSZW5kZXJidWZmZXJTdG9yYWdlICpnZXRTdG9yYWdlKCkgeyByZXR1cm4g
bVN0b3JhZ2U7IH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXIpOworCisgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqbVN0b3JhZ2U7Cit9Owor
CitjbGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1
YmxpYzoKICAgICBleHBsaWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVy
VGFyZ2V0KTsKLSAgICBDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBm
b3JtYXQpOworICAgIENvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIH5Db2xvcmJ1ZmZlcigpOwogCi0gICAgYm9v
bCBpc0NvbG9yYnVmZmVyKCk7CisgICAgYm9vbCBpc0NvbG9yYnVmZmVyKCkgY29uc3Q7CiAKLSAg
ICBHTHVpbnQgZ2V0UmVkU2l6ZSgpOwotICAgIEdMdWludCBnZXRHcmVlblNpemUoKTsKLSAgICBH
THVpbnQgZ2V0Qmx1ZVNpemUoKTsKLSAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCk7CisgICAgR0x1
aW50IGdldFJlZFNpemUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7
CisgICAgR0x1aW50IGdldEJsdWVTaXplKCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFscGhhU2l6
ZSgpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwog
CkBAIC03OCw0MiArMTIwLDU1IEBAIGNsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1
ZmZlcgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1ZmZlcik7CiB9OwogCi1j
bGFzcyBEZXB0aGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKK2NsYXNzIERlcHRoU3RlbmNp
bGJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAg
ICBEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGV4cGxpY2l0IERlcHRo
U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0
aFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwog
Ci0gICAgfkRlcHRoYnVmZmVyKCk7CisgICAgfkRlcHRoU3RlbmNpbGJ1ZmZlcigpOwogCi0gICAg
Ym9vbCBpc0RlcHRoYnVmZmVyKCk7CisgICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZmZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7CiAKLSAgICBH
THVpbnQgZ2V0RGVwdGhTaXplKCk7CisgICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldERlcHRoU3RlbmNpbCgpOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKERlcHRoYnVmZmVyKTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVw
dGhTdGVuY2lsYnVmZmVyKTsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsK
IH07CiAKLWNsYXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCitjbGFzcyBE
ZXB0aGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0ZW5jaWxidWZmZXIKIHsKICAgcHVibGljOgotICAg
IGV4cGxpY2l0IFN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7
Ci0gICAgU3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGV4cGxpY2l0
IERlcHRoYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOworICAgIERlcHRo
YnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIH5T
dGVuY2lsYnVmZmVyKCk7CisgICAgfkRlcHRoYnVmZmVyKCk7CisKKyAgICBib29sIGlzRGVwdGhi
dWZmZXIoKSBjb25zdDsKKyAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoYnVmZmVyKTsKK307CiAK
LSAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpOworY2xhc3MgU3RlbmNpbGJ1ZmZlciA6IHB1Ymxp
YyBEZXB0aFN0ZW5jaWxidWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFN0ZW5jaWxi
dWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgU3RlbmNpbGJ1ZmZl
cihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAKLSAgICBHTHVpbnQg
Z2V0U3RlbmNpbFNpemUoKTsKKyAgICB+U3RlbmNpbGJ1ZmZlcigpOwogCi0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOworICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpIGNv
bnN0OworICAgIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RlbmNpbGJ1ZmZlcik7Ci0gICAgSURpcmVjdDNE
U3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiB9OwogfQogCkluZGV4OiBBTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
Y3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQCBuYW1lc3BhY2UgZ2wKIHZvaWQgKlNoYWRl
cjo6bUZyYWdtZW50Q29tcGlsZXIgPSBOVUxMOwogdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGls
ZXIgPSBOVUxMOwogCi1TaGFkZXI6OlNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFu
ZGxlKSA6IG1IYW5kbGUoaGFuZGxlKSwgbUNvbnRleHQoY29udGV4dCkKK1NoYWRlcjo6U2hhZGVy
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRs
ZSksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKICAgICBtU291cmNlID0gTlVMTDsKICAg
ICBtSGxzbCA9IE5VTEw7CkBAIC0zNSwyMSArMzUsMjIgQEAgU2hhZGVyOjpTaGFkZXIoQ29udGV4
dCAqY29udGV4dCwgR0x1aW50IAogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICB7CiAgICAg
ICAgICAgICBUQnVpbHRJblJlc291cmNlIHJlc291cmNlczsKLSAgICAgICAgICAgIHJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAgICAgcmVz
b3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlO
R19WRUNUT1JTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAgICAgcmVzb3Vy
Y2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9J
TUFHRV9VTklUUzsKLSAgICAgICAgICAgIHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9
IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOwotICAgICAg
ICAgICAgcmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKKyAgICAg
ICAgICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZSgmcmVzb3VyY2VzKTsKKyAgICAgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOworICAgICAgICAg
ICAgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlM7CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhf
VkFSWUlOR19WRUNUT1JTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJ
bWFnZVVuaXRzID0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgICAgICAgICAg
cmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUzsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOwor
ICAgICAgICAgICAgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsK
IAogICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmdGcmFnbWVudCwgRVNoU3BlY0dMRVMyLCAmcmVzb3VyY2VzKTsKICAgICAgICAgICAgIG1W
ZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3Bl
Y0dMRVMyLCAmcmVzb3VyY2VzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1BdHRhY2hDb3Vu
dCA9IDA7CisgICAgbVJlZkNvdW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CiB9
CiAKQEAgLTE4NywyNCArMTg4LDI0IEBAIGNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCiAg
ICAgcmV0dXJuIG1IbHNsOwogfQogCi12b2lkIFNoYWRlcjo6YXR0YWNoKCkKK3ZvaWQgU2hhZGVy
OjphZGRSZWYoKQogewotICAgIG1BdHRhY2hDb3VudCsrOworICAgIG1SZWZDb3VudCsrOwogfQog
Ci12b2lkIFNoYWRlcjo6ZGV0YWNoKCkKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlKCkKIHsKLSAgICBt
QXR0YWNoQ291bnQtLTsKKyAgICBtUmVmQ291bnQtLTsKIAotICAgIGlmIChtQXR0YWNoQ291bnQg
PT0gMCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRl
U3RhdHVzKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQtPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsK
KyAgICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOwogICAgIH0K
IH0KIAotYm9vbCBTaGFkZXI6OmlzQXR0YWNoZWQoKSBjb25zdAordW5zaWduZWQgaW50IFNoYWRl
cjo6Z2V0UmVmQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBtQXR0YWNoQ291bnQgPiAwOwor
ICAgIHJldHVybiBtUmVmQ291bnQ7CiB9CiAKIGJvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxl
dGlvbigpIGNvbnN0CkBAIC0yNjIsNiArMjYzLDggQEAgdm9pZCBTaGFkZXI6OnBhcnNlVmFyeWlu
Z3MoKQogCiAgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19G
UkFHX0NPT1JEIikgIT0gTlVMTDsKICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHN0cnN0ciht
SGxzbCwgIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNQb2lu
dFNpemUgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX1NJWkUiKSAhPSBOVUxMOworICAg
ICAgICBtVXNlc1BvaW50Q29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX0NPT1JE
IikgIT0gTlVMTDsKICAgICB9CiB9CiAKQEAgLTQxNSw3ICs0MTgsNyBAQCBib29sIFNoYWRlcjo6
Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WZXJ0
ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6
IFNoYWRlcihjb250ZXh0LCBoYW5kbGUpCitWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNv
dXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhh
bmRsZSkKIHsKIH0KIApAQCAtNDc5LDcgKzQ4Miw3IEBAIHZvaWQgVmVydGV4U2hhZGVyOjpwYXJz
ZUF0dHJpYnV0ZXMoKQogICAgIH0KIH0KIAotRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVy
KENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRs
ZSkKK0ZyYWdtZW50U2hhZGVyOjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFn
ZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKIHsKIH0KIApJbmRl
eDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL1NoYWRlci5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxs
aXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgZ2wK
IHsKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgU2hhZGVyCiAgICAgZnJpZW5kIFByb2dyYW07CiAK
ICAgcHVibGljOgotICAgIFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsK
KyAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAog
ICAgIHZpcnR1YWwgflNoYWRlcigpOwogCkBAIC02Myw5ICs2Myw5IEBAIGNsYXNzIFNoYWRlcgog
ICAgIGJvb2wgaXNDb21waWxlZCgpOwogICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKIAotICAg
IHZvaWQgYXR0YWNoKCk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLSAgICBib29sIGlzQXR0YWNoZWQo
KSBjb25zdDsKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworICAgIHVu
c2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwogICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVs
ZXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwogCkBAIC04Miw4ICs4
Miw4IEBAIGNsYXNzIFNoYWRlcgogICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0
IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOwogCiAgICAgY29uc3QgR0x1aW50IG1IYW5k
bGU7Ci0gICAgaW50IG1BdHRhY2hDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVj
dHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KLSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAg
Ly8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBu
byBsb25nZXIgaW4gdXNlCisgICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsgICAgIC8vIE51bWJl
ciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KKyAgICBib29s
IG1EZWxldGVTdGF0dXM7ICAgICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFk
ZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCiAKICAgICBjaGFyICptU291
cmNlOwogICAgIGNoYXIgKm1IbHNsOwpAQCAtOTMsOCArOTMsMTAgQEAgY2xhc3MgU2hhZGVyCiAK
ICAgICBib29sIG1Vc2VzRnJhZ0Nvb3JkOwogICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAg
ICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwogCi0gICAg
Q29udGV4dCAqbUNvbnRleHQ7CisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2Vy
OwogCiAgICAgc3RhdGljIHZvaWQgKm1GcmFnbWVudENvbXBpbGVyOwogICAgIHN0YXRpYyB2b2lk
ICptVmVydGV4Q29tcGlsZXI7CkBAIC0xMjEsNyArMTIzLDcgQEAgY2xhc3MgVmVydGV4U2hhZGVy
IDogcHVibGljIFNoYWRlcgogICAgIGZyaWVuZCBQcm9ncmFtOwogCiAgIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisgICAgVmVydGV4
U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CiAKICAgICB+
VmVydGV4U2hhZGVyKCk7CiAKQEAgLTE0MCw3ICsxNDIsNyBAQCBjbGFzcyBWZXJ0ZXhTaGFkZXIg
OiBwdWJsaWMgU2hhZGVyCiBjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsK
ICAgcHVibGljOgotICAgIEZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBo
YW5kbGUpOworICAgIEZyYWdtZW50U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1
aW50IGhhbmRsZSk7CiAKICAgICB+RnJhZ21lbnRTaGFkZXIoKTsKIApJbmRleDogQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbmFtZXNwYWNlIGdsCiB7
CiAKIFRleHR1cmU6OkltYWdlOjpJbWFnZSgpCi0gIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGly
dHkoZmFsc2UpLCBzdXJmYWNlKE5VTEwpCisgIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHko
ZmFsc2UpLCBzdXJmYWNlKE5VTEwpLCBmb3JtYXQoR0xfTk9ORSkKIHsKIH0KIApAQCAtMzIsMTMg
KzMyLDE2IEBAIFRleHR1cmU6OkltYWdlOjp+SW1hZ2UoKQogICBpZiAoc3VyZmFjZSkgc3VyZmFj
ZS0+UmVsZWFzZSgpOwogfQogCi1UZXh0dXJlOjpUZXh0dXJlKENvbnRleHQgKmNvbnRleHQpIDog
bUNvbnRleHQoY29udGV4dCkKK1RleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50
T2JqZWN0KGlkKQogewogICAgIG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7
CiAgICAgbU1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKICAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7CiAg
ICAgbVdyYXBUID0gR0xfUkVQRUFUOwogCisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0g
MDsKKwogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKICAgICBtRGlydHkgPSB0cnVlOwogICAg
IG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKQEAgLTUxLDcgKzU0LDggQEAgVGV4dHVyZTo6flRleHR1
cmUoKQogCiBCbGl0ICpUZXh0dXJlOjpnZXRCbGl0dGVyKCkKIHsKLSAgICByZXR1cm4gbUNvbnRl
eHQtPmdldEJsaXR0ZXIoKTsKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwor
ICAgIHJldHVybiBjb250ZXh0LT5nZXRCbGl0dGVyKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBv
biBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQpA
QCAtMTczLDcgKzE3NywxNSBAQCBHTHVpbnQgVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKIC8v
IFNlbGVjdHMgYW4gaW50ZXJuYWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1h
Z2UKIEQzREZPUk1BVCBUZXh0dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKLSAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQpCisgICAgeworICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Cisg
ICAgfQogfQogCiBpbnQgVGV4dHVyZTo6aW1hZ2VQaXRjaChjb25zdCBJbWFnZSAmaW1nKSBjb25z
dApAQCAtMTg4LDEyNiArMjAwLDI4MiBAQCB2b2lkIFRleHR1cmU6OmxvYWRJbWFnZURhdGEoR0xp
bnQgeG9mZnNlCiB7CiAgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRo
LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7CiAKKyAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICB7CisgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICBsb2FkQWxwaGFJbWFnZURhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0U6CisgICAgICAgIGxvYWRMdW1pbmFuY2VJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZFJHQlVC
eXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAgIGxvYWRSR0I1
NjVJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5
dGVJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICBsb2FkUkdC
QTQ0NDRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgICBsb2Fk
UkdCQTU1NTFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9h
ZEJHUkFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVy
ZTo6bG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworICAgIAogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UxNiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzb3VyY2UpOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7CisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZTo6bG9hZEx1bWluYW5jZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIHI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGc7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGE7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2Vb
eF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAgICB9CisgICAg
fQorfQogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBhID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgICAgIHIgPSAwOwotICAgICAgICAgICAgICAgIGcgPSAwOwotICAgICAgICAg
ICAgICAgIGIgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICAgICAgZyA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBiID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgICAgIGEgPSAweEZGOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICAgIHIgPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGcgPSBzb3VyY2VbMip4KzBdOwotICAgICAg
ICAgICAgICAgIGIgPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGEgPSBzb3VyY2Vb
Mip4KzFdOwotICAgICAgICAgICAgICAgIGJyZWFrOwordm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5h
bmNlQWxwaGFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
LSAgICAgICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAg
ICAgICAgICBnID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBz
b3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
CisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhv
ZmZzZXQgKiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IHNvdXJjZVsyKngrMV07CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4
XTsKK3ZvaWQgVGV4dHVyZTo6bG9hZFJHQlVCeXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhID0gMHhGRjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFG
KSA+PiAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3RTApID4+
IDMpIHwgKChyZ2JhICYgMHgwN0UwKSA+PiA5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIg
PSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3ggKiAzICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBz
b3VyY2VbeCAqIDMgKyAxXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4
ICogMyArIDBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAg
fQorICAgIH0KK30KIAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cit2b2lkIFRleHR1cmU6
OmxvYWRSR0I1NjVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAotICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4ICogNCArIDBdOwotICAgICAgICAgICAgICAg
ICAgICBnID0gc291cmNlW3ggKiA0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBzb3Vy
Y2VbeCAqIDQgKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4ICogNCArIDNd
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQg
KiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgw
MDFGKSA+PiAyKTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdF
MCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOworICAgICAgICAgICAgZGVzdFs0ICog
eCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMp
OworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQorICAgIH0K
K30KIAotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80Ogot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCByZ2JhID0gc291cmNlMTZbeF07Cit2b2lkIFRleHR1cmU6OmxvYWRSR0JBVUJ5dGVJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwor
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdi
YSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYg
MHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4g
MTIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlW3ggKiA0ICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSBzb3VyY2VbeCAqIDQgKyAwXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJj
ZVt4ICogNCArIDNdOworICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsK
K3ZvaWQgVGV4dHVyZTo6bG9hZFJHQkE0NDQ0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0g
TlVMTDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4
RkYgOiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDAzRSkgPDwg
MikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9
ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5
ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAo
KHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAw
eDBGMDApID4+IDgpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhG
MDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4g
MCk7CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQordm9p
ZCBUZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxM
OwogCi0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBiOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gZzsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHI7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBhOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0Up
ID4+IDMpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+
PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Cisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0
dXJlOjpsb2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIG1lbWNweShkZXN0
LCBzb3VyY2UsIHdpZHRoKjQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpjcmVhdGVTdXJm
YWNlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBJbWFnZSAq
aW1nKQoreworICAgIElEaXJlY3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAKICAgICBpZiAod2lkdGggIT0g
MCAmJiBoZWlnaHQgIT0gMCkKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2
aWNlKCktPkNyZWF0ZU9mZnNjcmVlblBsYWluU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBzZWxlY3RG
b3JtYXQoZm9ybWF0KSwgRDNEUE9PTF9TWVNURU1NRU0sICZuZXdTdXJmYWNlLCBOVUxMKTsKKyAg
ICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRo
ID0gd2lkdGg7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpICYmICh3aWR0aCAlIDQgIT0gMCB8fCBoZWlnaHQg
JSA0ICE9IDApKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlzTXVsdDQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGludCB1cHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgh
aXNNdWx0NCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9
IDE7CisgICAgICAgICAgICAgICAgcmVxdWVzdEhlaWdodCA8PD0gMTsKKyAgICAgICAgICAgICAg
ICB1cHNhbXBsZUNvdW50Kys7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQg
PT0gMCAmJiByZXF1ZXN0SGVpZ2h0ICUgNCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaXNNdWx0NCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKKyAgICAg
ICAgfQorCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1
cmUocmVxdWVzdFdpZHRoLCByZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBz
ZWxlY3RGb3JtYXQoZm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RQT09MX1NZU1RFTU1FTSwgJm5ld1RleHR1cmUsIE5VTEwpOwog
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAg
ICAgICAgIH0KKworICAgICAgICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0Zl
dGNoLCAmbmV3U3VyZmFjZSk7CisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKICAgICB9
CiAKICAgICBpZiAoaW1nLT5zdXJmYWNlKSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKQEAgLTMx
NiwxOCArNDg0LDIzIEBAIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0wK
ICAgICBpbWctPndpZHRoID0gd2lkdGg7CiAgICAgaW1nLT5oZWlnaHQgPSBoZWlnaHQ7CiAgICAg
aW1nLT5mb3JtYXQgPSBmb3JtYXQ7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAg
ICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKIAotICAgIGlmIChw
aXhlbHMgIT0gTlVMTCAmJiBuZXdTdXJmYWNlICE9IE5VTEwpCisgICAgaWYgKHBpeGVscyAhPSBO
VUxMICYmIGltZy0+c3VyZmFjZSAhPSBOVUxMKQogICAgIHsKICAgICAgICAgRDNETE9DS0VEX1JF
Q1QgbG9ja2VkOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0
KCZsb2NrZWQsIE5VTEwsIDApOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFj
ZS0+TG9ja1JlY3QoJmxvY2tlZCwgTlVMTCwgMCk7CiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKIAogICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICAgICAgbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICAgICAgaW1n
LT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbWctPmRpcnR5
ID0gdHJ1ZTsKQEAgLTMzNiw5ICs1MDksMzYgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNp
emVpIHdpZHRoLCBHTAogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0
dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJl
OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICpp
bWcpCiB7Ci0gICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsg
eW9mZnNldCA+IGltZy0+aGVpZ2h0KSByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgY3JlYXRlU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7CisKKyAgICBpZiAo
cGl4ZWxzICE9IE5VTEwgJiYgaW1nLT5zdXJmYWNlICE9IE5VTEwpCisgICAgeworICAgICAgICBE
M0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJm
YWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgbWVtY3B5KGxvY2tlZC5wQml0cywgcGl4ZWxzLCBpbWFnZVNpemUpOwor
ICAgICAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRy
dWU7Cit9CisKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2Ug
KmltZykKK3sKKyAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQg
KyB5b2Zmc2V0ID4gaW1nLT5oZWlnaHQpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKICAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3Qo
JmxvY2tlZCwgTlVMTCwgMCk7CkBAIC0zNTIsNiArNTUyLDQ3IEBAIHZvaWQgVGV4dHVyZTo6c3Vi
SW1hZ2UoR0xpbnQgeG9mZnNldCwgR0wKICAgICB9CiAKICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMs
IEltYWdlICppbWcpCit7CisgICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwg
aGVpZ2h0ICsgeW9mZnNldCA+IGltZy0+aGVpZ2h0KQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Zm9ybWF0ICE9IGdldEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUkVDVCB1cGRh
dGVSZWdpb247CisgICAgdXBkYXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OworICAgIHVwZGF0ZVJl
Z2lvbi5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKKyAgICB1cGRhdGVSZWdpb24uYm90dG9tID0g
eW9mZnNldCArIGhlaWdodDsKKyAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsKKworICAg
IEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFj
ZS0+TG9ja1JlY3QoJmxvY2tlZCwgJnVwZGF0ZVJlZ2lvbiwgMCk7CisKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAg
ICAgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwg
Zm9ybWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBpbWFnZVNpemUgLyBpbnB1dFBpdGNoOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gp
LCAodm9pZCopKChCWVRFKilwaXhlbHMgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwor
ICAgICAgICB9CisgICAgICAgIGltZy0+c3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KKwor
ICAgIGltZy0+ZGlydHkgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQpAQCAtNDQyLDcgKzY4Myw3IEBAIGlu
dCBUZXh0dXJlOjpsZXZlbENvdW50KCkgY29uc3QKICAgICByZXR1cm4gbUJhc2VUZXh0dXJlID8g
bUJhc2VUZXh0dXJlLT5HZXRMZXZlbENvdW50KCkgOiAwOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1
cmUyRChDb250ZXh0ICpjb250ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK1RleHR1cmUyRDo6VGV4
dHVyZTJEKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsK
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7CkBAIC00NjQsNiArNzA1LDExIEBAIEdMZW51
bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7
CiB9CiAKK0dMZW51bSBUZXh0dXJlMkQ6OmdldEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1JbWFnZUFycmF5WzBdLmZvcm1hdDsKK30KKwogLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hl
Y2sgdGV4dHVyZSBjb25zaXN0ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBj
b21wbGV0ZSB0ZXh0dXJlCiAvLyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRl
eEltYWdlKS4gV2UgaGF2ZSBubyB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVu
dCBsZXZlbHMuCiAvLyBDYWxsIHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRl
eHR1cmUgbXVzdCBiZSBkZWZpbmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBo
ZWlnaHQuCkBAIC01MjIsNiArNzY4LDEzIEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGlu
dCBsZXZlbCwgR0wKICAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKIH0K
IAordm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2
ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBw
aXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOworfQorCiB2b2lkIFRleHR1cmUyRDo6Y29tbWl0
UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5z
dXJmYWNlICE9IE5VTEwpOwpAQCAtNTU5LDE3ICs4MTIsMzEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNv
bW1pdFJlY3QoR0xpbnQgbGV2ZWwsIAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7Ci0gICAgY29tbWl0UmVjdChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdl
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29t
bWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQog
fQogCi12b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZl
clN0b3JhZ2UgKnNvdXJjZSkKIHsKICAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCkpCiAgICAgewogICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwogICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgfQogCiAg
ICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkp
CiAgICAgewpAQCAtNTkxLDcgKzg1OCw3IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xp
bnQgbGV2ZWwsIEcKICAgICBtSW1hZ2VBcnJheVtsZXZlbF0uZm9ybWF0ID0gaW50ZXJuYWxGb3Jt
YXQ7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpj
b3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXJTdG9yYWdlICpzb3VyY2UpCiB7CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFy
cmF5W2xldmVsXS53aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LmhlaWdodCkKICAgICB7CkBAIC02ODksNiArOTU2LDExIEBAIGJvb2wgVGV4dHVyZTJEOjppc0Nv
bXBsZXRlKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlMkQ6Omlz
Q29tcHJlc3NlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3JtYXQo
KSk7Cit9CisKIC8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJv
bSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKlRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC04NzEsMTYg
KzExNDMsMTcgQEAgdm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiAgICAgfQogfQog
Ci1Db2xvcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQor
UmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCiB7
CiAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVM
TCk7CiAgICAgfQogCiAgICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAgICAgewot
ICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0
aGlzLCB0YXJnZXQpOworICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZm
ZXIoaWQoKSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCkpOworICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eS0+YWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlclByb3h5OwpAQCAtODk4LDcgKzExNzEsNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJUCiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotVGV4
dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShj
b250ZXh0KQorVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0
dXJlKGlkKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKIApAQCAtOTI3LDYgKzEyMDAsMTEgQEAg
R0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAogICAgIHJldHVybiBHTF9U
RVhUVVJFX0NVQkVfTUFQOwogfQogCitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEZvcm1hdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdDsKK30KKwogdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7
CiAgICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKQEAgLTk1Nyw2ICsxMjM1LDEz
IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCAKICAgICBzZXRJbWFn
ZSg1LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwogfQogCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRD
b21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSh3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7Cit9CisKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bW1pdFJlY3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBpbnQg
ZmFjZSA9IGZhY2VJbmRleChmYWNlVGFyZ2V0KTsKQEAgLTk5NCw4ICsxMjc5LDE4IEBAIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGYKIAogdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQog
ewotICAgIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNl
SW5kZXgoZmFjZSldW2xldmVsXSk7Ci0gICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSkpCisgICAg
eworICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpz
dWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxd
KSkKKyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUg
b2JqZWN0IGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBh
Z2UgODEuCkBAIC0xMDY0LDYgKzEzNTksMTEgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21w
bGV0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzQ29tcHJlc3NlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3Jt
YXQoKSk7Cit9CisKIC8vIENvbnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2Ug
ZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGly
ZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAg
LTEyNzgsNyArMTU3OCw3IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVyZShH
TGkKICAgICByZXR1cm4gIXRleHR1cmVPa2F5OwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJi
dWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gZmFj
ZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJj
ZSkKIHsKICAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KGZhY2UpOwogCkBA
IC0xMjg3LDYgKzE1ODcsMTAgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51
bSBmYQogICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKICAgICAgICAgcHVzaFRleHR1
cmUobVRleHR1cmUsIHRydWUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVk
UmVuZGVyVGFyZ2V0KCk7CisgICAgfQogCiAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAK
QEAgLTEzNDAsNyArMTY0NCw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0Q3UKICAgICByZXR1cm4gKFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5VTEw7CiB9CiAK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCiB7CiAgICAgR0xz
aXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0ud2lkdGg7CiAK
QEAgLTEzNTYsNyArMTY2MCw3IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShH
TGVudW0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZ2V0UmVuZGVyVGFyZ2V0KGZh
Y2UpOworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQpAQCAtMTQ0MCwxOCArMTc0NCwxOSBAQCB2b2lkIFRleHR1cmVDdWJl
TWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQogICAgIH0KIH0KIAotQ29sb3JidWZmZXIgKlRleHR1cmVD
dWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorUmVuZGVyYnVmZmVyICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIUlz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CiAKICAg
ICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCiAgICAgewotICAgICAgICBtRmFjZVBy
b3hpZXNbZmFjZV0gPSBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsK
KyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcg
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJv
eGllc1tmYWNlXS0+YWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1GYWNlUHJveGllc1tm
YWNlXTsKQEAgLTE0NzUsNiArMTc4MCwxNiBAQCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6VGV4dHVyCiAgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CiB9CiAKK3ZvaWQgVGV4dHVyZTo6VGV4dHVyZUNv
bG9yYnVmZmVyUHJveHk6OmFkZFJlZigpIGNvbnN0Cit7CisgICAgbVRleHR1cmUtPmFkZFJlZigp
OworfQorCit2b2lkIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpyZWxlYXNlKCkg
Y29uc3QKK3sKKyAgICBtVGV4dHVyZS0+cmVsZWFzZSgpOworfQorCiBJRGlyZWN0M0RTdXJmYWNl
OSAqVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldFJlbmRlclRhcmdldCgpCiB7
CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKQEAgLTE0
ODQsMTQgKzE3OTksMTkgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmU6OlRleHR1cmVDb2xv
cgogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi1pbnQgVGV4dHVyZTo6VGV4dHVyZUNv
bG9yYnVmZmVyUHJveHk6OmdldFdpZHRoKCkKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZm
ZXJQcm94eTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lk
dGgoKTsKIH0KIAotaW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWln
aHQoKQoraW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKSBj
b25zdAogewogICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0SGVpZ2h0KCk7CiB9CiAKK0dMZW51bSBU
ZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUtPmdldEZvcm1hdCgpOworfQorCiB9CkluZGV4OiBBTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNs
YXNzIENvbnRleHQ7CiBjbGFzcyBCbGl0OwogCiBlbnVtCkBAIC0zNCwxMCArMzMsMTAgQEAgZW51
bQogICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9IDEyICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJF
X1NJWkUKIH07CiAKLWNsYXNzIFRleHR1cmUKK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291
bnRPYmplY3QKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoQ29udGV4dCAqY29u
dGV4dCk7CisgICAgZXhwbGljaXQgVGV4dHVyZShHTHVpbnQgaWQpOwogCiAgICAgdmlydHVhbCB+
VGV4dHVyZSgpOwogCkBAIC01NiwxNSArNTUsMTkgQEAgY2xhc3MgVGV4dHVyZQogICAgIEdMdWlu
dCBnZXRXaWR0aCgpIGNvbnN0OwogICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsKIAorICAg
IHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNDb21wbGV0ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkg
Y29uc3QgPSAwOwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7Ci0g
ICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAw
OworICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwogCiAgICAg
Ym9vbCBpc0RpcnR5KCkgY29uc3Q7CiAKKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExF
VEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAvLyBFdmVyeSB0ZXh0dXJl
IHRha2VzIGFuIGlkIGF0IGNyZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVj
YXVzZSBpdCBpcyBuZXZlciByZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCisK
ICAgcHJvdGVjdGVkOgogICAgIGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OwogICAgIGZy
aWVuZCBjbGFzcyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eTsKQEAgLTc0LDEwICs3NywxNCBAQCBj
bGFzcyBUZXh0dXJlCiAgICAgICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpOwogICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgMkQtbGlr
ZSB0ZXh0dXJlIHRhcmdldCAoR0xfVEVYVFVSRV8yRCBvciBvbmUgb2YgdGhlIGN1YmUgZmFjZSB0
YXJnZXRzKQogCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRSZWYoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2UoKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIElEaXJlY3Qz
RFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKIAotICAgICAgICB2aXJ0dWFsIGludCBnZXRX
aWR0aCgpOwotICAgICAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKTsKKyAgICAgICAgdmlydHVh
bCBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OwogCiAgICAg
ICBwcml2YXRlOgogICAgICAgICBUZXh0dXJlICptVGV4dHVyZTsKQEAgLTEwMiwxMyArMTA5LDEw
IEBAIGNsYXNzIFRleHR1cmUKICAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChHTGVu
dW0gZm9ybWF0KTsKICAgICBpbnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25zdDsK
IAotICAgIEdMZW51bSBtTWluRmlsdGVyOwotICAgIEdMZW51bSBtTWFnRmlsdGVyOwotICAgIEdM
ZW51bSBtV3JhcFM7Ci0gICAgR0xlbnVtIG1XcmFwVDsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7Ci0g
ICAgdm9pZCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICBib29s
IHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQgc2V0Q29t
cHJlc3NlZEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAg
ICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CiAKICAgICB2b2lkIG5lZWRS
ZW5kZXJUYXJnZXQoKTsKIApAQCAtMTI4LDQ1ICsxMzIsNzIgQEAgY2xhc3MgVGV4dHVyZQogCiAg
ICAgQmxpdCAqZ2V0QmxpdHRlcigpOwogCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsKKwog
ICAgIHVuc2lnbmVkIGludCBtV2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1IZWlnaHQ7Ci0KLSAg
ICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OworICAgIEdMZW51bSBtTWluRmlsdGVyOworICAgIEdM
ZW51bSBtTWFnRmlsdGVyOworICAgIEdMZW51bSBtV3JhcFM7CisgICAgR0xlbnVtIG1XcmFwVDsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKIAot
ICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIHZvaWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OworCisgICAgdm9pZCBsb2FkQWxwaGFJbWFnZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9p
ZCBsb2FkTHVtaW5hbmNlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUlt
YWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JVQnl0ZUltYWdlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lk
IGxvYWRSR0I1NjVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZFJHQkFVQnl0ZUltYWdlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7Cisg
ICAgdm9pZCBsb2FkUkdCQTQ0NDRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQTU1NTFJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7CisgICAgdm9pZCBsb2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1
cmU5ICptQmFzZVRleHR1cmU7IC8vIFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVk
IGNsYXNzIGlzIGFzc3VtZWQgdG8gb3duIGEgc3Ryb25nIHBvaW50ZXIuCi0gICAgYm9vbCBtRGly
dHlNZXRhRGF0YTsKLSAgICBib29sIG1Jc1JlbmRlcmFibGU7CiAKICAgICBib29sIG1EaXJ0eTsK
KyAgICBib29sIG1EaXJ0eU1ldGFEYXRhOworICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKIAotICAg
IHZvaWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZv
aWQgY3JlYXRlU3VyZmFjZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgSW1hZ2UgKmltZyk7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVy
ZQogewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQp
OworICAgIGV4cGxpY2l0IFRleHR1cmUyRChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmUyRCgp
OwogCiAgICAgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRGb3JtYXQo
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Cisg
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisgICAg
dm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFn
ZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNl
KTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CiAKICAgICBib29sIGlzQ29tcGxldGUo
KSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29s
b3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldENv
bG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmUyRCk7CkBAIC0xNzQsMzAgKzIwNSwyOSBAQCBjbGFzcyBUZXh0
dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5
ICpjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAg
ICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7
CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpOwogCiAgICAgdmlydHVhbCBib29sIGRpcnR5SW1hZ2VEYXRhKCkgY29uc3Q7CiAKKyAg
ICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAgICAgdm9pZCBjb21taXRSZWN0KEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CiAKICAgICBJbWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZF
TFNdOwogCiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwogCi0gICAgVGV4dHVyZUNv
bG9yYnVmZmVyUHJveHkgKm1Db2xvcmJ1ZmZlclByb3h5OwotCi0gICAgYm9vbCByZWRlZmluZVRl
eHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVy
UHJveHk7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiB7CiAg
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChDb250ZXh0ICpjb250ZXh0KTsK
KyAgICBleHBsaWNpdCBUZXh0dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmVD
dWJlTWFwKCk7CiAKICAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dEZvcm1hdCgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CiAgICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CkBAIC0yMDYsMTUgKzIzNiwxOSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0
dXJlCiAgICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAg
dm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKKyAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpOworCiAgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFjZSwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51
bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2Up
OwotICAgIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIHN1YkltYWdl
Q29tcHJlc3NlZChHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFn
ZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKnNvdXJjZSk7CisgICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNl
KTsKIAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2Vk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAgICB2
aXJ0dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICB2
aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKICAg
cHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwpA
QCAtMjIyLDYgKzI1Niw3IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUK
ICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOwogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKmNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNE
U3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBkaXJ0eUltYWdlRGF0YSgpIGNvbnN0OwogCkBAIC0yNDEsOSArMjc2LDcgQEAgY2xhc3Mg
VGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgSURpcmVjdDNEQ3ViZVRleHR1
cmU5ICptVGV4dHVyZTsKIAotICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptRmFjZVByb3hp
ZXNbNl07Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07CiB9Owog
fQogCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDcgKzE4MCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAg
ICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19G
UkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgIH0KQEAgLTE4OSw3ICsxODksMTUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xlbnVtIAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRhcmdldCA9PSBHTF9G
UkFNRUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5k
UmVhZEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFIHx8
IHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kRHJhd0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01NTks
NyArNTY3LDcgQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZS
QU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsK
ICAgICAgICAgfQpAQCAtNTY4LDcgKzU3NiwxNSBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7
CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRS
ZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdG
cmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZnJhbWVi
dWZmZXItPmNvbXBsZXRlbmVzcygpOwogICAgICAgICB9CkBAIC03MjAsMjIgKzczNiwxMDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBpZiAoIWdsOjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgaWYg
KGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdp
ZHRoKSkgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0g
MCB8fCBpbWFnZVNpemUgPCAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZl
bCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXpl
IDwgMCkKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJF
X1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZl
bCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAg
ICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVs
KSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChib3JkZXIgIT0gMCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIHVsdGltYXRlbHkgd2UgZG9u
J3Qgc3VwcG9ydCBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3Jt
YXQgc3dpdGNoIGZhaWxlZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VT
aXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxm
b3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRh
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkBAIC03NjMs
MTcgKzg2NCw5NSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJECiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhl
aWdodCA8IDAgfHwgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+
IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgaWYg
KHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8
IAorICAgICAgICAgICAgKGxldmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZl
bCA+IDAgJiYgIWdsOjppc1BvdzIoaGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHhvZmZzZXQgIT0gMCB8fCB5b2Zmc2V0ICE9IDApCisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBOVUxMKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOyAvLyBUaGUgdGV4dHVyZSBiZWluZyBvcGVyYXRlZCBvbiBpcyBub3Qg
YSBjb21wcmVzc2VkIHRleHR1cmUuCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBmb3JtYXQgc3dpdGNoIGhhcyBmYWls
ZWQuCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNv
bXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAl
IDQgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGls
IHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2Vz
IG5vdCBleGlzdCB1bmxlc3MgRFhUMSB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRl
eHR1cmUtPmdldFdpZHRoKCkpIHx8IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAh
PSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdl
Q29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
Z2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1
cmUtPmdldFdpZHRoKCkpIHx8IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAw
ICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29t
cHJlc3NlZCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAg
ewpAQCAtODM0LDYgKzEwMTMsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdM
ZW51bSB0CiAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0I6CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIENvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5v
dCBzdXBwb3J0ZWQgaGVyZSwgYnV0IGlmIHRoZXkgYXJlIHVuc3VwcG9ydGVkIGFsdG9nZXRoZXIs
CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogLy8gYSBk
aWZmZXJlbnQgZXJyb3IgaXMgZ2VuZXJhdGVkIHRoYW4gb3RoZXJ3aXNlLiBUaGF0IGlzIGhhbmRs
ZWQgYmVsb3cuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODQ4LDggKzEwMjksMzEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3Vy
Y2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAg
ICAgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQgfHwgCisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqc291cmNlID0g
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAtODU4LDYgKzEwNjIs
MTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2
ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAg
ICAgICAgfQpAQCAtODcwLDYgKzEwNzksMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1h
Z2UyRChHTGVudW0gdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0
ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtOTE2LDggKzExMzAsMTggQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5n
ZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAg
ICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpzb3VyY2Ug
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC05MjcsNiArMTE1
MSwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlm
IChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQpAQCAtOTM4LDYgKzExNjcsMTEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
CkBAIC0xNTU5LDcgKzE3OTMsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVC
VUZGRVIgfHwgcmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAg
aWYgKCh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVC
VUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAg
ICAgICAgICB8fCByZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
fQpAQCAtMTU2OCw5ICsxODAzLDIwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCk7
CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAgICAg
ICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7CisgICAgICAgICAgICBpZiAodGFy
Z2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVy
KQorICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVy
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC0xNjA0LDcgKzE4NTAsNyBAQCB2b2lkIF9f
c3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYg
dGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0xNjM2LDYg
KzE4ODIsMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHRleHRhcmdldCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfMkQ6CkBAIC0xNjY3LDkgKzE5MTgsMjAgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7
CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRS
ZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0g
Y29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkg
PT0gMCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUg
PT0gMCB8fCAhZnJhbWVidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTE3NzAs
NiArMjAzMiwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMo
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMjUsMTQgKzI0OTIsMjkgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9
PSAwKQorICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IE5VTEw7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJf
QU5HTEUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKQEAgLTIyNDAsMTYg
KzI1MjIsMTYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogICAg
ICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTE9SX0FUVEFDSE1FTlQwOiAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyVHlwZSgp
OwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1
ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgpOyAKKyAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAg
ICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxl
KCk7IAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0FUVEFDSE1FTlQ6ICAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0
aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAg
Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
cigpLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxl
KCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CkBAIC0yNTA4LDcgKzI3OTAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVS
X1JFRF9TSVpFOgogICAgICAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZm
ZXIoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRSZWRTaXplKCk7
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZm
ZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldFJlZFNpemUoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKQEAgLTI1
MTgsNyArMjgwMCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGUK
ICAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKICAgICAgICAg
ICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9y
YnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIt
PmdldFN0b3JhZ2UoKSktPmdldEdyZWVuU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjUyOCw3ICsyODEwLDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZQogICAgICAgICAgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1
ZmZlciktPmdldEJsdWVTaXplKCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdl
dEJsdWVTaXplKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICB7CkBAIC0yNTM4LDcgKzI4MjAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVS
X0FMUEhBX1NJWkU6CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1
ZmZlcigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEFscGhhU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9y
YnVmZmVyKj4ocmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCkpLT5nZXRBbHBoYVNpemUoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsK
QEAgLTI1NDgsNyArMjgzMCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGUKICAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRToKICAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6
OkRlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZmZXIqPihyZW5kZXJi
dWZmZXItPmdldFN0b3JhZ2UoKSktPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjU1OCwxMyArMjg0
MCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAg
ICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKICAgICAgICAgICAgICAg
ICBpZiAocmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1
ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpKS0+Z2V0U3RlbmNpbFNpemUoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xFOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldFNh
bXBsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtMjk5Myw3ICszMjg3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRy
aWJmdihHTHVpbgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJp
YlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgICAgICAg
ICAgY29uc3QgZ2w6OkF0dHJpYnV0ZVN0YXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAg
ICAgICAgICAgIHsKQEAgLTMwMTMsNyArMzMwNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVy
dGV4QXR0cmliZnYoR0x1aW4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0
dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJT
dGF0ZS5tQm91bmRCdWZmZXI7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0
dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKQEAgLTMwNDYsNyArMzM0MCw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW4KICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpBdHRyaWJ1dGVTdGF0ZSBhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJp
YlN0YXRlKGluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVTdGF0ZSAmYXR0
cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKICAgICAg
ICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7CkBAIC0zMDY2LDcgKzMzNjAsNyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYml2KEdMdWluCiAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxT
RSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YXR0cmliU3RhdGUubUJvdW5kQnVmZmVyOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRy
aWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CiAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCkBAIC0zNDgxLDYgKzM3NzUsMTcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhU
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAg
ICB7CkBAIC0zNTIxLDEwICszODI2LDEwIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRl
ckNvbXBpbGVyKHYKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVBTkdMRShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgVFJBQ0Uo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgVFJBQ0UoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9
IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAg
ICAgIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAg
ICAgdHJ5CiAgICAgewpAQCAtMzU0MywxMiArMzg0OCwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0xlCiAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAg
ICAgIGNhc2UgR0xfUkdCNTY1OgogICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Cisg
ICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICBjYXNlIEdM
X1JHQjhfT0VTOgorICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwIHx8IHdpZHRoID4gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSB8fCBoZWlnaHQgPiBnbDo6
TUFYX1JFTkRFUkJVRkZFUl9TSVpFKQorICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDAgfHwgd2lkdGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpN
QVhfUkVOREVSQlVGRkVSX1NJWkUgfHwgc2FtcGxlcyA8IDApCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtMzU1Nyw3
ICszODY1LDEzIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICBpZiAoc2FtcGxlcyA+
IGNvbnRleHQtPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJI
YW5kbGUoKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQpAQCAtMzU2NSwxNSArMzg3OSwyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0xlCiAgICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkRlcHRoYnVmZmVy
KHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZm
ZXJTdG9yYWdlKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE0OgogICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICAgICAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkNvbG9y
YnVmZmVyKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSk7CisgICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpDb2xvcmJ1
ZmZlcih3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcykpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OlN0ZW5jaWxidWZm
ZXIod2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2UobmV3IGdsOjpTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJT
dG9yYWdlKG5ldyBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTM1ODYsNiArMzkw
NSwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlCiAgICAgfQog
fQogCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sK
KyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgMCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCiB2b2lkIF9fc3RkY2FsbCBnbFNhbXBs
ZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIFRSQUNF
KCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBp
bnZlcnQpOwpAQCAtMzk1OCw2ICs0MjgyLDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNh
c2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CisgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFr
OyAKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwogICAgICAgICB9CkBAIC0zOTcxLDYgKzQzMDcsMTkgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpA
QCAtNDE0Niw2ICs0NDk1LDExIEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVu
dW0gdGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNDb21wcmVzc2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKQEAgLTQxNTcsNiArNDUxMSwxMSBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
dWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNDk2NSw3ICs1MzI0LDcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdQogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCwgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSwgc2l6ZSwgdHlwZSwgKG5vcm1h
bGl6ZWQgPT0gR0xfVFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXpl
LCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOwogICAgICAgICB9
CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5OTgsNiArNTM1Nyw1NCBA
QCB2b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCit2
b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMaW50IHNyY1gwLCBHTGludCBz
cmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAs
IEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQoreworICAgIFRSQUNFKCIo
R0xpbnQgc3JjWDAgPSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQgc3JjWDEgPSAlZCwgR0xp
bnQgc3JjWTEgPSAlZCwgIgorICAgICAgICAgICJHTGludCBkc3RYMCA9ICVkLCBHTGludCBkc3RZ
MCA9ICVkLCBHTGludCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9ICVkLCAiCisgICAgICAgICAg
IkdMYml0ZmllbGQgbWFzayA9IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAweCVYKSIsCisgICAgICAg
ICAgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWDEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkx
LCBtYXNrLCBmaWx0ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZpbHRl
cikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1Jf
QlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQp
KSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RYMSAt
IGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJTY2FsaW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlz
IGltcGxlbWVudGF0aW9uLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJs
aXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBk
c3RYMSwgZHN0WTEsIG1hc2spOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQq
IHBpeGVscykKIHsKQEAgLTUwMjcsNiArNTQzNCw3IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUKICAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9u
c1tdID0KICAgICB7CiAgICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKKyAgICAgICAgeyJn
bEJsaXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCiAgICAgfTsKIAogICAgIGZvciAoaW50
IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7
IGV4dCsrKQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2aXNpb24gNjY2MTEp
CisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAg
LTE0NCwxMSArMTQ0LDEzIEBAIEVYUE9SVFMKICAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAg
ICAgICAgIEAxNDIKIAogICAgIDsgRXh0ZW5zaW9ucwotICAgIGdsVGV4SW1hZ2UzRE9FUwkJCQkJ
QDE0MworICAgIGdsVGV4SW1hZ2UzRE9FUyAgICAgICAgICAgICAgICAgQDE0MworICAgIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUgICAgICAgICAgQDE0OQorICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlQU5HTEUgQDE1MAogICAgIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwotICAg
IGdsQ3JlYXRlQ29udGV4dAkJCQkJQDE0NCBOT05BTUUKLSAgICBnbERlc3Ryb3lDb250ZXh0CQkJ
CUAxNDUgTk9OQU1FCi0gICAgZ2xNYWtlQ3VycmVudAkJCQkJQDE0NiBOT05BTUUKLSAgICBnbEdl
dEN1cnJlbnRDb250ZXh0CQkJCUAxNDcgTk9OQU1FCisgICAgZ2xDcmVhdGVDb250ZXh0ICAgICAg
ICAgICAgICAgICBAMTQ0IE5PTkFNRQorICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAg
ICAgQDE0NSBOT05BTUUKKyAgICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYg
Tk9OQU1FCisgICAgZ2xHZXRDdXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQog
ICAgIGdsR2V0UHJvY0FkZHJlc3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9q
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjE3LDEwICsyMTcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRl
cmJ1ZmZlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuXFJlc291cmNlTWFuYWdlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0Zp
bGU+DQpAQCAtMjk5LDEwICszMDcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3Vy
Y2VNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuXFNoYWRlci5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IEFOR0xFL3Ny
Yy9saWJHTEVTdjIvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFp
bi5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAKICNkZWZpbmUgR0xfQVBJQ0FMTAogI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCiAjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKSW5kZXg6IEFOR0xF
L3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDQ5IEBAIEdM
c2l6ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW4KICAgICByZXR1cm4gKHJhd1Bp
dGNoICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOwogfQogCitHTHNpemVpIENv
bXB1dGVDb21wcmVzc2VkUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQ6CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIEFTU0VSVCh3aWR0aCAlIDQgPT0gMCk7CisKKyAgICByZXR1cm4gOCAqIHdpZHRo
IC8gNDsKK30KKworR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisg
ICAgeworICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gOCAq
IChHTHNpemVpKWNlaWwoKGZsb2F0KXdpZHRoIC8gNC4wZikgKiAoR0xzaXplaSljZWlsKChmbG9h
dCloZWlnaHQgLyA0LjBmKTsKK30KKworYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCkK
K3sKKyAgICBpZihmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAor
ICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywg
b2YgYSBzaW5nbGUgdGV4ZWwgaW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlKQogewpAQCAtMTk2LDYgKzIzOSw3IEBAIGludCBDb21wdXRl
UGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW4KICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RV9BTFBIQTogcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI7CiAgICAgICAgICAgY2Fz
ZSBHTF9SR0I6ICAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOwog
ICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpICogNDsKKyAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAgICAgcmV0dXJuIHNp
emVvZih1bnNpZ25lZCBjaGFyKSAqIDQ7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIyOCw2ICsyNzIsNyBAQCBib29sIENo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hCiAgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xf
QkdSQV9FWFQ6CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CiAgICAgICAgICAgY2FzZSBHTF9BTFBI
QToKICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKQEAgLTU5OSwxMiArNjQ0LDMxIEBAIEQz
REZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW4KICAgICBzd2l0Y2ggKGZvcm1h
dCkKICAgICB7CiAgICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAg
ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNhc2UgR0xfUkdCNV9B
MToKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThS
OEc4Qjg7CiAgICAgICBjYXNlIEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1U
X1I1RzZCNTsKKyAgICAgIGNhc2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RG
TVRfWDhSOEc4Qjg7CiAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAgcmV0dXJuIEQzREZNVF9EMjRTODsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIAorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzogcmV0dXJuIEQzREZNVF9EMjRTODsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7ICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CiAgICAgfQogfQogCitHTHNpemVpIEdl
dFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKK3sK
KyAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdHlwZTsKK30KKworRDNETVVMVElTQU1Q
TEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCit7
CisgICAgaWYgKHNhbXBsZXMgPD0gMSkKKyAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05P
TkU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxl
czsKK30KKwogfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
LDYgKzExLDcgQEAKIAogI2RlZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjaW5jbHVkZSA8ZDNkOS5oPgogCiBuYW1lc3Bh
Y2UgZ2wKQEAgLTI4LDYgKzI5LDkgQEAgaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25l
ZCBpbnQgKgogCiBpbnQgQ29tcHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSk7CiBHTHNpemVpIENvbXB1dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgYWxpZ25tZW50KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQ
aXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXBy
ZXNzZWRTaXplKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsK
K2Jvb2wgSXNDb21wcmVzc2VkKEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdl
dCk7CiBib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUpOwpAQCAtNTYsNiArNjAsOCBAQCB1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9S
TUFUIHN0CiBib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBH
THNpemVpIHByaW1pdGl2ZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklN
SVRJVkVUWVBFICpkM2RQcmltaXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KTsKIEQz
REZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNETVVM
VElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBs
ZXMpOworR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBM
RV9UWVBFIHR5cGUpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjYxMSkKKysrIFdlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMzEgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSb2xsIEFOR0xFIHVuZGVyIHdlYmtpdCB0byByNDAyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTAwNAorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKTogVXBkYXRlIHRo
ZSBjb2RlIHRvIHVzZSBuZXdlciBBTkdMRSBpbnRlcmZhY2UuCisKIDIwMTAtMDgtMzEgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NjYxMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw2IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogCi0jaW5j
bHVkZSAiQU5HTEUvUmVzb3VyY2VMaW1pdHMuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgog
I2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCkBA
IC0xODYsMjMgKzE4NSwyMyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhCiAKICAgICBUQnVpbHRJblJlc291cmNlIEFOR0xFUmVzb3VyY2VzOwogCi0gICAgQU5HTEVS
ZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9IDA7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLm1heFZlcnRleEF0
dHJpYnMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMDsK
LSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgQU5H
TEVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMubWF4VmFy
eWluZ1ZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMg
PSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMs
ICZBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJj
ZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDA7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNl
cy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhW
YXJ5aW5nVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Cisg
ICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2Vz
Lk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMpOwogCiAgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0g
ICAgQU5HTEVSZXNvdXJjZXMubWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKICAgICAKICAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CiAgICAgCg==
</data>
<flag name="commit-queue"
          id="55186"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66235</attachid>
            <date>2010-09-01 10:47:07 -0700</date>
            <delta_ts>2010-09-01 10:55:54 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>r402.patch</filename>
            <type>text/plain</type>
            <size>383319</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsODc3IEBACisyMDEwLTA5LTAxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbCBBTkdMRSB1
bmRlciB3ZWJraXQgdG8gcjQwMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDUwMDQKKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAgICAgKiBpbmNs
dWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaDoKKyAgICAgICAgKiBpbmNsdWRlL0dMU0xBTkcv
U2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9CYXNlVHlwZXMuaDoKKyAgICAg
ICAgKGdldFByZWNpc2lvblN0cmluZyk6CisgICAgICAgIChnZXRCYXNpY1N0cmluZyk6CisgICAg
ICAgIChJc1NhbXBsZXIpOgorICAgICAgICAoZ2V0UXVhbGlmaWVyU3RyaW5nKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHA6CisgICAgICAgIChCdWlsdEluQ29uc3RhbnRz
KToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci9J
bml0aWFsaXplLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwOgor
ICAgICAgICAoSW5pdFByb2Nlc3MpOgorICAgICAgICAoRGV0YWNoUHJvY2Vzcyk6CisgICAgICAg
IChJbml0VGhyZWFkKToKKyAgICAgICAgKERldGFjaFRocmVhZCk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemVEbGwuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3Bw
OgorICAgICAgICAoR2V0SGlnaGVyUHJlY2lzaW9uKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6
OmFkZEJpbmFyeU1hdGgpOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6c2V0QWdncmVnYXRlT3Bl
cmF0b3IpOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkQ29tbWEpOgorICAgICAgICAoVElu
dGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAoVEludGVybUJpbmFyeTo6cHJvbW90
ZSk6CisgICAgICAgIChDb21wYXJlU3RydWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0
cHV0R0xTTC5jcHA6CisgICAgICAgIChUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFtZXRl
cnMpOgorICAgICAgICAoVE91dHB1dEdMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoVE91dHB1
dEdMU0w6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5j
cHA6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVyKToKKyAgICAgICAgKHNoOjpPdXRw
dXRITFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRBZ2dy
ZWdhdGUpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3ApOgor
ICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6Y29uc3Ry
dWN0b3JFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNo
ZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayk6CisgICAgICAg
IChUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24pOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
ZXhlY3V0ZUluaXRpYWxpemVyKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVj
dG9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KToKKyAgICAgICAg
KEZyZWVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChHZXRHbG9iYWxQYXJzZUNvbnRleHQp
OgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuaDoKKyAgICAgICAgKFRQb29sQWxs
b2NhdG9yOjp0SGVhZGVyOjp0SGVhZGVyKToKKyAgICAgICAgKHBvb2xfYWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgIChwb29sX2FsbG9jYXRvcjo6ZGVhbGxvY2F0ZSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoU2hJbml0aWFsaXplKToKKyAg
ICAgICAgKFNoRmluYWxpemUpOgorICAgICAgICAoU2hJbml0QnVpbHRJblJlc291cmNlKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFR5cGU6Omdl
dFN0cnVjdFNpemUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oOgorICAg
ICAgICAoVFZhcmlhYmxlOjpzZXRRdWFsaWZpZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9U
eXBlcy5oOgorICAgICAgICAoVFR5cGU6OlRUeXBlKToKKyAgICAgICAgKFRUeXBlOjpnZXRCYXNp
Y1R5cGUpOgorICAgICAgICAoVFR5cGU6OnNldEJhc2ljVHlwZSk6CisgICAgICAgIChUVHlwZTo6
Z2V0UHJlY2lzaW9uKToKKyAgICAgICAgKFRUeXBlOjpzZXRQcmVjaXNpb24pOgorICAgICAgICAo
VFR5cGU6OmdldFF1YWxpZmllcik6CisgICAgICAgIChUVHlwZTo6c2V0UXVhbGlmaWVyKToKKyAg
ICAgICAgKFRUeXBlOjpnZXROb21pbmFsU2l6ZSk6CisgICAgICAgIChUVHlwZTo6c2V0Tm9taW5h
bFNpemUpOgorICAgICAgICAoVFR5cGU6OmlzTWF0cml4KToKKyAgICAgICAgKFRUeXBlOjpzZXRN
YXRyaXgpOgorICAgICAgICAoVFR5cGU6OmlzQXJyYXkpOgorICAgICAgICAoVFR5cGU6OmdldEFy
cmF5U2l6ZSk6CisgICAgICAgIChUVHlwZTo6c2V0QXJyYXlTaXplKToKKyAgICAgICAgKFRUeXBl
OjpnZXRNYXhBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OnNldE1heEFycmF5U2l6ZSk6Cisg
ICAgICAgIChUVHlwZTo6Y2xlYXJBcnJheW5lc3MpOgorICAgICAgICAoVFR5cGU6OnNldEFycmF5
SW5mb3JtYXRpb25UeXBlKToKKyAgICAgICAgKFRUeXBlOjpnZXRBcnJheUluZm9ybWF0aW9uVHlw
ZSk6CisgICAgICAgIChUVHlwZTo6aXNWZWN0b3IpOgorICAgICAgICAoVFR5cGU6OmlzU2NhbGFy
KToKKyAgICAgICAgKFRUeXBlOjpzZXRTdHJ1Y3QpOgorICAgICAgICAoVFR5cGU6OmdldFR5cGVO
YW1lKToKKyAgICAgICAgKFRUeXBlOjpzZXRUeXBlTmFtZSk6CisgICAgICAgIChUVHlwZTo6aXNG
aWVsZCk6CisgICAgICAgIChUVHlwZTo6Z2V0RmllbGROYW1lKToKKyAgICAgICAgKFRUeXBlOjpz
ZXRGaWVsZE5hbWUpOgorICAgICAgICAoVFR5cGU6OmdldEJhc2ljU3RyaW5nKToKKyAgICAgICAg
KFRUeXBlOjpnZXRQcmVjaXNpb25TdHJpbmcpOgorICAgICAgICAoVFR5cGU6OmdldFF1YWxpZmll
clN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcubDoKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvZ2xzbGFuZy55OgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlh
dGUuaDoKKyAgICAgICAgKFRJbnRlcm1Ob2RlOjpnZXRMaW5lKToKKyAgICAgICAgKFRJbnRlcm1O
b2RlOjpzZXRMaW5lKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QXNUeXBlZCk6CisgICAg
ICAgIChUSW50ZXJtVHlwZWQ6OnNldFR5cGUpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRU
eXBlKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0VHlwZVBvaW50ZXIpOgorICAgICAgICAo
VEludGVybVR5cGVkOjpnZXRCYXNpY1R5cGUpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRR
dWFsaWZpZXIpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRQcmVjaXNpb24pOgorICAgICAg
ICAoVEludGVybVR5cGVkOjpnZXROb21pbmFsU2l6ZSk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6
OmlzTWF0cml4KToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6aXNBcnJheSk6CisgICAgICAgIChU
SW50ZXJtVHlwZWQ6OmlzVmVjdG9yKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6aXNTY2FsYXIp
OgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRCYXNpY1N0cmluZyk6CisgICAgICAgIChUSW50
ZXJtVHlwZWQ6OmdldFF1YWxpZmllclN0cmluZyk6CisgICAgICAgIChUSW50ZXJtU3ltYm9sOjpn
ZXRJZCk6CisgICAgICAgIChUSW50ZXJtU3ltYm9sOjpnZXRTeW1ib2wpOgorICAgICAgICAoVElu
dGVybU9wZXJhdG9yOjpzZXRPcCk6CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpzZXRMZWZ0KToK
KyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldFJpZ2h0KToKKyAgICAgICAgKFRJbnRlcm1CaW5h
cnk6OmdldExlZnQpOgorICAgICAgICAoVEludGVybUJpbmFyeTo6Z2V0UmlnaHQpOgorICAgICAg
ICAoVEludGVybVVuYXJ5OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKFRJbnRlcm1VbmFyeTo6Z2V0
T3BlcmFuZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpnZXRBc0FnZ3JlZ2F0ZSk6Cisg
ICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpnZXRTZXF1ZW5jZSk6CisgICAgICAgIChUSW50ZXJt
QWdncmVnYXRlOjpzZXROYW1lKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OmdldE5hbWUp
OgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0VXNlckRlZmluZWQpOgorICAgICAgICAo
VEludGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVn
YXRlOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0T3B0aW1p
emUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0RGVidWcpOgorICAgICAgICAoVElu
dGVybVNlbGVjdGlvbjo6Z2V0Q29uZGl0aW9uKToKKyAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246
OmdldFRydWVCbG9jayk6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRGYWxzZUJsb2Nr
KToKKyAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246OmdldEFzU2VsZWN0aW9uTm9kZSk6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwOgorICAgICAgICAoVENvbnN0VHJhdmVy
c2VyOjpUQ29uc3RUcmF2ZXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvYXRvbS5jOgorICAgICAgICAoSW5pdEF0b21UYWJsZSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9hdG9tLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jb21waWxlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
YzoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgorICAgICAgICAq
IHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmM6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYzoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
cGFyc2VyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNz
Lmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmM6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYzoKKyAgICAgICAgKE5ld1N5bWJvbCk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlY29yZFRva2VuKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oOgorICAgICAgICAqIHNy
Yy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OkRpc3BsYXkpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5Ojppbml0aWFsaXplKToKKyAgICAgICAgKGVnbDo6RGlzcGxh
eTo6dGVybWluYXRlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRlRGV2aWNlKToKKyAg
ICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSk6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRNdWx0
aVNhbXBsZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRDb21wcmVzc2VkVGV4
dHVyZVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOgorICAgICAgICAq
IHNyYy9saWJFR0wvU3VyZmFjZS5jcHA6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OlN1cmZhY2Up
OgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6
OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OndyaXRl
UmVjb3JkYWJsZUZsaXBTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmFwcGx5RmxpcFN0
YXRlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZVJlY29yZGVkU3RhdGUpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSk6CisgICAgICAgIChlZ2w6
OlN1cmZhY2U6OnN3YXApOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAgICAg
ICAqIHNyYy9saWJFR0wvbGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVHTC52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcDoKKyAgICAgICAgKGdsOjpC
bGl0OjpzZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OkJsaXQ6OnNldFBpeGVsU2hhZGVy
KToKKyAgICAgICAgKGdsOjpCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0J1ZmZlci5oOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6Q29udGV4dCk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1ha2VD
dXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QXJy
YXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVNo
YWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojpk
ZWxldGVCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVNoYWRlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldFNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UHJvZ3JhbSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6YmluZEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5k
RWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZTJE
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXApOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmJpbmREcmF3RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnVzZVByb2dyYW0pOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0
UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0RnJhbWVidWZm
ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldEN1cnJlbnRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlMkQp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
RmxvYXR2KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjphcHBseVJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6
Q29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y2xlYXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmZpbmlzaCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Zmx1c2gp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6
c3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFj
aEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRldGFjaFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW5jb21wbGV0
ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChnbDo6QXR0cmlidXRlU3RhdGU6OkF0dHJpYnV0
ZVN0YXRlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVm
ZmVyOjp+RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpsb29rdXBSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6
OmRldGFjaFRleHR1cmUpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwp
OgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAo
Z2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6Omdl
dFN0ZW5jaWxidWZmZXJTZXJpYWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRDb2xv
cmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6
RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1
ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpn
ZXRTdGVuY2lsYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6aGFzU3Rl
bmNpbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmlzTXVsdGlzYW1wbGUpOgorICAgICAg
ICAoZ2w6OkZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAoZ2w6OkRlZmF1bHRG
cmFtZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6RGVmYXVsdEZyYW1lYnVmZmVyOjpjb21wbGV0
ZW5lc3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KiBzcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwOgorICAgICAgICAoZ2w6OlByb2dyYW06OlByb2dy
YW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFjaFNoYWRlcik6
CisgICAgICAgIChnbDo6UHJvZ3JhbTo6bGlua1ZhcnlpbmdzKToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjpsaW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAgICAgICAoZ2w6
OlByb2dyYW06OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmFkZFJlZik6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Z2V0UmVmQ291bnQpOgorICAgICAgICAoZ2w6OlByb2dyYW06Omdl
dER4Vmlld3BvcnRMb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmg6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2w6
OlJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6
On5SZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjppc0RlcHRoYnVmZmVyKToKKyAgICAgICAg
KGdsOjpSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0
RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFdpZHRoKToKKyAg
ICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjpnZXRGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9y
bWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFNlcmlhbCk6CisgICAgICAgIChn
bDo6UmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjpSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZTo6aXNDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNT
dGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3Rl
bmNpbCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyU3RvcmFnZTo6c2V0U2l6ZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpn
ZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNhbXBs
ZXMpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNlcmlhbCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwpOgorICAgICAgICAoZ2w6
OkNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29sb3JidWZmZXI6Omlz
Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRSZWRTaXplKToKKyAg
ICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKToKKyAgICAgICAgKGdsOjpDb2xv
cmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRBbHBo
YVNpemUpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZm
ZXIpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAg
ICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKToKKyAgICAgICAgKGdsOjpE
ZXB0aFN0ZW5jaWxidWZmZXI6OmdldFN0ZW5jaWxTaXplKToKKyAgICAgICAgKGdsOjpEZXB0aFN0
ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6
OkRlcHRoYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKToK
KyAgICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6
RGVwdGhidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RlbmNpbGJ1ZmZl
cjo6U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxi
dWZmZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAg
ICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgICogc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6Omdl
dFN0b3JhZ2UpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmNwcDoKKyAgICAgICAg
KGdsOjpTaGFkZXI6OlNoYWRlcik6CisgICAgICAgIChnbDo6U2hhZGVyOjphZGRSZWYpOgorICAg
ICAgICAoZ2w6OlNoYWRlcjo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6U2hhZGVyOjpnZXRSZWZD
b3VudCk6CisgICAgICAgIChnbDo6U2hhZGVyOjpwYXJzZVZhcnlpbmdzKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcik6CisgICAgICAgIChnbDo6RnJhZ21lbnRTaGFk
ZXI6OkZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5oOgor
ICAgICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6SW1hZ2U6OkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpnZXRCbGl0dGVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZWxl
Y3RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRJbWFnZURhdGEpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OmxvYWRBbHBoYUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZTo6bG9hZEx1bWluYW5jZUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEx1
bWluYW5jZUFscGhhSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCVUJ5
dGVJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0I1NjVJbWFnZURhdGEp
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JBVUJ5dGVJbWFnZURhdGEpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JBNDQ0NEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4
dHVyZTo6bG9hZFJHQkE1NTUxSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2Fk
QkdSQUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Y3JlYXRlU3VyZmFjZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNl
dENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTJEOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzdWJJbWFn
ZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJE
Ojppc0NvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAg
IChnbDo6VGV4dHVyZUN1YmVNYXA6OmdldEZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1
YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVz
c2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Q3ViZU1hcDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2V0
Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclBy
b3h5OjphZGRSZWYpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclBy
b3h5OjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6Z2V0V2lkdGgpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZl
clByb3h5OjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1
ZmZlclByb3h5OjpnZXRGb3JtYXQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvVGV4dHVyZS5o
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL2xpYkdMRVN2Mi5kZWY6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVT
djIudmNwcm9qOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbWFpbi5oOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKGdsOjpDb21wdXRlQ29tcHJlc3Nl
ZFBpdGNoKToKKyAgICAgICAgKGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUpOgorICAgICAgICAo
Z2w6OklzQ29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6CisgICAg
ICAgIChnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChlczJkeDo6Q29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdCk6CisgICAgICAgIChlczJkeDo6R2V0U2FtcGxlc0Zyb21NdWx0
aXNhbXBsZVR5cGUpOgorICAgICAgICAoZXMyZHg6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1w
bGVzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oOgorCisyMDEwLTA4LTMx
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbCBBTkdMRSB1bmRlciB3ZWJraXQgdG8gcjQwMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwMDQKKwor
ICAgICAgICAqIGluY2x1ZGUvR0xFUzIvZ2wyZXh0Lmg6CisgICAgICAgICogaW5jbHVkZS9HTFNM
QU5HL1Jlc291cmNlTGltaXRzLmg6IFJlbW92ZWQuCisgICAgICAgICogaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQmFzZVR5cGVzLmg6CisgICAg
ICAgIChnZXRQcmVjaXNpb25TdHJpbmcpOgorICAgICAgICAoZ2V0QmFzaWNTdHJpbmcpOgorICAg
ICAgICAoSXNTYW1wbGVyKToKKyAgICAgICAgKGdldFF1YWxpZmllclN0cmluZyk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwOgorICAgICAgICAoQnVpbHRJbkNvbnN0YW50
cyk6CisgICAgICAgIChJZGVudGlmeUJ1aWx0SW5zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcDoK
KyAgICAgICAgKEluaXRQcm9jZXNzKToKKyAgICAgICAgKERldGFjaFByb2Nlc3MpOgorICAgICAg
ICAoSW5pdFRocmVhZCk6CisgICAgICAgIChEZXRhY2hUaHJlYWQpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9Jbml0aWFsaXplRGxsLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNw
cDoKKyAgICAgICAgKEdldEhpZ2hlclByZWNpc2lvbik6CisgICAgICAgIChUSW50ZXJtZWRpYXRl
OjphZGRCaW5hcnlNYXRoKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OnNldEFnZ3JlZ2F0ZU9w
ZXJhdG9yKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKToKKyAgICAgICAgKFRJ
bnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnByb21v
dGUpOgorICAgICAgICAoQ29tcGFyZVN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuY3BwOgorICAgICAgICAoVE91dHB1dEdMU0w6OndyaXRlRnVuY3Rpb25QYXJhbWV0
ZXJzKToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKFRPdXRw
dXRHTFNMOjp2aXNpdEJyYW5jaCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
Y3BwOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhlYWRlcik6CisgICAgICAgIChzaDo6T3V0
cHV0SExTTDo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKToK
KyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmNvbnN0
cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JD
aGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpwYXJhbUVycm9yQ2hlY2spOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6
OmV4ZWN1dGVJbml0aWFsaXplcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdCk6CisgICAgICAg
IChGcmVlUGFyc2VDb250ZXh0SW5kZXgpOgorICAgICAgICAoR2V0R2xvYmFsUGFyc2VDb250ZXh0
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUG9vbEFsbG9jLmg6CisgICAgICAgIChUUG9vbEFs
bG9jYXRvcjo6dEhlYWRlcjo6dEhlYWRlcik6CisgICAgICAgIChwb29sX2FsbG9jYXRvcjo6YWxs
b2NhdGUpOgorICAgICAgICAocG9vbF9hbGxvY2F0b3I6OmRlYWxsb2NhdGUpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9TaGFkZXJMYW5nLmNwcDoKKyAgICAgICAgKFNoSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChTaEZpbmFsaXplKToKKyAgICAgICAgKFNoSW5pdEJ1aWx0SW5SZXNvdXJjZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKFRUeXBlOjpn
ZXRTdHJ1Y3RTaXplKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaDoKKyAg
ICAgICAgKFRWYXJpYWJsZTo6c2V0UXVhbGlmaWVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
VHlwZXMuaDoKKyAgICAgICAgKFRUeXBlOjpUVHlwZSk6CisgICAgICAgIChUVHlwZTo6Z2V0QmFz
aWNUeXBlKToKKyAgICAgICAgKFRUeXBlOjpzZXRCYXNpY1R5cGUpOgorICAgICAgICAoVFR5cGU6
OmdldFByZWNpc2lvbik6CisgICAgICAgIChUVHlwZTo6c2V0UHJlY2lzaW9uKToKKyAgICAgICAg
KFRUeXBlOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVFR5cGU6OnNldFF1YWxpZmllcik6Cisg
ICAgICAgIChUVHlwZTo6Z2V0Tm9taW5hbFNpemUpOgorICAgICAgICAoVFR5cGU6OnNldE5vbWlu
YWxTaXplKToKKyAgICAgICAgKFRUeXBlOjppc01hdHJpeCk6CisgICAgICAgIChUVHlwZTo6c2V0
TWF0cml4KToKKyAgICAgICAgKFRUeXBlOjppc0FycmF5KToKKyAgICAgICAgKFRUeXBlOjpnZXRB
cnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OnNldEFycmF5U2l6ZSk6CisgICAgICAgIChUVHlw
ZTo6Z2V0TWF4QXJyYXlTaXplKToKKyAgICAgICAgKFRUeXBlOjpzZXRNYXhBcnJheVNpemUpOgor
ICAgICAgICAoVFR5cGU6OmNsZWFyQXJyYXluZXNzKToKKyAgICAgICAgKFRUeXBlOjpzZXRBcnJh
eUluZm9ybWF0aW9uVHlwZSk6CisgICAgICAgIChUVHlwZTo6Z2V0QXJyYXlJbmZvcm1hdGlvblR5
cGUpOgorICAgICAgICAoVFR5cGU6OmlzVmVjdG9yKToKKyAgICAgICAgKFRUeXBlOjppc1NjYWxh
cik6CisgICAgICAgIChUVHlwZTo6c2V0U3RydWN0KToKKyAgICAgICAgKFRUeXBlOjpnZXRUeXBl
TmFtZSk6CisgICAgICAgIChUVHlwZTo6c2V0VHlwZU5hbWUpOgorICAgICAgICAoVFR5cGU6Omlz
RmllbGQpOgorICAgICAgICAoVFR5cGU6OmdldEZpZWxkTmFtZSk6CisgICAgICAgIChUVHlwZTo6
c2V0RmllbGROYW1lKToKKyAgICAgICAgKFRUeXBlOjpnZXRCYXNpY1N0cmluZyk6CisgICAgICAg
IChUVHlwZTo6Z2V0UHJlY2lzaW9uU3RyaW5nKToKKyAgICAgICAgKFRUeXBlOjpnZXRRdWFsaWZp
ZXJTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmg6CisgICAgICAgIChUSW50ZXJtTm9kZTo6Z2V0TGluZSk6CisgICAgICAgIChUSW50ZXJt
Tm9kZTo6c2V0TGluZSk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldEFzVHlwZWQpOgorICAg
ICAgICAoVEludGVybVR5cGVkOjpzZXRUeXBlKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0
VHlwZSk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmdldFR5cGVQb2ludGVyKToKKyAgICAgICAg
KFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNUeXBlKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0
UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0UHJlY2lzaW9uKToKKyAgICAg
ICAgKFRJbnRlcm1UeXBlZDo6Z2V0Tm9taW5hbFNpemUpOgorICAgICAgICAoVEludGVybVR5cGVk
Ojppc01hdHJpeCk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmlzQXJyYXkpOgorICAgICAgICAo
VEludGVybVR5cGVkOjppc1ZlY3Rvcik6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OmlzU2NhbGFy
KToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QmFzaWNTdHJpbmcpOgorICAgICAgICAoVElu
dGVybVR5cGVkOjpnZXRRdWFsaWZpZXJTdHJpbmcpOgorICAgICAgICAoVEludGVybVN5bWJvbDo6
Z2V0SWQpOgorICAgICAgICAoVEludGVybVN5bWJvbDo6Z2V0U3ltYm9sKToKKyAgICAgICAgKFRJ
bnRlcm1PcGVyYXRvcjo6c2V0T3ApOgorICAgICAgICAoVEludGVybUJpbmFyeTo6c2V0TGVmdCk6
CisgICAgICAgIChUSW50ZXJtQmluYXJ5OjpzZXRSaWdodCk6CisgICAgICAgIChUSW50ZXJtQmlu
YXJ5OjpnZXRMZWZ0KToKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OmdldFJpZ2h0KToKKyAgICAg
ICAgKFRJbnRlcm1VbmFyeTo6c2V0T3BlcmFuZCk6CisgICAgICAgIChUSW50ZXJtVW5hcnk6Omdl
dE9wZXJhbmQpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0QXNBZ2dyZWdhdGUpOgor
ICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6Z2V0U2VxdWVuY2UpOgorICAgICAgICAoVEludGVy
bUFnZ3JlZ2F0ZTo6c2V0TmFtZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpnZXROYW1l
KToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldFVzZXJEZWZpbmVkKToKKyAgICAgICAg
KFRJbnRlcm1BZ2dyZWdhdGU6OmlzVXNlckRlZmluZWQpOgorICAgICAgICAoVEludGVybUFnZ3Jl
Z2F0ZTo6Z2V0UXVhbGlmaWVyKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldE9wdGlt
aXplKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6OnNldERlYnVnKToKKyAgICAgICAgKFRJ
bnRlcm1TZWxlY3Rpb246OmdldENvbmRpdGlvbik6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9u
OjpnZXRUcnVlQmxvY2spOgorICAgICAgICAoVEludGVybVNlbGVjdGlvbjo6Z2V0RmFsc2VCbG9j
ayk6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRBc1NlbGVjdGlvbk5vZGUpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9wYXJzZUNvbnN0LmNwcDoKKyAgICAgICAgKFRDb25zdFRyYXZl
cnNlcjo6VENvbnN0VHJhdmVyc2VyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2F0b20uYzoKKyAgICAgICAgKEluaXRBdG9tVGFibGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvYXRvbS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY29tcGlsZS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bw
LmM6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmM6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9tZW1vcnkuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vz
cy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmg6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmM6CisgICAgICAgIChOZXdTeW1ib2wpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5oOgorICAgICAgICAqIHNyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmM6CisgICAgICAgIChSZWNvcmRUb2tlbik6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuaDoKKyAgICAgICAgKiBz
cmMvbGliRUdML0Rpc3BsYXkuY3BwOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpEaXNwbGF5KToK
KyAgICAgICAgKGVnbDo6RGlzcGxheTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChlZ2w6OkRpc3Bs
YXk6OnRlcm1pbmF0ZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZURldmljZSk6Cisg
ICAgICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UpOgorICAgICAgICAoZWds
OjpEaXNwbGF5OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0TXVs
dGlTYW1wbGVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0Q29tcHJlc3NlZFRl
eHR1cmVTdXBwb3J0KToKKyAgICAgICAgKiBzcmMvbGliRUdML0Rpc3BsYXkuaDoKKyAgICAgICAg
KiBzcmMvbGliRUdML1N1cmZhY2UuY3BwOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpTdXJmYWNl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4pOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp3cml0
ZVJlY29yZGFibGVGbGlwU3RhdGUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjphcHBseUZsaXBT
dGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVhc2VSZWNvcmRlZFN0YXRlKToKKyAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JXaW5kb3dSZXNpemUpOgorICAgICAgICAoZWds
OjpTdXJmYWNlOjpzd2FwKToKKyAgICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuaDoKKyAgICAg
ICAgKiBzcmMvbGliRUdML2xpYkVHTC5jcHA6CisgICAgICAgICogc3JjL2xpYkVHTC9saWJFR0wu
dmNwcm9qOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQmxpdC5jcHA6CisgICAgICAgIChnbDo6
QmxpdDo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKGdsOjpCbGl0OjpzZXRQaXhlbFNoYWRl
cik6CisgICAgICAgIChnbDo6QmxpdDo6c2V0Rm9ybWF0Q29udmVydFNoYWRlcnMpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpCdWZmZXI6OkJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaDoKKyAgICAgICAgKiBzcmMvbGli
R0xFU3YyL0NvbnRleHQuY3BwOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OkNvbnRleHQpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6On5Db250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYWtl
Q3VycmVudCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFy
cmF5QnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJT
dGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVT
aGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6
ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVTaGFkZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRTaGFkZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFByb2dyYW0pOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Ymlu
ZEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmUy
RCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpiaW5kUmVhZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kUmVuZGVy
YnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcik6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpnZXRDdXJyZW50UHJvZ3JhbSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJE
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dEZsb2F0dik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U3RhdGUp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmNsZWFyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpmaW5pc2gpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmZsdXNo
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMyk6CisgICAgICAg
IChnbDo6Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZXRh
Y2hCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRldGFjaFRleHR1cmUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpkZXRhY2hSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEluY29tcGxl
dGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoZ2w6OkF0dHJpYnV0ZVN0YXRlOjpBdHRyaWJ1
dGVTdGF0ZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHA6CisgICAg
ICAgIChnbDo6RnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1
ZmZlcjo6fkZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIpOgor
ICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6
RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVy
OjpkZXRhY2hUZXh0dXJlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVy
YnVmZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAg
KGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1
ZmZlcjo6Z2V0RGVwdGhidWZmZXJTZXJpYWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpn
ZXRTdGVuY2lsYnVmZmVyU2VyaWFsKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3JidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6RnJhbWVi
dWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6
Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6Omhhc1N0
ZW5jaWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjppc011bHRpc2FtcGxlKToKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKGdsOjpEZWZhdWx0
RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZm
ZXI6OmdldFNhbXBsZXMpOgorICAgICAgICAoZ2w6OkRlZmF1bHRGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmg6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpQcm9n
cmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp+UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpkZXRhY2hTaGFkZXIp
OgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmtWYXJ5aW5ncyk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6dW5saW5rKToKKyAgICAgICAgKGds
OjpQcm9ncmFtOjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjphZGRSZWYpOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OmdldFJlZkNvdW50KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpn
ZXREeFZpZXdwb3J0TG9jYXRpb24pOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5o
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGdsOjpSZWZDb3VudE9iamVjdDo6UmVmQ291bnRPYmplY3QpOgorICAgICAgICAoZ2w6
OlJlZkNvdW50T2JqZWN0Ojp+UmVmQ291bnRPYmplY3QpOgorICAgICAgICAoZ2w6OlJlZkNvdW50
T2JqZWN0OjphZGRSZWYpOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0OjpyZWxlYXNlKToK
KyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQpOgorICAgICAg
ICAqIHNyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChnbDo6
UmVmQ291bnRPYmplY3Q6OmlkKToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQ
b2ludGVyOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyKToKKyAgICAgICAgKGdsOjpSZWZD
b3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjp+UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcik6
CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KToKKyAgICAg
ICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjppZCk6CisgICAgICAgIChnbDo6
UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6b3BlcmF0b3IgISApOgorICAgICAgICAoZ2w6
OkJpbmRpbmdQb2ludGVyOjpzZXQpOgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpnZXQp
OgorICAgICAgICAoZ2w6OkJpbmRpbmdQb2ludGVyOjpvcGVyYXRvciAtPiApOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpSZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmlzQ29sb3JidWZmZXIpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVy
YnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0
UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldERlcHRoU3RlbmNp
bCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0
Rm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldEQzREZvcm1hdCk6CisgICAg
ICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1
ZmZlcjo6c2V0U3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6flJl
bmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzRGVwdGhi
dWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZl
cik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0UmVuZGVyVGFyZ2V0KToK
KyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpS
ZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRIZWlnaHQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZl
clN0b3JhZ2U6OnNldFNpemUpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omdl
dEZvcm1hdCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTYW1wbGVzKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZl
cjo6Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjppc0NvbG9yYnVmZmVy
KToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSk6CisgICAgICAgIChnbDo6
Q29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSk6CisgICAgICAgIChnbDo6Q29sb3JidWZmZXI6Omdl
dEJsdWVTaXplKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKToKKyAg
ICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcik6CisgICAg
ICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKToKKyAgICAg
ICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAgICAgICAoZ2w6
OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNTdGVuY2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0
aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU2l6ZSk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2ls
YnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSk6CisgICAgICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6OkRlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZl
cik6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcik6CisgICAgICAgIChn
bDo6RGVwdGhidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAgICAgICAoZ2w6OkRlcHRoYnVmZmVy
Ojppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxi
dWZmZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVmZmVyKToKKyAgICAgICAgKGdsOjpT
dGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjpnZXRTdG9yYWdlKToK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6UmVzb3VyY2VNYW5hZ2VyKToKKyAgICAgICAgKGds
OjpSZXNvdXJjZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIpOgorICAgICAgICAoZ2w6OlJlc291
cmNlTWFuYWdlcjo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OnJlbGVh
c2UpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3JlYXRlQnVmZmVyKToKKyAgICAg
ICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChnbDo6UmVz
b3VyY2VNYW5hZ2VyOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3JlYXRl
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZl
cik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVTaGFkZXIpOgorICAgICAg
ICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6UmVz
b3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFn
ZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpn
ZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Z2V0U2hhZGVyKToKKyAg
ICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmdldFRleHR1cmUpOgorICAgICAgICAoZ2w6OlJl
c291cmNlTWFuYWdlcjo6Z2V0UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2Vy
OjpnZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6c2V0UmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNoZWNrQnVmZmVyQWxs
b2NhdGlvbik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjaGVja1RleHR1cmVBbGxv
Y2F0aW9uKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNoZWNrUmVuZGVyYnVmZmVy
QWxsb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwOgorICAgICAgICAoZ2w6
OlNoYWRlcjo6U2hhZGVyKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmFkZFJlZik6CisgICAgICAg
IChnbDo6U2hhZGVyOjpyZWxlYXNlKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OmdldFJlZkNvdW50
KToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnBhcnNlVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlZl
cnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKToKKyAgICAgICAgKGdsOjpGcmFnbWVudFNoYWRlcjo6
RnJhZ21lbnRTaGFkZXIpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvU2hhZGVyLmg6CisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcDoKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpJ
bWFnZTo6SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAo
Z2w6OlRleHR1cmU6OmdldEJsaXR0ZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNlbGVjdEZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEltYWdlRGF0YSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6bG9hZEFscGhhSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjps
b2FkTHVtaW5hbmNlSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5h
bmNlQWxwaGFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JVQnl0ZUlt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQjU2NUltYWdlRGF0YSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkFVQnl0ZUltYWdlRGF0YSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6bG9hZFJHQkE0NDQ0SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
Ojpsb2FkUkdCQTU1NTFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRCR1JB
SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlOjpzZXRJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0Q29t
cHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZSk6CisgICAgICAg
IChnbDo6VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OlRleHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRGb3JtYXQpOgorICAg
ICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlMkQ6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OnN1YkltYWdlQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb3B5SW1hZ2UpOgorICAgICAgICAo
Z2w6OlRleHR1cmUyRDo6Y29weVN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6Omlz
Q29tcHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGds
OjpUZXh0dXJlQ3ViZU1hcDo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3Vi
SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQp
OgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjppc0NvbXByZXNzZWQpOgorICAgICAgICAo
Z2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRDb2xv
cmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6
OmFkZFJlZik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6
OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5
OjpnZXRXaWR0aCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJv
eHk6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVy
UHJveHk6OmdldEZvcm1hdCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmg6Cisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmRlZjoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52
Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9tYWluLmg6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi91dGlsaXRpZXMuY3BwOgorICAgICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0
Y2gpOgorICAgICAgICAoZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSk6CisgICAgICAgIChnbDo6
SXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAg
KGdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGVzMmR4OjpHZXRTYW1wbGVzRnJvbU11bHRpc2Ft
cGxlVHlwZSk6CisgICAgICAgIChlczJkeDo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMp
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6CisKIDIwMTAtMDgtMTcgIENo
cmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCklu
ZGV4OiBBTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2NjExKQor
KysgQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNiBAQAogCQlGQjM5RDJCMTEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2Vs
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZC
MzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovOyB9OwogCQlGQjM5
RDcyMzEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDcyMDEyMDEwMzIwMDAwODhFNjkgLyogZ2xz
bGFuZy5jcHAgKi87IH07CiAJCUZCMzlENzI0MTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3Rh
Yi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5
RDcyMjEyMDEwMzIwMDAwODhFNjkgLyogZ2xzbGFuZ190YWIuY3BwICovOyB9OwotCQlGQjM5RDc2
RDEyMDExMEZDMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJFMTIwMEYzRTYwMDA4OEU2OSAvKiBS
ZXNvdXJjZUxpbWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsg
fTsgfTsKIAkJRkIzOUQ3NkUxMjAxMTBGQzAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKQEAgLTE3Nyw3
ICsxNzYsNiBAQAogCQlGQjM5RDI2RDEyMDBGMzVBMDAwODhFNjkgLyogVW5mb2xkU2VsZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjZFMTIwMEYzNUEwMDA4OEU2OSAv
KiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFVuZm9s
ZFNlbGVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDI2RjEyMDBGMzVB
MDAwODhFNjkgLyogdW5pc3RkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVu
aXN0ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQjM5RDJCRTEyMDBGM0U2MDAw
ODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0
aCA9IFJlc291cmNlTGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlE
MkJGMTIwMEYzRTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGlu
ZyA9IDQ7IHBhdGggPSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCMzlENzIwMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGdsc2xhbmcuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMv
QU5HTEUvZ2xzbGFuZy5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CUZCMzlENzIxMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMv
QU5HTEUvZ2xzbGFuZ190YWIuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTQxMyw3ICs0MTEsNiBAQAogCQlGQjM5RDJCRDEyMDBGM0U2MDAwODhFNjkgLyogR0xTTEFO
RyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkIzOUQy
QkUxMjAwRjNFNjAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggKi8sCiAJCQkJRkIzOUQyQkYx
MjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gR0xT
TEFORzsKQEAgLTQyNyw3ICs0MjQsNiBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7
CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJRkIz
OUQ3NkQxMjAxMTBGQzAwMDg4RTY5IC8qIFJlc291cmNlTGltaXRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBA
IC00NjEsNyArNDU3LDYgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3Vy
YXRpb25MaXN0ID0gRkIzOUQwNzMxMjAwRUQ5MjAwMDg4RTY5IC8qIEJ1aWxkIGNvbmZpZ3VyYXRp
b24gbGlzdCBmb3IgUEJYUHJvamVjdCAiQU5HTEUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNp
b24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xp
c2gsCkluZGV4OiBBTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDJleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwxMiBAQCB0
eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFVl9FWFQgICAgICAgICAgICAgICAgICAgICAgMHg4MzY4CiAjZW5kaWYKIAorLyog
R0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAqLworI2lmbmRlZiBHTF9FWFRfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4M0YwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgMHg4M0YxCisjZW5kaWYK
KwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwpAQCAtMzUxLDYgKzM1NywyNSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VP
RVM7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBBTkdMRSBleHRlbnNpb24gdG9r
ZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQg
Ki8KKyNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZS
QU1FQlVGRkVSX0FOR0xFICAgICAgICAgMHg4Q0E4CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQU5HTEUgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5E
SU5HX0FOR0xFIDB4OENBNiAvLyBhbGlhcyBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisjZGVmaW5l
IEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRSAweDhDQUEKKyNlbmRpZgorCisvKiBH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19BTkdM
RSAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NVUxUSVNBTVBMRV9BTkdMRSAgICAgMHg4RDU2CisjZGVmaW5lIEdMX01BWF9TQU1QTEVT
X0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NworI2VuZGlmCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgogICogRW5kIG9mIGV4dGVuc2lvbiB0b2tlbnMsIHN0YXJ0IG9mIGNvcnJl
c3BvbmRpbmcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02
MjMsNiArNjQ4LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkEK
ICNkZWZpbmUgR0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFViAxCiAjZW5kaWYKIAor
LyogR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAqLworI2lmbmRlZiBHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQxCisjZGVmaW5lIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDEgMQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogSU1HIGV4dGVuc2lvbiBm
dW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc2Niw2ICs3OTYsMzQgQEAgdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTVEFSVFRJTAogdHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xFTkRUSUxJTkdRQ09NUFJPQykgKEdMYml0ZmllbGQgcHJlc2VydmVNYXNrKTsK
ICNlbmRpZgogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFOR0xFIGV4dGVuc2lvbiBmdW5jdGlv
bnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAq
LworI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFIChHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAs
IEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOwor
I2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEJMSVRGUkFNRUJVRkZFUkFO
R0xFUFJPQykgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNy
Y1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNlbmRpZgorCisvKiBHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUgKEdMZW51bSB0YXJnZXQs
IEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFQU5HTEVQUk9DKSAoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgorCiAj
aWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1Jlc291cmNlTGltaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1Jl
c291cmNlTGltaXRzLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvaW5jbHVkZS9HTFNMQU5H
L1Jlc291cmNlTGltaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjEgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXwotI2RlZmlu
ZSBfUkVTT1VSQ0VfTElNSVRTX0lOQ0xVREVEXwotCi1zdHJ1Y3QgVEJ1aWx0SW5SZXNvdXJjZQot
ewotCWludCBtYXhWZXJ0ZXhBdHRyaWJzOwotCWludCBtYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yczsK
LQlpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7Ci0JaW50IG1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
OwotCWludCBtYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOwotCWludCBtYXhUZXh0dXJlSW1h
Z2VVbml0czsKLQlpbnQgbWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKLQlpbnQgbWF4RHJhd0J1
ZmZlcnM7Ci19OwotI2VuZGlmIC8vIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCkluZGV4OiBB
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL2lu
Y2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNiw4ICs2LDYgQEAK
ICNpZm5kZWYgX0NPTVBJTEVSX0lOVEVSRkFDRV9JTkNMVURFRF8KICNkZWZpbmUgX0NPTVBJTEVS
X0lOVEVSRkFDRV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIlJlc291cmNlTGltaXRzLmgiCi0KIC8v
CiAvLyBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBh
biBPR0wgZHJpdmVyCiAvLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCkBAIC0x
OSwxMCArMTcsMTIgQEAgZXh0ZXJuICJDIiB7CiAvLwogLy8gRHJpdmVyIG11c3QgY2FsbCB0aGlz
IGZpcnN0LCBvbmNlLCBiZWZvcmUgZG9pbmcgYW55IG90aGVyCiAvLyBjb21waWxlciBvcGVyYXRp
b25zLgorLy8gSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5v
bnplcm8sIGVsc2UgemVyby4KIC8vCiBpbnQgU2hJbml0aWFsaXplKCk7CiAvLwogLy8gRHJpdmVy
IHNob3VsZCBjYWxsIHRoaXMgYXQgc2h1dGRvd24uCisvLyBJZiB0aGUgZnVuY3Rpb24gc3VjY2Vl
ZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uemVybywgZWxzZSB6ZXJvLgogLy8KIGludCBTaEZp
bmFsaXplKCk7CiAvLwpAQCAtNDQsNiArNDQsMzIgQEAgdHlwZWRlZiBlbnVtIHsKIH0gRVNoU3Bl
YzsKIAogLy8KKy8vIEltcGxlbWVudGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiByZXNvdXJjZXMg
KGNvbnN0YW50cyBhbmQgZXh0ZW5zaW9ucykuCisvLyBUaGUgbmFtZXMgZm9yIHRoZXNlIHJlc291
cmNlcyBoYXMgYmVlbiBvYnRhaW5lZCBieSBzdHJpcHBpbmcgZ2xfL0dMXy4KKy8vCit0eXBlZGVm
IHN0cnVjdAoreworICAgIC8vIENvbnN0YW50cy4KKyAgICBpbnQgTWF4VmVydGV4QXR0cmliczsK
KyAgICBpbnQgTWF4VmVydGV4VW5pZm9ybVZlY3RvcnM7CisgICAgaW50IE1heFZhcnlpbmdWZWN0
b3JzOworICAgIGludCBNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0czsKKyAgICBpbnQgTWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0czsKKyAgICBpbnQgTWF4VGV4dHVyZUltYWdlVW5pdHM7Cisg
ICAgaW50IE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnM7CisgICAgaW50IE1heERyYXdCdWZmZXJz
OworCisgICAgLy8gRXh0ZW5zaW9ucy4KKyAgICAvLyBTZXQgdG8gMSB0byBlbmFibGUgdGhlIGV4
dGVuc2lvbiwgZWxzZSAwLgorICAgIGludCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Cit9IFRC
dWlsdEluUmVzb3VyY2U7CisKKy8vCisvLyBJbml0aWFsaXplIGJ1aWx0LWluIHJlc291cmNlcyB3
aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgorLy8KK3ZvaWQgU2hJbml0QnVpbHRJblJlc291
cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcyk7CisKKy8vCiAvLyBPcHRpbWl6YXRpb24g
bGV2ZWwgZm9yIHRoZSBjb21waWxlci4KIC8vCiB0eXBlZGVmIGVudW0gewpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9CYXNlVHlwZXMuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvQmFz
ZVR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcgQEAgZW51bSBUUHJlY2lzaW9u
CiAgICAgRWJwSGlnaCwKIH07CiAKLV9faW5saW5lIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0
cmluZyhUUHJlY2lzaW9uIHApCitpbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5n
KFRQcmVjaXNpb24gcCkKIHsKICAgICBzd2l0Y2gocCkKICAgICB7CkBAIC00Nyw3ICs0NywyMiBA
QCBlbnVtIFRCYXNpY1R5cGUKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBi
ZSBkZXByZWNhdGVkPz8KIH07CiAKLV9faW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUg
dHlwZSkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZyhUQmFzaWNUeXBlIHQpCit7
CisgICAgc3dpdGNoICh0KQorICAgIHsKKyAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICBy
ZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRGbG9hdDogICAg
ICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0
SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQi
OyAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAi
c2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAg
ICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgIH0KK30KKworaW5saW5lIGJv
b2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gdHlwZSA+IEVidEd1
YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7CiB9CkBAIC0xMDAs
NyArMTE1LDcgQEAgZW51bSBUUXVhbGlmaWVyCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1
ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCiAv
LwotX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcSkK
K2lubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxKQogewog
ICAgIHN3aXRjaChxKQogICAgIHsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzIsMTUgKzQ3MiwxNSBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluQ29u
c3RhbnRzKGNvbnN0IFRCCiB7CiAgICAgVFN0cmluZ1N0cmVhbSBzOwogCi0gICAgcyA8PCAiY29u
c3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRy
aWJzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMgPSAiIDw8IHJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA8PCAiOyI7CisgICAg
cyA8PCAiY29uc3QgaW50IGdsX01heFZlcnRleEF0dHJpYnMgPSAiIDw8IHJlc291cmNlcy5NYXhW
ZXJ0ZXhBdHRyaWJzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA8PCAi
OyI7CiAKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmFyeWluZ1ZlY3RvcnMgPSAiIDw8IHJl
c291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGds
X01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzID0gIiA8PCByZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heFRleHR1cmVJbWFnZVVu
aXRzID0gIiA8PCByZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPDwgIjsiOwotICAgIHMg
PDwgImNvbnN0IGludCBnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0gIiA8PCByZXNvdXJj
ZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50
IGdsX01heERyYXdCdWZmZXJzID0gIiA8PCByZXNvdXJjZXMubWF4RHJhd0J1ZmZlcnMgPDwgIjsi
OworICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5nVmVjdG9ycyA9ICIgPDwgcmVzb3Vy
Y2VzLk1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHMg
PSAiIDw8IHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7CisgICAgcyA8PCAi
Y29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAiIDw8IHJlc291cmNlcy5N
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xf
TWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA8PCAiOyI7CiAK
ICAgICByZXR1cm4gcy5zdHIoKTsKIH0KQEAgLTU5MSwyMyArNTkxLDIzIEBAIHZvaWQgSWRlbnRp
ZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWEKICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwogCiAgICAgLy8gTWFwIGxhbmd1YWdlLXNw
ZWNpZmljIG9wZXJhdG9ycy4KLSAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsNCi0gICAgY2FzZSBFU2hM
YW5nVmVydGV4Og0KLSAgICAgICAgYnJlYWs7DQotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50Og0K
LSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR4IiwgICBFT3BEUGR4
KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAgLy9z
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BEUGR5KTsgICAgLy8gT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOyAgLy8gT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIGV4dGVuc2lvbg0KLSAgICAgICAgYnJlYWs7DQotICAgIGRlZmF1bHQ6IGJyZWFr
Ow0KLSAgICB9DQorICAgIHN3aXRjaChsYW5ndWFnZSkgeworICAgIGNhc2UgRVNoTGFuZ1ZlcnRl
eDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6CisgICAgICAgIC8v
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9wRFBkeCk7ICAgIC8vIE9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICAgICAgLy9zeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BEUGR5KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICAvL3N5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7ICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0
ZW5zaW9uCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KIAogICAg
IC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2go
bGFuZ3VhZ2UpIHsKICAgICBjYXNlIEVTaExhbmdGcmFnbWVudDogewogICAgICAgICAgICAgLy8g
U2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCiAgICAgICAgICAgICBUVHlwZSBm
cmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCwgZmFsc2UsIHRy
dWUpOwotICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5tYXhEcmF3
QnVmZmVycyk7CisgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1h
eERyYXdCdWZmZXJzKTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkocmV2aXNp
b24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBfSU5JVElBTElaRV9JTkNMVURFRF8KICNkZWZp
bmUgX0lOSVRJQUxJWkVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1Jlc291cmNlTGlt
aXRzLmgiCi0KICNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKICNpbmNsdWRlICJjb21waWxl
ci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCkluZGV4OiBB
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xF
L3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw3MiAr
Niw4OCBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oIgogCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXpl
R2xvYmFscy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIK
KyNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKIAogT1NfVExTSW5kZXggVGhyZWFkSW5p
dGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CiAKIGJvb2wgSW5pdFByb2Nlc3Mo
KQogewogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpIHsKLQkJLy8KLQkJLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudC4KLQkJLy8KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudC4KKyAgICAgICAgLy8KICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIH0KIAogICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9
IE9TX0FsbG9jVExTSW5kZXgoKTsKIAogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKICAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRQcm9jZXNz
KCk6IEZhaWxlZCB0byBhbGxvY2F0ZSBUTFMgYXJlYSBmb3IgaW5pdCBmbGFnIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKLQl9CisgICAgfQogCiAKICAgICBpZiAoIUluaXRpYWxpemVQb29sSW5k
ZXgoKSkgewogICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGlu
aXRhbGl6ZSBnbG9iYWwgcG9vbCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIH0K
IAogICAgIGlmICghSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkpIHsKICAgICAgICAgYXNz
ZXJ0KDAgJiYgIkluaXRQcm9jZXNzKCk6IEZhaWxlZCB0byBpbml0YWxpemUgcGFyc2UgY29udGV4
dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIH0KIAotCUluaXRUaHJlYWQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSW5pdFRocmVhZCgpOwogfQogCitib29sIERl
dGFjaFByb2Nlc3MoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAoVGhy
ZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsKKworICAgIGlmICghRnJl
ZVBhcnNlQ29udGV4dEluZGV4KCkpCisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIEZy
ZWVQb29sSW5kZXgoKTsKKworICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJbml0aWFsaXplSW5k
ZXgpOworICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwor
CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CiAKIGJvb2wgSW5pdFRocmVhZCgpCiB7Ci0JLy8KKyAg
ICAvLwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmUtZW50cmFudAotCS8vCisgICAgLy8KICAg
ICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0J
CWFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFByb2Nlc3MgaGFzbid0IGJlZW4gaW5pdGFsaXNl
ZC4iKTsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTogUHJvY2VzcyBoYXNuJ3Qg
YmVlbiBpbml0YWxpc2VkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIH0KIAog
ICAgIGlmIChPU19HZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0JSW5pdGlhbGl6ZUdsb2JhbFBvb2xzKCk7CisgICAgSW5pdGlh
bGl6ZUdsb2JhbFBvb2xzKCk7CiAKLQlpZiAoIUluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQo
KSkKKyAgICBpZiAoIUluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFPU19TZXRUTFNWYWx1ZShUaHJlYWRJbml0aWFsaXplSW5k
ZXgsICh2b2lkICopMSkpIHsKLQkJYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTogVW5hYmxlIHRv
IHNldCBpbml0IGZsYWcuIik7CisgICAgICAgIGFzc2VydCgwICYmICJJbml0VGhyZWFkKCk6IFVu
YWJsZSB0byBzZXQgaW5pdCBmbGFnLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi0KIGJvb2wgRGV0YWNoVGhyZWFkKCkKIHsKICAg
ICBib29sIHN1Y2Nlc3MgPSB0cnVlOwpAQCAtNzksNDIgKzk1LDIxIEBAIGJvb2wgRGV0YWNoVGhy
ZWFkKCkKICAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID09IE9TX0lOVkFMSURfVExTX0lO
REVYKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotCS8vCi0JLy8gRnVuY3Rpb24gaXMgcmUtZW50
cmFudCBhbmQgdGhpcyB0aHJlYWQgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KLQkvLwor
ICAgIC8vCisgICAgLy8gRnVuY3Rpb24gaXMgcmUtZW50cmFudCBhbmQgdGhpcyB0aHJlYWQgbWF5
IG5vdCBoYXZlIGJlZW4gaW5pdGFsaXNlZC4KKyAgICAvLwogICAgIGlmIChPU19HZXRUTFNWYWx1
ZShUaHJlYWRJbml0aWFsaXplSW5kZXgpICE9IDApIHsKICAgICAgICAgaWYgKCFPU19TZXRUTFNW
YWx1ZShUaHJlYWRJbml0aWFsaXplSW5kZXgsICh2b2lkICopMCkpIHsKLQkJCWFzc2VydCgwICYm
ICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxhZy4iKTsKKyAgICAgICAg
ICAgIGFzc2VydCgwICYmICJEZXRhY2hUaHJlYWQoKTogVW5hYmxlIHRvIGNsZWFyIGluaXQgZmxh
Zy4iKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQkJfQorICAgICAgICB9CiAKLQkJ
RnJlZUdsb2JhbFBvb2xzKCk7Ci0KLQkJaWYgKCFGcmVlUGFyc2VDb250ZXh0KCkpCisgICAgICAg
IGlmICghRnJlZVBhcnNlQ29udGV4dCgpKQogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwot
CX0KLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIERldGFjaFByb2Nlc3MoKQotewot
ICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICBpZiAoVGhyZWFkSW5pdGlhbGl6ZUluZGV4
ID09IE9TX0lOVkFMSURfVExTX0lOREVYKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFNo
RmluYWxpemUoKTsKLQotICAgIHN1Y2Nlc3MgPSBEZXRhY2hUaHJlYWQoKTsKLQotCUZyZWVQb29s
SW5kZXgoKTsKIAotCWlmICghRnJlZVBhcnNlQ29udGV4dEluZGV4KCkpCi0gICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKLQotICAgIE9TX0ZyZWVUTFNJbmRleChUaHJlYWRJbml0aWFsaXplSW5kZXgp
OwotICAgIFRocmVhZEluaXRpYWxpemVJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworICAg
ICAgICBGcmVlR2xvYmFsUG9vbHMoKTsKKyAgICB9CiAKICAgICByZXR1cm4gc3VjY2VzczsKIH0K
KwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCShyZXZpc2lvbiA2NjYxMSkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYs
MTQgKzYsMTEgQEAKICNpZm5kZWYgX19JTklUSUFMSVpFRExMX0gKICNkZWZpbmUgX19JTklUSUFM
SVpFRExMX0gKIAotCi0jaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCi0KLQogYm9vbCBJ
bml0UHJvY2VzcygpOworYm9vbCBEZXRhY2hQcm9jZXNzKCk7CisKIGJvb2wgSW5pdFRocmVhZCgp
OwogYm9vbCBEZXRhY2hUaHJlYWQoKTsKLWJvb2wgRGV0YWNoUHJvY2VzcygpOwogCiAjZW5kaWYg
Ly8gX19JTklUSUFMSVpFRExMX0gKIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emVQYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYsMTIgKzYsMTEg
QEAKIAogI2lmbmRlZiBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KICNkZWZp
bmUgX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCi0jaW5jbHVkZSAiY29tcGls
ZXIvb3NpbmNsdWRlLmgiCiAKIGJvb2wgSW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCk7Ci1i
b29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTsKLWJvb2wgRnJlZVBhcnNlQ29udGV4
dCgpOwogYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKTsKIAorYm9vbCBJbml0aWFsaXplR2xv
YmFsUGFyc2VDb250ZXh0KCk7Citib29sIEZyZWVQYXJzZUNvbnRleHQoKTsKIAogI2VuZGlmIC8v
IF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVEXwpJbmRleDogQU5HTEUvc3JjL2Nv
bXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVy
L0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2lu
Y2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8YWxnb3JpdGht
PgogCiAjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJj
b21waWxlci9RdWFsaWZpZXJBbGl2ZS5oIgpAQCAtMTcsOSArMTgsMTAgQEAKIAogYm9vbCBDb21w
YXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50VW5pb24qIHJp
Z2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpOwogCi1UUHJlY2lz
aW9uIEdldEhpZ2hlc3RQcmVjaXNpb24oIFRQcmVjaXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdo
dCApeworc3RhdGljIFRQcmVjaXNpb24gR2V0SGlnaGVyUHJlY2lzaW9uKCBUUHJlY2lzaW9uIGxl
ZnQsIFRQcmVjaXNpb24gcmlnaHQgKXsKICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0ID8gbGVmdCA6
IHJpZ2h0OwogfQorCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gRmlyc3Qgc2V0IG9mIGZ1
bmN0aW9ucyBhcmUgdG8gaGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9u
LgpAQCAtMTExLDEyICsxMTMsNiBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJp
bmFyeU1hCiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0
LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRU
ZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKLSAgICBpZiAobGVm
dFRlbXBDb25zdGFudCkKLSAgICAgICAgbGVmdFRlbXBDb25zdGFudCA9IGxlZnQtPmdldEFzQ29u
c3RhbnRVbmlvbigpOwotCi0gICAgaWYgKHJpZ2h0VGVtcENvbnN0YW50KQotICAgICAgICByaWdo
dFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLQogICAgIC8vCiAg
ICAgLy8gU2VlIGlmIHdlIGNhbiBmb2xkIGNvbnN0YW50cy4KICAgICAvLwpAQCAtMzA3LDcgKzMw
Myw3IEBAIFRJbnRlcm1BZ2dyZWdhdGUqIFRJbnRlcm1lZGlhdGU6OnNldEFnZ3IKICAgICAvLwog
ICAgIC8vIFNldCB0aGUgb3BlcmF0b3IuCiAgICAgLy8KLSAgICBhZ2dOb2RlLT5zZXRPcGVyYXRv
cihvcCk7CisgICAgYWdnTm9kZS0+c2V0T3Aob3ApOwogICAgIGlmIChsaW5lICE9IDApCiAgICAg
ICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKQEAgLTUxOSw5ICs1MTUsOSBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbW1hKFRJCiAgICAgICAgIHJldHVybiByaWdodDsK
ICAgICB9IGVsc2UgewogICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbW1hQWdncmVnYXRlID0gZ3Jv
d0FnZ3JlZ2F0ZShsZWZ0LCByaWdodCwgbGluZSk7Ci0gICAgICAgIGNvbW1hQWdncmVnYXRlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcGVyYXRvcihFT3BDb21tYSk7CisgICAgICAgIGNvbW1hQWdn
cmVnYXRlLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcChFT3BDb21tYSk7CiAgICAgICAgIGNvbW1h
QWdncmVnYXRlLT5zZXRUeXBlKHJpZ2h0LT5nZXRUeXBlKCkpOwotICAgICAgICBjb21tYUFnZ3Jl
Z2F0ZS0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7Cisg
ICAgICAgIGNvbW1hQWdncmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KTsKICAgICAgICAgcmV0dXJuIGNvbW1hQWdncmVnYXRlOwogICAgIH0KIH0KQEAg
LTY0NCw3ICs2NDAsNyBAQCBib29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKFRJbnRlcm1O
CiAgICAgLy8KICAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dSb290ID0gcm9vdC0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKICAgICBpZiAoYWdnUm9vdCAmJiBhZ2dSb290LT5nZXRPcCgpID09IEVPcE51bGwp
Ci0gICAgICAgIGFnZ1Jvb3QtPnNldE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgYWdn
Um9vdC0+c2V0T3AoRU9wU2VxdWVuY2UpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03NjQs
MTYgKzc2MCw5IEBAIGJvb2wgVEludGVybVVuYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYpCiAvLwog
Ym9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7Ci0gICAg
aW50IHNpemUgPSBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpOwotICAgIGlmIChyaWdodC0+Z2V0Tm9t
aW5hbFNpemUoKSA+IHNpemUpCi0gICAgICAgIHNpemUgPSByaWdodC0+Z2V0Tm9taW5hbFNpemUo
KTsKLQotICAgIFRCYXNpY1R5cGUgdHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOwotCi0gICAg
Ly8KLSAgICAvLyBBcnJheXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgotICAgIC8vCi0gICAg
aWYgKChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgJiYgKGxlZnQtPmdldFR5
cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAvLyBHTFNMIEVTIDIuMCBkb2VzIG5vdCBz
dXBwb3J0IGltcGxpY2l0IHR5cGUgY2FzdGluZy4KKyAgICAvLyBTbyB0aGUgYmFzaWMgdHlwZSBz
aG91bGQgYWx3YXlzIG1hdGNoLgorICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdo
dC0+Z2V0QmFzaWNUeXBlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vCkBAIC03
ODIsMTYgKzc3MSwyNyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBp
CiAgICAgLy8KICAgICBzZXRUeXBlKGxlZnQtPmdldFR5cGUoKSk7CiAKLSAgICBUUHJlY2lzaW9u
IGhpZ2hlc3RQcmVjaXNpb24gPSBHZXRIaWdoZXN0UHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lv
bigpLCByaWdodC0+Z2V0UHJlY2lzaW9uKCkpOwotICAgIGdldFR5cGVQb2ludGVyKCktPmNoYW5n
ZVByZWNpc2lvbihoaWdoZXN0UHJlY2lzaW9uKTsKKyAgICAvLyBUaGUgcmVzdWx0IGdldHMgcHJv
bW90ZWQgdG8gdGhlIGhpZ2hlc3QgcHJlY2lzaW9uLgorICAgIFRQcmVjaXNpb24gaGlnaGVyUHJl
Y2lzaW9uID0gR2V0SGlnaGVyUHJlY2lzaW9uKGxlZnQtPmdldFByZWNpc2lvbigpLCByaWdodC0+
Z2V0UHJlY2lzaW9uKCkpOworICAgIGdldFR5cGVQb2ludGVyKCktPnNldFByZWNpc2lvbihoaWdo
ZXJQcmVjaXNpb24pOworCisgICAgLy8gQmluYXJ5IG9wZXJhdGlvbnMgcmVzdWx0cyBpbiB0ZW1w
b3JhcnkgdmFyaWFibGVzIHVubGVzcyBib3RoCisgICAgLy8gb3BlcmFuZHMgYXJlIGNvbnN0Lgor
ICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVh
bGlmaWVyKCkgIT0gRXZxQ29uc3QpIHsKKyAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgfQogCiAgICAgLy8KICAgICAvLyBBcnJheSBvcGVy
YXRpb25zLgogICAgIC8vCi0gICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0
LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgICAgICAvLworICAgICAgICAv
LyBBcnJheXMgdHlwZXMgaGF2ZSB0byBiZSBleGFjdCBtYXRjaGVzLgorICAgICAgICAvLworICAg
ICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3dpdGNoIChvcCkgewotCiAgICAgICAgICAgICAv
LwogICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAogICAgICAgICAgICAgLy8K
QEAgLTgxMiwxNyArODEyLDE2IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1Np
bmsmIGkKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgaW50IHNp
emUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSk7CisKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiAgQ29kZSBhZnRlciB0aGlzIHRl
c3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKKyAgICAvLyBBbGwgc2NhbGFycy4gQ29k
ZSBhZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKICAgICAvLwog
ICAgIGlmIChzaXplID09IDEpIHsKLQogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0KICAgICAgICAg
ICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAgICAgICAg
ICAvLwpAQCAtODQwLDMzICs4MzksMzYgQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYgaQogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFu
ZDoKICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgorICAgICAgICAgICAgICAgIC8vIEJv
dGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCiAgICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdldEJhc2ljVHlwZSgpICE9
IEVidEJvb2wpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBl
bHNlIHNob3VsZCBoYXZlIG1hdGNoaW5nIHR5cGVzCi0gICAgICAgICAgICAvLwogICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0g
cmlnaHQtPmdldEJhc2ljVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxlZnQtPmlzTWF0
cml4KCkgICAgICE9IHJpZ2h0LT5pc01hdHJpeCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLworICAgIC8vIElmIHdlIHJlYWNoIGhlcmUsIGF0
IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KKyAgICAvLyBU
aGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXguCiAg
ICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwogICAgIC8vCi0gICAgaWYgKCBsZWZ0LT5n
ZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgIGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gMSB8
fAotICAgICAgICByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSBzaXplICYmIHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobGVmdC0+
Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAv
LyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5vdCBtYXRjaDoKKyAgICAgICAg
Ly8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCisgICAgICAgIGlmIChsZWZ0LT5nZXROb21p
bmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT3BlcmF0b3IgY2Fubm90IGJlIG9mIHR5cGUg
cHVyZSBhc3NpZ25tZW50LgorICAgICAgICBpZiAob3AgPT0gRU9wQXNzaWduIHx8IG9wID09IEVP
cEluaXRpYWxpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8K
ICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJpbmVkPwogICAgIC8vCisgICAg
VEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5cGUoKTsKICAgICBzd2l0Y2gg
KG9wKSB7CiAgICAgICAgIGNhc2UgRU9wTXVsOgogICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01h
dHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CkBAIC04NzQsMTIgKzg3NiwxMiBAQCBib29s
IFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICAgICAgICAg
IG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXg7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5
LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNU
eXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9y
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUo
VFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFs
c2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KQEAgLTg5MCw3ICs4OTIs
NyBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGxlYXZlIGFzIGNvbXBvbmVudCBwcm9kdWN0CiAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5
LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJNaXNzaW5nIGVsc2VzIiwg
Z2V0TGluZSgpKTsKQEAgLTkxOSwxOCArOTIxLDE2IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJv
bW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFUZW1wb3Jhcnks
IHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNU
eXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1pc3NpbmcgZWxzZXMiLCBn
ZXRMaW5lKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgogICAgICAgICBj
YXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUo
KSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKICAgICAgICAgY2FzZSBFT3BBZGQ6CiAg
ICAgICAgIGNhc2UgRU9wU3ViOgogICAgICAgICBjYXNlIEVPcERpdjoKQEAgLTkzOCwxMCArOTM4
LDkgQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICBj
YXNlIEVPcFN1YkFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246CiAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAotICAgICAgICAg
ICAgICAgIGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKLSAgICAgICAg
ICAgICAgICBsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5
cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgbGVmdC0+aXNNYXRyaXgo
KSB8fCByaWdodC0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5pc01hdHJp
eCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIEVPcEVxdWFsOgpAQCAtOTUxLDggKzk1MCw3IEBAIGJvb2wgVEludGVybUJpbmFyeTo6
cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgogICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CiAgICAgICAgICAgICBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSB8fAotICAgICAgICAgICAgICAgIGxlZnQtPmlz
VmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkgfHwKLSAgICAgICAgICAgICAgICBsZWZ0LT5n
ZXRCYXNpY1R5cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAg
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NjAsMzAgKzk1OCwxMyBAQCBib29sIFRJ
bnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgLy8KLSAgICAvLyBPbmUgbW9yZSBj
aGVjayBmb3IgYXNzaWdubWVudC4gIFRoZSBSZXN1bHRpbmcgdHlwZSBoYXMgdG8gbWF0Y2ggdGhl
IGxlZnQgb3BlcmFuZC4KLSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBF
T3BBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAgICAgICAgY2FzZSBFT3BB
ZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICBjYXNlIEVPcE11
bEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246Ci0gICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpICE9IGxlZnQtPmdldFR5cGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQorICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIENvbXBhcmVTdHJ1
Y3QoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFy
cmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSkKIHsKLSAgICBUVHlwZUxpc3QqIGZp
ZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUVHlwZUxpc3QqIGZp
ZWxkcyA9IGxlZnROb2RlVHlwZS5nZXRTdHJ1Y3QoKTsKIAogICAgIHNpemVfdCBzdHJ1Y3RTaXpl
ID0gZmllbGRzLT5zaXplKCk7CiAgICAgaW50IGluZGV4ID0gMDsKSW5kZXg6IEFOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091
dHB1dEdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBUT3V0
cHV0R0xTTDo6d3JpdGVGdW5jdGlvblBhcmFtZXRlcgogICAgICAgICAgICAgb3V0IDw8IGFycmF5
QnJhY2tldHModHlwZSk7CiAKICAgICAgICAgLy8gUHV0IGEgY29tbWEgaWYgdGhpcyBpcyBub3Qg
dGhlIGxhc3QgYXJndW1lbnQuCi0gICAgICAgIGlmIChpdGVyICE9IC0tYXJncy5lbmQoKSkKKyAg
ICAgICAgaWYgKGl0ZXIgIT0gYXJncy5lbmQoKSAtIDEpCiAgICAgICAgICAgICBvdXQgPDwgIiwg
IjsKICAgICB9CiB9CkBAIC0zMDQsOCArMzA0LDYgQEAgYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRC
aW5hcnkoVmlzaXQgdmlzaQogCiBib29sIFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCiB7Ci0gICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2Jq
U2luaygpOwotCiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKICAgICAgICAgY2Fz
ZSBFT3BOZWdhdGl2ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAiKC0iLCBOVUxMLCAiKSIpOyBicmVh
azsKQEAgLTY1MCw4ICs2NDgsNiBAQCBib29sIFRPdXRwdXRHTFNMOjp2aXNpdExvb3AoVmlzaXQg
dmlzaXQsCiAKIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQnJhbmNoKiBub2RlKQogewotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG9ialNpbmsoKTsK
LQogICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpCiAgICAgewogICAgICAgICBjYXNlIEVP
cEtpbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRpc2NhcmQiLCBOVUxMLCBOVUxMKTsgYnJlYWs7
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcg
KzE4MSw3IEBAIHZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKIAogICAgICAgICBpZiAobVVzZXNG
cmFnQ29vcmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDQg
ZHhfV2luZG93O1xuIgorICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3
cG9ydDtcbiIKICAgICAgICAgICAgICAgICAgICAidW5pZm9ybSBmbG9hdDIgZHhfRGVwdGg7XG4i
OwogICAgICAgICB9CiAKQEAgLTc5MSwxMSArNzkxLDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dExlZnQoKS0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgMiAqIDI6IG1Vc2VzRXF1YWxNYXQyID0gdHJ1ZTsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIDMgKiAzOiBtVXNlc0VxdWFsTWF0MyA9IHRydWU7IGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSA0ICogNDogbVVzZXNFcXVhbE1hdDQgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbE1hdDMgPSB0cnVl
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogbVVzZXNFcXVhbE1hdDQgPSB0cnVl
OyBicmVhazsKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtODA0LDcgKzgwNCw3IEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldExlZnQoKS0+Z2V0QmFzaWNUeXBlKCkpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRMZWZ0KCktPmdldFNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRMZWZ0KCktPmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzRXF1YWxWZWMyID0gdHJ1ZTsg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsVmVjMyA9IHRy
dWU7IGJyZWFrOwpAQCAtODEzLDcgKzgxMyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5h
cnkoVmlzaXQgdmlzaXQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbElW
ZWMyID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0Vx
dWFsSVZlYzMgPSB0cnVlOyBicmVhazsKQEAgLTgyMiw3ICs4MjIsNyBAQCBib29sIE91dHB1dEhM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0g
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6
ZSgpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OiBtVXNlc0VxdWFsQlZlYzIgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6IG1Vc2VzRXF1YWxCVmVjMyA9IHRydWU7IGJyZWFrOwpAQCAtMTI4OCw3ICsxMjg4LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgY2FzZSBF
T3BWZWN0b3JOb3RFcXVhbDogICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgIT0gIiwgIiki
KTsgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE1vZDoKICAgICAgICAgewot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCkt
PmdldFNpemUoKSkgICAvLyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1l
bnQKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBl
ZCgpLT5nZXROb21pbmFsU2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBm
aXJzdCBhcmd1bWVudAogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIDE6IG1Vc2Vz
TW9kMSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDI6IG1Vc2VzTW9kMiA9IHRy
dWU7IGJyZWFrOwpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aQogICAgICAgY2FzZSBFT3BDcm9zczogICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiY3Jvc3MoIiwgIiwgIiwgIikiKTsgICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wRmFjZUZvcndhcmQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXRTaXplKCkpICAgLy8gTnVtYmVyIG9m
IGNvbXBvbmVudHMgaW4gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSkgICAv
LyBOdW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgIGNhc2UgMTogbVVzZXNGYWNlZm9yd2FyZDEgPSB0cnVlOyBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNGYWNlZm9yd2FyZDIgPSB0cnVlOyBicmVhazsKQEAg
LTE1NTMsNyArMTU1Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChU
SW4KIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIGNvbnN0YW50KQogICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidElu
dCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKVswXS5nZXRJQ29uc3QoKTsKQEAgLTE1NzUsNyArMTU3NSw3IEBAIGJvb2wgT3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KIAogICAgICAgICAgICAgaWYgKGNvbnN0
YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkKKyAgICAgICAg
ICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFu
dC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgY29tcGFyYXRvciA9IHRlc3QtPmdldE9wKCk7CiAgICAgICAgICAgICAgICAgICAg
IGxpbWl0ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7
CkBAIC0xNTk3LDcgKzE1OTcsNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxv
b3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25z
dGFudC0+Z2V0U2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGNvbnN0
YW50LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOwogCkBAIC0xODQ4LDgg
KzE4NDgsOCBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAKICAg
ICBUVHlwZSBjdG9yVHlwZSA9IHR5cGU7CiAgICAgY3RvclR5cGUuY2xlYXJBcnJheW5lc3MoKTsK
LSAgICBjdG9yVHlwZS5jaGFuZ2VQcmVjaXNpb24oRWJwSGlnaCk7Ci0gICAgY3RvclR5cGUuY2hh
bmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgY3RvclR5cGUuc2V0UHJlY2lzaW9uKEVi
cEhpZ2gpOworICAgIGN0b3JUeXBlLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogCiAgICAg
VFN0cmluZyBjdG9yTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCkgPyBkZWNvcmF0ZShuYW1lKSA6IG5h
bWU7CiAKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24gNjY2MTEp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsNyArNDg2LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hl
YwogICAgIH0KICAgICAKICAgICBpZiAoY29uc3RUeXBlKQotICAgICAgICB0eXBlLT5jaGFuZ2VR
dWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3Qp
OwogCiAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSAmJiB0eXBlLT5nZXRBcnJheVNpemUoKSAhPSBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImFycmF5IGNv
bnN0cnVjdG9yIG5lZWRzIG9uZSBhcmd1bWVudCBwZXIgYXJyYXkgZWxlbWVudCIsICJjb25zdHJ1
Y3RvciIsICIiKTsKQEAgLTU4NiwxNCArNTg2LDE0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c2Ft
cGxlckVycm9yQ2hlY2soaW4KIHsKICAgICBpZiAocFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsK
ICAgICAgICAgaWYgKGNvbnRhaW5zU2FtcGxlcigqcFR5cGUudXNlckRlZikpIHsKLSAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlYXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUp
LCAiKHN0cnVjdHVyZSBjb250YWlucyBhIHNhbXBsZXIpIik7CisgICAgICAgICAgICBlcnJvcihs
aW5lLCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiKHN0cnVjdHVyZSBjb250
YWlucyBhIHNhbXBsZXIpIik7CiAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYg
KElzU2FtcGxlcihwVHlwZS50eXBlKSkgewotICAgICAgICBlcnJvcihsaW5lLCByZWFzb24sIFRU
eXBlOjpnZXRCYXNpY1N0cmluZyhwVHlwZS50eXBlKSwgIiIpOworICAgICAgICBlcnJvcihsaW5l
LCByZWFzb24sIGdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtODc5LDkgKzg3OSw5IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
cGFyYW1FcnJvckNoZWNrKGludCAKICAgICB9CiAKICAgICBpZiAocXVhbGlmaWVyID09IEV2cUNv
bnN0KQotICAgICAgICB0eXBlLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3RSZWFkT25seSk7Cisg
ICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihFdnFDb25zdFJlYWRPbmx5KTsKICAgICBlbHNlCi0g
ICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CisgICAgICAgIHR5
cGUtPnNldFF1YWxpZmllcihwYXJhbVF1YWxpZmllcik7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CkBAIC05MTMsMjEgKzkxMywyNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9y
Q2hlY2soCiAvLwogY29uc3QgVEZ1bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24o
aW50IGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKIHsKLSAgICBjb25zdCBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCks
IGJ1aWx0SW4pOworICAgIC8vIEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sg
d2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMgYmVlbgorICAgIC8vIGhpZGRlbiBieSBhIHZh
cmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1lLgorICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJv
bCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWlsdEluKTsKKyAgICBpZiAo
c3ltYm9sID09IDApIHsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICB9CiAKLSAgICBpZiAoc3ltYm9sID09IDAp
IHsgICAgICAgIAorICAgIGlmIChzeW1ib2wgPT0gMCkgewogICAgICAgICBlcnJvcihsaW5lLCAi
bm8gbWF0Y2hpbmcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBmb3VuZCIsIGNhbGwtPmdldE5hbWUoKS5j
X3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmICghIHN5bWJv
bC0+aXNGdW5jdGlvbigpKSB7CisgICAgaWYgKCFzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewogICAg
ICAgICBlcnJvcihsaW5lLCAiZnVuY3Rpb24gbmFtZSBleHBlY3RlZCIsIGNhbGwtPmdldE5hbWUo
KS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKLSAgICBjb25z
dCBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3lt
Ym9sKTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb247CisKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVEZ1bmN0aW9uKj4oc3ltYm9sKTsKIH0KIAogLy8KQEAgLTk3MywxMyArOTc2LDEz
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKFQKICAgICBpZiAocXVh
bGlmaWVyID09IEV2cUNvbnN0KSB7CiAgICAgICAgIGlmIChxdWFsaWZpZXIgIT0gaW5pdGlhbGl6
ZXItPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwg
IiBhc3NpZ25pbmcgbm9uLWNvbnN0YW50IHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5nZXRU
eXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAgICB2
YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgIT0gaW5pdGlhbGl6
ZXItPmdldFR5cGUoKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwgIiBub24tbWF0Y2hpbmcg
dHlwZXMgZm9yIGNvbnN0IGluaXRpYWxpemVyICIsIAogICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKLSAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGluaXRpYWxpemVyLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKQEAgLTk5OCw3ICsxMDAxLDcgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJl
Q29uc3RQb2ludGVyKGNvbnN0QXJyYXkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ZXJyb3IobGluZSwgIiBjYW5ub3QgYXNzaWduIHRvIiwgIj0iLCAiJyVzJyIsIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCkuY2hhbmdlUXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CisgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQ5LDcgKzEwNTIsNyBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjCiAKICAgICBUSW50ZXJt
QWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7CiAgICAgCi0gICAg
VFR5cGVMaXN0OjppdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBUVHlwZUxpc3Q6OmNvbnN0X2l0
ZXJhdG9yIG1lbWJlclR5cGVzOwogICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCiAg
ICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmJlZ2luKCk7CiAgICAgCkBA
IC0xMzQ3LDcgKzEzNTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
QXJyCiAvLwogVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdChUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIFRTb3VyY2VMb2MgbGluZSkKIHsK
LSAgICBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAg
ICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsK
ICAgICBUSW50ZXJtVHlwZWQgKnR5cGVkTm9kZTsKICAgICBpbnQgaW5zdGFuY2VTaXplID0gMDsK
ICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwpAQCAtMTQxMCw2ICsxNDEzLDIwIEBAIGJvb2wg
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dEluZGV4KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQoreworICAgIE9TX1RMU0luZGV4IHRsc2lJbmRleCA9
IEdsb2JhbFBhcnNlQ29udGV4dEluZGV4OworCisgICAgaWYgKEdsb2JhbFBhcnNlQ29udGV4dElu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJGcmVl
UGFyc2VDb250ZXh0SW5kZXgoKTogUGFyc2UgQ29udGV4dCBpbmRleCBub3QgaW5pdGFsaXNlZCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR2xvYmFsUGFyc2VDb250ZXh0
SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKKworICAgIHJldHVybiBPU19GcmVlVExTSW5k
ZXgodGxzaUluZGV4KTsKK30KKwogYm9vbCBJbml0aWFsaXplR2xvYmFsUGFyc2VDb250ZXh0KCkK
IHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpIHsKQEAgLTE0MzUsMTcgKzE0NTIsNiBAQCBib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1UUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0
R2xvYmFsUGFyc2VDb250ZXh0KCkKLXsKLSAgICAvLwotICAgIC8vIE1pbmltYWwgZXJyb3IgY2hl
Y2tpbmcgZm9yIHNwZWVkCi0gICAgLy8KLQotICAgIFRUaHJlYWRQYXJzZUNvbnRleHQgKmxwUGFy
c2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29udGV4dCAqPihPU19HZXRUTFNW
YWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwotCi0gICAgcmV0dXJuIGxwUGFyc2VDb250
ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKLX0KLQogYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkK
IHsKICAgICBpZiAoR2xvYmFsUGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpIHsKQEAgLTE0NjAsMTYgKzE0NjYsMTQgQEAgYm9vbCBGcmVlUGFyc2VDb250ZXh0KCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGcmVlUGFyc2VDb250ZXh0SW5kZXgoKQorVFBhcnNl
Q29udGV4dFBvaW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpCiB7Ci0gICAgT1NfVExTSW5k
ZXggdGxzaUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7Ci0KLSAgICBpZiAoR2xvYmFs
UGFyc2VDb250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNz
ZXJ0KDAgJiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5v
dCBpbml0YWxpc2VkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8KKyAg
ICAvLyBNaW5pbWFsIGVycm9yIGNoZWNraW5nIGZvciBzcGVlZAorICAgIC8vCiAKLSAgICBHbG9i
YWxQYXJzZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworICAgIFRUaHJlYWRQ
YXJzZUNvbnRleHQgKmxwUGFyc2VDb250ZXh0ID0gc3RhdGljX2Nhc3Q8VFRocmVhZFBhcnNlQ29u
dGV4dCAqPihPU19HZXRUTFNWYWx1ZShHbG9iYWxQYXJzZUNvbnRleHRJbmRleCkpOwogCi0gICAg
cmV0dXJuIE9TX0ZyZWVUTFNJbmRleCh0bHNpSW5kZXgpOworICAgIHJldHVybiBscFBhcnNlQ29u
dGV4dC0+bHBHbG9iYWxQYXJzZUNvbnRleHQ7CiB9CisKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxl
ci9Qb29sQWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsMTEgKzE1NywxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAg
c3RydWN0IHRIZWFkZXIgewogICAgICAgICB0SGVhZGVyKHRIZWFkZXIqIG5leHRQYWdlLCBzaXpl
X3QgcGFnZUNvdW50KSA6CisgICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCisgICAgICAg
ICAgICBwYWdlQ291bnQocGFnZUNvdW50KQogI2lmZGVmIEdVQVJEX0JMT0NLUwotICAgICAgICAg
ICAgbGFzdEFsbG9jYXRpb24oMCksCisgICAgICAgICAgLCBsYXN0QWxsb2NhdGlvbigwKQogI2Vu
ZGlmCi0gICAgICAgICAgICBuZXh0UGFnZShuZXh0UGFnZSksCi0gICAgICAgICAgICBwYWdlQ291
bnQocGFnZUNvdW50KSB7IH0KKyAgICAgICAgICAgIHsgfQogCiAgICAgICAgIH50SGVhZGVyKCkg
ewogI2lmZGVmIEdVQVJEX0JMT0NLUwpAQCAtMjYzLDE5ICsyNjQsMjYgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPGNsYXNzIE90aGVyPgogICAgIHBvb2xfYWxsb2NhdG9yKGNvbnN0IHBvb2xfYWxs
b2NhdG9yPE90aGVyPiYgcCkgOiBhbGxvY2F0b3IocC5nZXRBbGxvY2F0b3IoKSkgeyB9CiAKKyNp
ZiBkZWZpbmVkKF9fU1VOUFJPX0NDKSAmJiAhZGVmaW5lZChfUldTVERfQUxMT0NBVE9SKQorICAg
IC8vIGxpYkNTdGQgb24gc29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGRpZmZlcmVudCBhbGxvY2F0ZS9k
ZWFsbG9jYXRlIGludGVyZmFjZS4KKyAgICAvLyBDYWxsZXIgcHJlLWJha2VzIHNpemVvZihUKSBp
bnRvICduJyB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlCisgICAgLy8gYWxsb2Nh
dGVkLCBub3QgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXpl
X3R5cGUgbikgeyAKKyAgICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOwor
ICAgIH0KKyAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCopIHsKKyAg
ICAgICAgcmV0dXJuIGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4pOworICAgIH0KKyAgICB2b2lk
IGRlYWxsb2NhdGUodm9pZCosIHNpemVfdHlwZSkge30KKyNlbHNlCiAgICAgcG9pbnRlciBhbGxv
Y2F0ZShzaXplX3R5cGUgbikgeyAKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9p
bnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobiAqIHNpemVvZihUKSkpOwogICAgIH0KICAg
ICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lkKikgeyAKICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUo
biAqIHNpemVvZihUKSkpOwogICAgIH0KLQotICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6
ZV90eXBlKSB7IH0KLSAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKSB7IH0K
LQotICAgIHBvaW50ZXIgX0NoYXJhbGxvYyhzaXplX3QgbikgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuKSk7Ci0gICAg
fQorICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5cGUpIHt9CisjZW5kaWYgIC8v
IF9SV1NURF9BTExPQ0FUT1IKIAogICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3Qg
VCYgdmFsKSB7IG5ldyAoKHZvaWQgKilwKSBUKHZhbCk7IH0KICAgICB2b2lkIGRlc3Ryb3kocG9p
bnRlciBwKSB7IHAtPlQ6On5UKCk7IH0KSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJM
YW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAJ
KHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MCwxNSArOTAsNDUgQEAgc3RhdGljIGJvb2wgR2VuZXJhdGVCdWls
dEluU3ltYm9sVGFibGUoCiAvLwogaW50IFNoSW5pdGlhbGl6ZSgpCiB7Ci0gICAgYm9vbCByZXQg
PSBJbml0UHJvY2VzcygpOworICAgIGlmICghSW5pdFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gcmV0ID8gMSA6IDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIC8vCi0v
LyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGNvbXBpbGVyIG9iamVj
dHMuCisvLyBDbGVhbnVwIHN5bWJvbCB0YWJsZXMKKy8vCitpbnQgU2hGaW5hbGl6ZSgpCit7Cisg
ICAgaWYgKCFEZXRhY2hQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IDE7Cit9CisKKy8vCisvLyBJbml0aWFsaXplIGJ1aWx0LWluIHJlc291cmNlcyB3aXRoIG1pbmlt
dW0gZXhwZWN0ZWQgdmFsdWVzLgogLy8KK3ZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlKFRCdWls
dEluUmVzb3VyY2UqIHJlc291cmNlcykKK3sKKyAgICAvLyBDb25zdGFudHMuCisgICAgcmVzb3Vy
Y2VzLT5NYXhWZXJ0ZXhBdHRyaWJzID0gODsKKyAgICByZXNvdXJjZXMtPk1heFZlcnRleFVuaWZv
cm1WZWN0b3JzID0gMTI4OworICAgIHJlc291cmNlcy0+TWF4VmFyeWluZ1ZlY3RvcnMgPSA4Owor
ICAgIHJlc291cmNlcy0+TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIHJlc291
cmNlcy0+TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDg7CisgICAgcmVzb3VyY2VzLT5N
YXhUZXh0dXJlSW1hZ2VVbml0cyA9IDg7CisgICAgcmVzb3VyY2VzLT5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLT5NYXhEcmF3QnVmZmVycyA9IDE7CiAKKyAg
ICAvLyBFeHRlbnNpb25zLgorICAgIHJlc291cmNlcy0+T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
ID0gMDsKK30KKworLy8KKy8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ry
b3kgY29tcGlsZXIgb2JqZWN0cy4KKy8vCiBTaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2Uq
IHJlc291cmNlcykKIHsKICAgICBpZiAoIUluaXRUaHJlYWQoKSkKQEAgLTEzMCwxNCArMTYwLDYg
QEAgdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSkKIH0KIAogLy8KLS8vIENsZWFudXAg
c3ltYm9sIHRhYmxlcwotLy8KLWludCBTaEZpbmFsaXplKCkKLXsKLSAgICByZXR1cm4gMTsKLX0K
LQotLy8KIC8vIERvIGFuIGFjdHVhbCBjb21waWxlIG9uIHRoZSBnaXZlbiBzdHJpbmdzLiAgVGhl
IHJlc3VsdCBpcyBsZWZ0IAogLy8gaW4gdGhlIGdpdmVuIGNvbXBpbGUgb2JqZWN0LgogLy8KSW5k
ZXg6IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdM
RS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIGludCBUVHlwZTo6Z2V0U3RydWN0U2l6ZSgpIGNvbnN0CiAgICAgfQogCiAgICAgaWYg
KHN0cnVjdHVyZVNpemUgPT0gMCkKLSAgICAgICAgZm9yIChUVHlwZUxpc3Q6Oml0ZXJhdG9yIHRs
ID0gZ2V0U3RydWN0KCktPmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgpLT5lbmQoKTsgdGwrKykK
KyAgICAgICAgZm9yIChUVHlwZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIHRsID0gZ2V0U3RydWN0KCkt
PmJlZ2luKCk7IHRsICE9IGdldFN0cnVjdCgpLT5lbmQoKTsgdGwrKykKICAgICAgICAgICAgIHN0
cnVjdHVyZVNpemUgKz0gKCgqdGwpLnR5cGUpLT5nZXRPYmplY3RTaXplKCk7CiAKICAgICByZXR1
cm4gc3RydWN0dXJlU2l6ZTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCShyZXZpc2lv
biA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBUVHlwZSYgZ2V0VHlwZSgpIHsgcmV0
dXJuIHR5cGU7IH0gICAgCiAgICAgY29uc3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVy
biB0eXBlOyB9CiAgICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7
IH0KLSAgICB2b2lkIGNoYW5nZVF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBl
LmNoYW5nZVF1YWxpZmllcihxdWFsaWZpZXIpOyB9CisgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1
YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQogICAg
IHZvaWQgdXBkYXRlQXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUgKnQpIHsgYXJyYXlJbmZvcm1h
dGlvblR5cGUgPSB0OyB9CiAgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgeyBy
ZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDI4ICs4MiwyNyBAQCB0eXBlZGVmIFRNYXA8VFR5cGVMaXN0KiwgVFR5cGVMaXN0Kj46
Oml0CiBjbGFzcyBUVHlwZSB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVU
RShHbG9iYWxQb29sQWxsb2NhdG9yKQotICAgIGV4cGxpY2l0IFRUeXBlKFRCYXNpY1R5cGUgdCwg
VFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIGludCBzID0gMSwgYm9v
bCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZv
cm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICBUVHlwZSgpIHt9CisgICAgVFR5cGUo
VEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwg
aW50IHMgPSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAg
IHR5cGUodCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEpLCBzaXplKHMpLCBtYXRyaXgobSks
IGFycmF5KGEpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0cnVj
dHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZp
ZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICB7CisgICAgfQogICAgIGV4
cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIo
cC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJy
YXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUlu
Zm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwLnVzZXJEZWYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBl
TmFtZSgpLmNfc3RyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICBleHBsaWNpdCBUVHlwZShUVHlwZUxpc3QqIHVz
ZXJEZWYsIGNvbnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHAp
LCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXko
ZmFsc2UpLCBhcnJheVNpemUoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5m
b3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIGV4cGxpY2l0IFRUeXBlKCkge30K
LSAgICB2aXJ0dWFsIH5UVHlwZSgpIHt9Ci0KLSAgICBUVHlwZShjb25zdCBUVHlwZSYgdHlwZSkg
eyAqdGhpcyA9IHR5cGU7IH0KKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAu
cHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUpLCBtYXRyaXgo
cC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXplKSwKKyAgICAg
ICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBh
cnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFt
ZSgwKQorICAgIHsKKyAgICAgICAgaWYgKHAudXNlckRlZikgeworICAgICAgICAgICAgc3RydWN0
dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3
UG9vbFRTdHJpbmcocC51c2VyRGVmLT5nZXRUeXBlTmFtZSgpLmNfc3RyKCkpOworICAgICAgICB9
CisgICAgfQorICAgIFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwgY29uc3QgVFN0cmluZyYgbiwg
VFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CisgICAgICAgICAgICB0eXBlKEVidFN0cnVj
dCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUoMSksIG1hdHJp
eChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLAorICAgICAgICAgICAgc3RydWN0
dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5m
b3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkKKyAgICB7CisgICAgICAg
IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICB9CiAKICAgICB2b2lk
IGNvcHlUeXBlKGNvbnN0IFRUeXBlJiBjb3B5T2YsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKQog
ICAgIHsKQEAgLTE1Nyw3NyArMTU2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ld1R5
cGU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0LCBpbnQg
cywgYm9vbCBtLCBib29sIGEsIGludCBhUyA9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyB0eXBlID0gdDsgc2l6ZSA9IHM7IG1hdHJpeCA9IG07IGFycmF5ID0gYTsgYXJyYXlTaXpl
ID0gYVM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHQsIGludCBzLCBi
b29sIG0sIFRUeXBlKiB1c2VyRGVmID0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IHR5cGUgPSB0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHM7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBtOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHVzZXJEZWYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlID0gdXNlckRlZi0+Z2V0U3RydWN0KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBsZWF2ZSBhcnJheSBpbmZvcm1hdGlvbiBpbnRhY3QuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlTmFtZShjb25zdCBU
U3RyaW5nJiBuKSB7IHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRGaWVsZE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBmaWVsZE5hbWUg
PSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOyB9Ci0gICAgdmlydHVhbCBjb25zdCBUU3RyaW5n
JiBnZXRUeXBlTmFtZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBhc3NlcnQodHlwZU5hbWUpOwot
ICAgICAgICByZXR1cm4gKnR5cGVOYW1lOwotICAgIH0KKyAgICBUQmFzaWNUeXBlIGdldEJhc2lj
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICB2b2lkIHNldEJhc2ljVHlwZShUQmFz
aWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgVFN0cmluZyYgZ2V0
RmllbGROYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGFzc2VydChmaWVsZE5hbWUpOwotICAg
ICAgICByZXR1cm4gKmZpZWxkTmFtZTsKLSAgICB9CisgICAgVFByZWNpc2lvbiBnZXRQcmVjaXNp
b24oKSBjb25zdCB7IHJldHVybiBwcmVjaXNpb247IH0KKyAgICB2b2lkIHNldFByZWNpc2lvbihU
UHJlY2lzaW9uIHApIHsgcHJlY2lzaW9uID0gcDsgfQogCi0gICAgdmlydHVhbCBUQmFzaWNUeXBl
IGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICB2aXJ0dWFsIFRQcmVj
aXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gcHJlY2lzaW9uOyB9Ci0gICAgdmly
dHVhbCBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsg
fQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VQcmVjaXNpb24oVFByZWNpc2lvbiBwKSB7IHByZWNp
c2lvbiA9IHA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlUXVhbGlmaWVyKFRRdWFsaWZpZXIg
cSkgeyBxdWFsaWZpZXIgPSBxOyB9CisgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25z
dCB7IHJldHVybiBxdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVy
IHEpIHsgcXVhbGlmaWVyID0gcTsgfQogCiAgICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Yg
c2luZ2xlIGluc3RhbmNlIHR5cGUKLSAgICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemU7IH0KLQotICAgIC8vIEZ1bGwtZGltZW5zaW9uYWwgc2l6ZSBvZiBz
aW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQotICAgIHZpcnR1YWwgaW50IGdldEluc3RhbmNlU2l6ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobWF0cml4KQotICAgICAgICAgICAgcmV0dXJuIHNp
emUgKiBzaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0
cnVlIDogZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJldHVy
biBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQotICAgIGJvb2wgaXNGaWVsZCgpIGNvbnN0IHsgcmV0
dXJuIGZpZWxkTmFtZSAhPSAwOyB9Ci0gICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIGFycmF5U2l6ZTsgfQotICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0g
dHJ1ZTsgYXJyYXlTaXplID0gczsgfQotICAgIHZvaWQgc2V0TWF4QXJyYXlTaXplIChpbnQgcykg
eyBtYXhBcnJheVNpemUgPSBzOyB9Ci0gICAgaW50IGdldE1heEFycmF5U2l6ZSAoKSBjb25zdCB7
IHJldHVybiBtYXhBcnJheVNpemU7IH0KLSAgICB2b2lkIGNsZWFyQXJyYXluZXNzKCkgeyBhcnJh
eSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNpemUgPSAwOyB9Ci0gICAgdm9pZCBz
ZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBhcnJheUluZm9ybWF0aW9uVHlwZSA9
IHQ7IH0KLSAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVy
biBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1ZlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
Y2FsYXIoKSBjb25zdCB7IHJldHVybiBzaXplID09IDEgJiYgIW1hdHJpeCAmJiAhc3RydWN0dXJl
OyB9Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5cGUgdCkg
ewotICAgICAgICBzd2l0Y2ggKHQpIHsKLSAgICAgICAgY2FzZSBFYnRWb2lkOiAgICAgICAgICAg
ICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJib29s
IjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAg
ICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25v
d24gdHlwZSI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJp
bmcoKSBjb25zdCB7IHJldHVybiBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcodHlwZSk7IH0KLSAgICBj
b25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFByZWNp
c2lvblN0cmluZyhwcmVjaXNpb24pOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKTsgfQot
ICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgeyByZXR1cm4gc3RydWN0dXJlOyB9Ci0KKyAgICBp
bnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9CisgICAgdm9pZCBzZXRO
b21pbmFsU2l6ZShpbnQgcykgeyBzaXplID0gczsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5n
bGUgaW5zdGFuY2Ugb2YgdHlwZQogICAgIGludCBnZXRPYmplY3RTaXplKCkgY29uc3QKICAgICB7
CiAgICAgICAgIGludCB0b3RhbFNpemU7CkBAIC0yNDUsNyArMTg2LDQ1IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAgICB9CiAKKyAgICBib29sIGlzTWF0cml4KCkgY29u
c3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgdm9pZCBzZXRNYXRyaXgo
Ym9vbCBtKSB7IG1hdHJpeCA9IG07IH0KKworICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0ICB7IHJl
dHVybiBhcnJheSA/IHRydWUgOiBmYWxzZTsgfQorICAgIGludCBnZXRBcnJheVNpemUoKSBjb25z
dCB7IHJldHVybiBhcnJheVNpemU7IH0KKyAgICB2b2lkIHNldEFycmF5U2l6ZShpbnQgcykgeyBh
cnJheSA9IHRydWU7IGFycmF5U2l6ZSA9IHM7IH0KKyAgICBpbnQgZ2V0TWF4QXJyYXlTaXplICgp
IGNvbnN0IHsgcmV0dXJuIG1heEFycmF5U2l6ZTsgfQorICAgIHZvaWQgc2V0TWF4QXJyYXlTaXpl
IChpbnQgcykgeyBtYXhBcnJheVNpemUgPSBzOyB9CisgICAgdm9pZCBjbGVhckFycmF5bmVzcygp
IHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgbWF4QXJyYXlTaXplID0gMDsgfQorICAg
IHZvaWQgc2V0QXJyYXlJbmZvcm1hdGlvblR5cGUoVFR5cGUqIHQpIHsgYXJyYXlJbmZvcm1hdGlv
blR5cGUgPSB0OyB9CisgICAgVFR5cGUqIGdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkgY29uc3Qg
eyByZXR1cm4gYXJyYXlJbmZvcm1hdGlvblR5cGU7IH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBj
b25zdCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9CisgICAgYm9vbCBpc1NjYWxhcigp
IGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKwog
ICAgIFRUeXBlTGlzdCogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9Cisg
ICAgdm9pZCBzZXRTdHJ1Y3QoVFR5cGVMaXN0KiBzKSB7IHN0cnVjdHVyZSA9IHM7IH0KKworICAg
IGNvbnN0IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2Vy
dCh0eXBlTmFtZSk7CisgICAgICAgIHJldHVybiAqdHlwZU5hbWU7CisgICAgfQorICAgIHZvaWQg
c2V0VHlwZU5hbWUoY29uc3QgVFN0cmluZyYgbikKKyAgICB7CisgICAgICAgIHR5cGVOYW1lID0g
TmV3UG9vbFRTdHJpbmcobi5jX3N0cigpKTsKKyAgICB9CisKKyAgICBib29sIGlzRmllbGQoKSBj
b25zdCB7IHJldHVybiBmaWVsZE5hbWUgIT0gMDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEZp
ZWxkTmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBhc3NlcnQoZmllbGROYW1lKTsKKyAgICAg
ICAgcmV0dXJuICpmaWVsZE5hbWU7CisgICAgfQorICAgIHZvaWQgc2V0RmllbGROYW1lKGNvbnN0
IFRTdHJpbmcmIG4pCisgICAgeworICAgICAgICBmaWVsZE5hbWUgPSBOZXdQb29sVFN0cmluZyhu
LmNfc3RyKCkpOworICAgIH0KKwogICAgIFRTdHJpbmcmIGdldE1hbmdsZWROYW1lKCkgewogICAg
ICAgICBpZiAoIW1hbmdsZWQpIHsKICAgICAgICAgICAgIG1hbmdsZWQgPSBOZXdQb29sVFN0cmlu
ZygiIik7CkBAIC0yNTUsNiArMjM0LDcgQEAgcHVibGljOgogCiAgICAgICAgIHJldHVybiAqbWFu
Z2xlZDsKICAgICB9CisKICAgICBib29sIHNhbWVFbGVtZW50VHlwZShjb25zdCBUVHlwZSYgcmln
aHQpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgJiYK
ICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PSByaWdodC5zaXplICAgJiYKQEAgLTI4Miw2ICsy
NjIsMTAgQEAgcHVibGljOgogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBj
b25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6Z2V0QmFzaWNTdHJp
bmcodHlwZSk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoKSBjb25zdCB7
IHJldHVybiA6OmdldFByZWNpc2lvblN0cmluZyhwcmVjaXNpb24pOyB9CisgICAgY29uc3QgY2hh
ciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRRdWFsaWZpZXJTdHJp
bmcocXVhbGlmaWVyKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdDsK
IAogcHJvdGVjdGVkOgpAQCAtMjk1LDExICsyNzksMTIgQEAgcHJvdGVjdGVkOgogICAgIHVuc2ln
bmVkIGludCBtYXRyaXggIDogMTsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXkgICA6IDE7CiAgICAg
aW50IGFycmF5U2l6ZTsKKyAgICBpbnQgbWF4QXJyYXlTaXplOworICAgIFRUeXBlKiBhcnJheUlu
Zm9ybWF0aW9uVHlwZTsKIAogICAgIFRUeXBlTGlzdCogc3RydWN0dXJlOyAgICAgIC8vIDAgdW5s
ZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKICAgICBtdXRhYmxlIGludCBzdHJ1Y3R1cmVTaXplOwotICAg
IGludCBtYXhBcnJheVNpemU7Ci0gICAgVFR5cGUqIGFycmF5SW5mb3JtYXRpb25UeXBlOworCiAg
ICAgVFN0cmluZyAqZmllbGROYW1lOyAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgbmFt
ZXMKICAgICBUU3RyaW5nICptYW5nbGVkOwogICAgIFRTdHJpbmcgKnR5cGVOYW1lOyAgICAgICAg
ICAvLyBmb3Igc3RydWN0dXJlIGZpZWxkIHR5cGUgbmFtZQpJbmRleDogQU5HTEUvc3JjL2NvbXBp
bGVyL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5s
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwJKHdvcmtp
bmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBpbnQgUGFQYXJzZVN0cmluZ3MoY2hhciogYXJn
dltdLCBpbnQgc3RyCiAgICAKICAgICBpZiAoKmNwcC0+UGFTdHJMZW4gPj0gMCkgeyAgICAKICAg
ICAgICAgaW50IHJldCA9IHl5cGFyc2UoKHZvaWQqKSgmcGFyc2VDb250ZXh0TG9jYWwpKTsKLSAg
ICAgICAgaWYgKGNwcC0+Q29tcGlsZUVycm9yID09IDEgfHwgcGFyc2VDb250ZXh0TG9jYWwucmVj
b3ZlcmVkRnJvbUVycm9yIHx8IHBhcnNlQ29udGV4dExvY2FsLm51bUVycm9ycyA+IDApCisgICAg
ICAgIGlmIChyZXQgfHwgY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2Nh
bC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkK
ICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVy
biAwOwpAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10s
IGludCBzdHIKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgeXllcnJvcihjaGFyICpzKSAK
K3ZvaWQgeXllcnJvcihjb25zdCBjaGFyICpzKSAKIHsKICAgICBpZiAoKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPkFmdGVyRU9GKSB7CiAgICAgICAgIGlmIChjcHAtPnRva2Vuc0JlZm9yZUVP
RiA9PSAxKSB7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkJKHJldmlzaW9uIDY2NjExKQorKysgQU5H
TEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBjb21waWxlci90b29scy4gUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4CiAjZGVmaW5lIHBhcnNl
Q29udGV4dCAoKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkpCiAjZGVmaW5lIFlZ
TEVYX1BBUkFNIHBhcnNlQ29udGV4dExvY2FsCiAjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZ
U1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQotZXh0ZXJuIHZvaWQgeXll
cnJvcihjaGFyKik7CitleHRlcm4gdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIqKTsKIAogI2RlZmlu
ZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNo
TGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMTEsNyAr
MzExLDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
VFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSwgJDEtPmdldE5vbWluYWxTaXplKCksICQxLT5pc01hdHJpeCgpKSk7CiAKICAgICAgICAgICAg
IGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQotICAgICAgICAg
ICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOwor
ICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29u
c3QpOwogICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpICYmICQxLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCiAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlw
ZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsICQxLT5n
ZXROb21pbmFsU2l6ZSgpKSk7CiAgICAgICAgIGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKQpAQCAt
Mzg5LDcgKzM4OSw3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKICAgICAgICAg
ICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgVFR5cGVMaXN0KiBmaWVs
ZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAgICAgY29uc3QgVFR5cGVM
aXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYg
KGZpZWxkcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7CiAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MTMsNyArNDEzLDcg
QEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNl
dFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3Ry
dWN0dXJlIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVj
dHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+Y2hhbmdlUXVh
bGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAg
LTY3Myw3ICs2NzMsNyBAQCBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5vdCBjb25zdHJ1
Y3QgdGhpcyB0eXBlIiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVj
dCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIpOwogICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQxLnR5cGUgPSBF
YnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwpAQCAtMTAw
NywxMiArMTAwNywxMiBAQCBkZWNsYXJhdGlvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBwcm90b3R5cGUtPnNldE9wZXJhdG9yKEVPcFByb3RvdHlwZSk7Cisg
ICAgICAgIHByb3RvdHlwZS0+c2V0T3AoRU9wUHJvdG90eXBlKTsKICAgICAgICAgJCQgPSBwcm90
b3R5cGU7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKICAg
ICAgICAgaWYgKCQxLmludGVybUFnZ3JlZ2F0ZSkKLSAgICAgICAgICAgICQxLmludGVybUFnZ3Jl
Z2F0ZS0+c2V0T3BlcmF0b3IoRU9wRGVjbGFyYXRpb24pOworICAgICAgICAgICAgJDEuaW50ZXJt
QWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CiAgICAgICAgICQkID0gJDEuaW50ZXJt
QWdncmVnYXRlOwogICAgIH0KICAgICB8IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVhbGlmaWVyIHR5
cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VNSUNPTE9OIHsKQEAgLTE3OTUsMTkgKzE3OTUsMjQgQEAg
c3RydWN0X2RlY2xhcmF0aW9uCiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vdyBhc3BlY3RzIG9mIHR5cGUs
IGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBh
bHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCiAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0VHlwZSgkMS50eXBlLCAkMS5zaXpl
LCAkMS5tYXRyaXgsICQxLnVzZXJEZWYpOworICAgICAgICAgICAgVFR5cGUqIHR5cGUgPSAoKiQk
KVtpXS50eXBlOworICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCQxLnR5cGUpOworICAg
ICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoJDEuc2l6ZSk7CisgICAgICAgICAgICB0eXBl
LT5zZXRNYXRyaXgoJDEubWF0cml4KTsKIAogICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJy
YXlzIG9mIGFycmF5cwotICAgICAgICAgICAgaWYgKCgqJCQpW2ldLnR5cGUtPmlzQXJyYXkoKSkg
eworICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewogICAgICAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDEubGluZSwgJDEpKQogICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5z
ZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQot
ICAgICAgICAgICAgICAgICgqJCQpW2ldLnR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdl
dFR5cGVOYW1lKCkpOworICAgICAgICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZSgkMS5hcnJh
eVNpemUpOworICAgICAgICAgICAgaWYgKCQxLnVzZXJEZWYpIHsKKyAgICAgICAgICAgICAgICB0
eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0KCkpOworICAgICAgICAgICAgICAg
IHR5cGUtPnNldFR5cGVOYW1lKCQxLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIDsKQEAgLTE4NzMsNyArMTg3OCw3IEBAIGNvbXBv
dW5kX3N0YXRlbWVudAogICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7ICQkID0gMDsgfQog
ICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9IHN0
YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfSBSSUdIVF9C
UkFDRSB7CiAgICAgICAgIGlmICgkMyAhPSAwKQotICAgICAgICAgICAgJDMtPnNldE9wZXJhdG9y
KEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQzLT5zZXRPcChFT3BTZXF1ZW5jZSk7CiAgICAg
ICAgICQkID0gJDM7CiAgICAgfQogICAgIDsKQEAgLTE4OTAsNyArMTg5NSw3IEBAIGNvbXBvdW5k
X3N0YXRlbWVudF9ub19uZXdfc2NvcGUKICAgICB9CiAgICAgfCBMRUZUX0JSQUNFIHN0YXRlbWVu
dF9saXN0IFJJR0hUX0JSQUNFIHsKICAgICAgICAgaWYgKCQyKQotICAgICAgICAgICAgJDItPnNl
dE9wZXJhdG9yKEVPcFNlcXVlbmNlKTsKKyAgICAgICAgICAgICQyLT5zZXRPcChFT3BTZXF1ZW5j
ZSk7CiAgICAgICAgICQkID0gJDI7CiAgICAgfQogICAgIDsKSW5kZXg6IEFOR0xFL3NyYy9jb21w
aWxlci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvaW50
ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsOCArMjAzLDEwIEBAIHB1YmxpYzoKICAg
ICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCiAKICAgICBU
SW50ZXJtTm9kZSgpIDogbGluZSgwKSB7fQotICAgIHZpcnR1YWwgVFNvdXJjZUxvYyBnZXRMaW5l
KCkgY29uc3QgeyByZXR1cm4gbGluZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKFRTb3Vy
Y2VMb2MgbCkgeyBsaW5lID0gbDsgfQorCisgICAgVFNvdXJjZUxvYyBnZXRMaW5lKCkgY29uc3Qg
eyByZXR1cm4gbGluZTsgfQorICAgIHZvaWQgc2V0TGluZShUU291cmNlTG9jIGwpIHsgbGluZSA9
IGw7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKikgPSAw
OwogICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRBc1R5cGVkKCkgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgVEludGVybUNvbnN0YW50VW5pb24qIGdldEFzQ29uc3RhbnRVbmlvbigpIHsg
cmV0dXJuIDA7IH0KQEAgLTIxNSw2ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBU
SW50ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIH5U
SW50ZXJtTm9kZSgpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVFNvdXJjZUxvYyBsaW5lOwogfTsK
QEAgLTIzMywyMiArMjM2LDIzIEBAIHN0cnVjdCBUSW50ZXJtTm9kZVBhaXIgewogY2xhc3MgVElu
dGVybVR5cGVkIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKIHB1YmxpYzoKICAgICBUSW50ZXJtVHlw
ZWQoY29uc3QgVFR5cGUmIHQpIDogdHlwZSh0KSAgeyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlw
ZWQqIGdldEFzVHlwZWQoKSAgICAgICAgIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VHlwZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQotICAgIHZpcnR1YWwgY29u
c3QgVFR5cGUmIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9Ci0gICAgdmlydHVhbCBU
VHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAmdHlwZTsgfQotCi0gICAgdmlydHVhbCBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBl
KCk7IH0KLSAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQotICAgIHZpcnR1YWwgVFByZWNpc2lvbiBnZXRQcmVj
aXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigpOyB9Ci0gICAgdmlydHVh
bCBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldE5vbWluYWxTaXpl
KCk7IH0KLSAgICB2aXJ0dWFsIGludCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRJ
bnN0YW5jZVNpemUoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5KCkgIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNBcnJheSgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVmVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2Nh
bGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9Ci0gICAgY29uc3QgY2hhciog
Z2V0QmFzaWNTdHJpbmcoKSAgICAgIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmco
KTsgfQotICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpICBjb25zdCB7IHJldHVy
biB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CisgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQq
IGdldEFzVHlwZWQoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICB2b2lkIHNldFR5cGUoY29uc3Qg
VFR5cGUmIHQpIHsgdHlwZSA9IHQ7IH0KKyAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUVHlwZSogZ2V0VHlwZVBvaW50ZXIoKSB7IHJldHVybiAm
dHlwZTsgfQorCisgICAgVEJhc2ljVHlwZSBnZXRCYXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0
eXBlLmdldEJhc2ljVHlwZSgpOyB9CisgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25z
dCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9CisgICAgVFByZWNpc2lvbiBnZXRQcmVj
aXNpb24oKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFByZWNpc2lvbigpOyB9CisgICAgaW50IGdl
dE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXROb21pbmFsU2l6ZSgpOyB9Cisg
ICAgCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsg
fQorICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQor
ICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KKyAg
ICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAg
Y29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEJhc2lj
U3RyaW5nKCk7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoKSBjb25zdCB7
IHJldHVybiB0eXBlLmdldFF1YWxpZmllclN0cmluZygpOyB9CiAgICAgVFN0cmluZyBnZXRDb21w
bGV0ZVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29tcGxldGVTdHJpbmcoKTsgfQog
CiBwcm90ZWN0ZWQ6CkBAIC0yNjYsMTMgKzI3MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB0
ZXN0KGFUZXN0KSwKICAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJtaW5hbCksCiAgICAgICAgICAg
ICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorCiAgICAgdmlydHVhbCBUSW50ZXJtTG9vcCogZ2V0QXNM
b29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVElu
dGVybVRyYXZlcnNlciopOworCiAgICAgVEludGVybU5vZGUgKmdldEluaXQoKSB7IHJldHVybiBp
bml0OyB9CiAgICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9CiAgICAg
VEludGVybVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVzdDsgfQogICAgIFRJbnRlcm1UeXBl
ZCAqZ2V0VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsgfQogICAgIGJvb2wgdGVzdEZpcnN0
KCkgeyByZXR1cm4gZmlyc3Q7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1Ob2RlICppbml0
OwogICAgIFRJbnRlcm1Ob2RlICpib2R5OyAgICAgICAvLyBjb2RlIHRvIGxvb3Agb3ZlcgpAQCAt
Mjg5LDkgKzI5NiwxMiBAQCBwdWJsaWM6CiAgICAgVEludGVybUJyYW5jaChUT3BlcmF0b3Igb3As
IFRJbnRlcm1UeXBlZCogZSkgOgogICAgICAgICAgICAgZmxvd09wKG9wKSwKICAgICAgICAgICAg
IGV4cHJlc3Npb24oZSkgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRy
YXZlcnNlciopOworCiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0dXJuIGZsb3dPcDsg
fQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJuIGV4cHJlc3Npb247
IH0KKwogcHJvdGVjdGVkOgogICAgIFRPcGVyYXRvciBmbG93T3A7CiAgICAgVEludGVybVR5cGVk
KiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRl
bWVudHMKQEAgLTMwNywxMCArMzE3LDEzIEBAIHB1YmxpYzoKICAgICAvLyBpdCBpcyBlc3NlbnRp
YWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50ZXJt
U3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAogICAg
ICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07fSAKLSAgICB2
aXJ0dWFsIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9Ci0gICAgdmlydHVhbCBjb25z
dCBUU3RyaW5nJiBnZXRTeW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7ICB9CisKKyAgICBp
bnQgZ2V0SWQoKSBjb25zdCB7IHJldHVybiBpZDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldFN5
bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHRyYXZl
cnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKICAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFz
U3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KKwogcHJvdGVjdGVkOgogICAgIGludCBpZDsK
ICAgICBUU3RyaW5nIHN5bWJvbDsKQEAgLTMxOSwxMSArMzMyLDE1IEBAIHByb3RlY3RlZDoKIGNs
YXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CiBwdWJsaWM6
CiAgICAgVEludGVybUNvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiAqdW5pb25Qb2ludGVyLCBj
b25zdCBUVHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIHVuaW9uQXJyYXlQb2ludGVyKHVuaW9u
UG9pbnRlcikgeyB9CisKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5UG9pbnRlcigp
IGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAgdm9pZCBzZXRVbmlvbkFy
cmF5UG9pbnRlcihDb25zdGFudFVuaW9uICpjKSB7IHVuaW9uQXJyYXlQb2ludGVyID0gYzsgfQor
CiAgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVuaW9uKCkg
IHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZl
cnNlciogKTsKLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZm9sZChUT3BlcmF0b3IsIFRJbnRl
cm1UeXBlZCosIFRJbmZvU2luayYpOworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7CisKKyAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBUSW50ZXJt
VHlwZWQqLCBUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgogICAgIENvbnN0YW50VW5pb24gKnVu
aW9uQXJyYXlQb2ludGVyOwogfTsKQEAgLTMzNCw5ICszNTEsMTEgQEAgcHJvdGVjdGVkOgogY2xh
c3MgVEludGVybU9wZXJhdG9yIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CiBwdWJsaWM6CiAgICAg
VE9wZXJhdG9yIGdldE9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKyAgICB2b2lkIHNldE9wKFRP
cGVyYXRvciBvKSB7IG9wID0gbzsgfQorCiAgICAgYm9vbCBtb2RpZmllc1N0YXRlKCkgY29uc3Q7
CiAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHByb21v
dGUoVEluZm9TaW5rJikgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVy
bU9wZXJhdG9yKFRPcGVyYXRvciBvKSA6IFRJbnRlcm1UeXBlZChUVHlwZShFYnRGbG9hdCwgRWJw
VW5kZWZpbmVkKSksIG9wKG8pIHt9CiAgICAgVEludGVybU9wZXJhdG9yKFRPcGVyYXRvciBvLCBU
VHlwZSYgdCkgOiBUSW50ZXJtVHlwZWQodCksIG9wKG8pIHt9ICAgCkBAIC0zNDksMTMgKzM2OCwx
NiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUSW50ZXJtQmluYXJ5IDogcHVibGljIFRJbnRlcm1PcGVy
YXRvciB7CiBwdWJsaWM6CiAgICAgVEludGVybUJpbmFyeShUT3BlcmF0b3IgbykgOiBUSW50ZXJt
T3BlcmF0b3Iobykge30KLSAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWZ0KFRJbnRlcm1UeXBlZCogbikgeyBsZWZ0ID0g
bjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQg
PSBuOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldExlZnQoKSBjb25zdCB7IHJldHVy
biBsZWZ0OyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gcmlnaHQ7IH0KKwogICAgIHZpcnR1YWwgVEludGVybUJpbmFyeSogZ2V0QXNCaW5hcnlO
b2RlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgYm9vbCBwcm9tb3RlKFRJbmZvU2lu
ayYpOworICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisKKyAg
ICB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7IGxlZnQgPSBuOyB9CisgICAgdm9pZCBz
ZXRSaWdodChUSW50ZXJtVHlwZWQqIG4pIHsgcmlnaHQgPSBuOyB9CisgICAgVEludGVybVR5cGVk
KiBnZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gbGVmdDsgfQorICAgIFRJbnRlcm1UeXBlZCogZ2V0
UmlnaHQoKSBjb25zdCB7IHJldHVybiByaWdodDsgfQorICAgIGJvb2wgcHJvbW90ZShUSW5mb1Np
bmsmKTsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKICAgICBUSW50ZXJt
VHlwZWQqIHJpZ2h0OwpAQCAtMzY4LDExICszOTAsMTQgQEAgY2xhc3MgVEludGVybVVuYXJ5IDog
cHVibGljIFRJbnRlcm1PcGVyYQogcHVibGljOgogICAgIFRJbnRlcm1VbmFyeShUT3BlcmF0b3Ig
bywgVFR5cGUmIHQpIDogVEludGVybU9wZXJhdG9yKG8sIHQpLCBvcGVyYW5kKDApIHt9CiAgICAg
VEludGVybVVuYXJ5KFRPcGVyYXRvciBvKSA6IFRJbnRlcm1PcGVyYXRvcihvKSwgb3BlcmFuZCgw
KSB7fQorCiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87
IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0T3BlcmFuZCgpIHsgcmV0dXJuIG9wZXJh
bmQ7IH0KICAgICB2aXJ0dWFsIFRJbnRlcm1VbmFyeSogZ2V0QXNVbmFyeU5vZGUoKSB7IHJldHVy
biB0aGlzOyB9Ci0gICAgdmlydHVhbCBib29sIHByb21vdGUoVEluZm9TaW5rJik7CisKKyAgICB2
b2lkIHNldE9wZXJhbmQoVEludGVybVR5cGVkKiBvKSB7IG9wZXJhbmQgPSBvOyB9CisgICAgVElu
dGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1cm4gb3BlcmFuZDsgfSAgICAKKyAgICBib29s
IHByb21vdGUoVEluZm9TaW5rJik7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIG9w
ZXJhbmQ7CiB9OwpAQCAtMzg3LDIxICs0MTIsMjQgQEAgcHVibGljOgogICAgIFRJbnRlcm1BZ2dy
ZWdhdGUoKSA6IFRJbnRlcm1PcGVyYXRvcihFT3BOdWxsKSwgdXNlckRlZmluZWQoZmFsc2UpLCBw
cmFnbWFUYWJsZSgwKSB7IH0KICAgICBUSW50ZXJtQWdncmVnYXRlKFRPcGVyYXRvciBvKSA6IFRJ
bnRlcm1PcGVyYXRvcihvKSwgcHJhZ21hVGFibGUoMCkgeyB9CiAgICAgflRJbnRlcm1BZ2dyZWdh
dGUoKSB7IGRlbGV0ZSBwcmFnbWFUYWJsZTsgfQorCiAgICAgdmlydHVhbCBUSW50ZXJtQWdncmVn
YXRlKiBnZXRBc0FnZ3JlZ2F0ZSgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0T3BlcmF0b3IoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJt
U2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBuOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9Ci0gICAgdmlydHVhbCBU
UXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1cm4gcXVhbGlmaWVyOyB9CisKKyAg
ICBUSW50ZXJtU2VxdWVuY2UmIGdldFNlcXVlbmNlKCkgeyByZXR1cm4gc2VxdWVuY2U7IH0KKyAg
ICB2b2lkIHNldE5hbWUoY29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQorICAgIGNvbnN0
IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CisKKyAgICB2b2lkIHNl
dFVzZXJEZWZpbmVkKCkgeyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KKyAgICBib29sIGlzVXNlckRl
ZmluZWQoKSB7IHJldHVybiB1c2VyRGVmaW5lZDsgfQorICAgIFRRdWFsaWZpZXJMaXN0JiBnZXRR
dWFsaWZpZXIoKSB7IHJldHVybiBxdWFsaWZpZXI7IH0KICAgICB2b2lkIHNldE9wdGltaXplKGJv
b2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KLSAgICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1
ZyA9IGQ7IH0KICAgICBib29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KKyAg
ICB2b2lkIHNldERlYnVnKGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KICAgICBib29sIGdldERlYnVn
KCkgeyByZXR1cm4gZGVidWc7IH0KICAgICB2b2lkIGFkZFRvUHJhZ21hVGFibGUoY29uc3QgVFBy
YWdtYVRhYmxlJiBwVGFibGUpOwogICAgIGNvbnN0IFRQcmFnbWFUYWJsZSYgZ2V0UHJhZ21hVGFi
bGUoKSBjb25zdCB7IHJldHVybiAqcHJhZ21hVGFibGU7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJ
bnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5
IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRl
cm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpAQCAtNDIzLDEy
ICs0NTEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgVEludGVybVR5cGVkKFRUeXBlKEVidFZv
aWQsIEVicFVuZGVmaW5lZCkpLCBjb25kaXRpb24oY29uZCksIHRydWVCbG9jayh0cnVlQiksIGZh
bHNlQmxvY2soZmFsc2VCKSB7fQogICAgIFRJbnRlcm1TZWxlY3Rpb24oVEludGVybVR5cGVkKiBj
b25kLCBUSW50ZXJtTm9kZSogdHJ1ZUIsIFRJbnRlcm1Ob2RlKiBmYWxzZUIsIGNvbnN0IFRUeXBl
JiB0eXBlKSA6CiAgICAgICAgICAgICBUSW50ZXJtVHlwZWQodHlwZSksIGNvbmRpdGlvbihjb25k
KSwgdHJ1ZUJsb2NrKHRydWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CisKICAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOworCiAgICAgYm9vbCB1c2VzVGVybmFy
eU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZDsgfQot
ICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNv
bmRpdGlvbjsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIHRydWVCbG9jazsgfQotICAgIHZpcnR1YWwgVEludGVybU5vZGUqIGdldEZhbHNl
QmxvY2soKSBjb25zdCB7IHJldHVybiBmYWxzZUJsb2NrOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJt
U2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CisgICAgVElu
dGVybU5vZGUqIGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbmRpdGlvbjsgfQorICAg
IFRJbnRlcm1Ob2RlKiBnZXRUcnVlQmxvY2soKSBjb25zdCB7IHJldHVybiB0cnVlQmxvY2s7IH0K
KyAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxv
Y2s7IH0KKyAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUoKSB7IHJldHVy
biB0aGlzOyB9CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKICAg
ICBUSW50ZXJtTm9kZSogdHJ1ZUJsb2NrOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNl
Q29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNvbnN0LmNw
cAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcGFyc2VDb25zdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyLDIzICsxMiwzMSBAQAogLy8KIGNsYXNzIFRDb25zdFRyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKIHB1YmxpYzoKLSAgICBUQ29uc3RUcmF2
ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVy
YXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFi
bGUsIFRUeXBlJiB0KSA6IHVuaW9uQXJyYXkoY1VuaW9uKSwgdHlwZSh0KSwKLSAgICAgICAgY29u
c3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLCBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNv
bnN0UGFyYW0pLCBpbmZvU2luayhzaW5rKSwgc3ltYm9sVGFibGUoc3ltVGFibGUpLCBlcnJvcihm
YWxzZSksIGlzTWF0cml4KGZhbHNlKSwgbWF0cml4U2l6ZSgwKQotCXsKLQkJaW5kZXggPSAwOwot
CX0KKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmds
ZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRT
eW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KQorICAgICAgICA6IGVycm9yKGZhbHNlKSwK
KyAgICAgICAgICBpbmRleCgwKSwKKyAgICAgICAgICB1bmlvbkFycmF5KGNVbmlvbiksCisgICAg
ICAgICAgdHlwZSh0KSwKKyAgICAgICAgICBjb25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSks
CisgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbShzaW5nbGVDb25zdFBhcmFtKSwKKyAgICAg
ICAgICBpbmZvU2luayhzaW5rKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCisg
ICAgICAgICAgc2l6ZSgwKSwKKyAgICAgICAgICBpc01hdHJpeChmYWxzZSksCisgICAgICAgICAg
bWF0cml4U2l6ZSgwKSB7CisgICAgfQogCi0JYm9vbCBlcnJvcjsKKyAgICBib29sIGVycm9yOwog
CiBwcm90ZWN0ZWQ6Ci0Jdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0Jdm9pZCB2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLQlib29sIHZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0JYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLQlib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0JYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSopOwotCWJvb2wgdmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJt
TG9vcCopOwotCWJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsK
KyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlz
aXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
c2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKik7CisgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVy
bUJyYW5jaCopOwogCiAgICAgaW50IGluZGV4OwogICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkocmV2aXNpb24g
NjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2F0b20uYwkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgogCkBAIC02
MjQsNyArNjE5LDcgQEAgc3RhdGljIGludCBBZGRBdG9tRml4ZWQoQXRvbVRhYmxlICphdGFibAog
CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSkKIHsKLSAg
ICBpbnQgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgaHRzaXplID0gaHRzaXplIDw9
IDAgPyBJTklUX0hBU0hfVEFCTEVfU0laRSA6IGh0c2l6ZTsKICAgICBpZiAoIUluaXRTdHJpbmdU
YWJsZSgmYXRhYmxlLT5zdGFibGUpKQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9hdG9tLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9hdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21w
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jb21w
aWxlLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0vLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBD
b3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCShy
ZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
IApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCShyZXZpc2lvbiA2NjYx
MSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3QuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCShyZXZpc2lvbiA2NjYx
MSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCShyZXZpc2lvbiA2NjYx
MSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDog
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBB
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCShyZXZpc2lvbiA2NjYxMSkKKysr
IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipc
CiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHJldmlzaW9uIDY2NjEx
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJldmlzaW9uIDY2
NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDY2
NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4KIApJbmRl
eDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCShyZXZpc2lv
biA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
IApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSwzIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwogLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKipcCiBDb3B5cmlnaHQgKGMpIDIwMDIsIE5WSURJQSBDb3Jwb3JhdGlvbi4K
IApAQCAtMTU3LDcgKzE1Miw3IEBAIFN5bWJvbCAqTmV3U3ltYm9sKFNvdXJjZUxvYyAqbG9jLCBT
Y29wZSAKIHsKICAgICBTeW1ib2wgKmxTeW1iOwogICAgIGNoYXIgKnBjaDsKLSAgICBpbnQgaWk7
CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgbFN5bWIgPSAoU3ltYm9sICopIG1lbV9BbGxv
YyhmU2NvcGUtPnBvb2wsIHNpemVvZihTeW1ib2wpKTsKICAgICBsU3ltYi0+bGVmdCA9IE5VTEw7
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAkocmV2aXNp
b24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgog
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwkod29y
a2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgogCkBA
IC0yMTAsNyArMjA1LDcgQEAgdm9pZCBEZWxldGVUb2tlblN0cmVhbShUb2tlblN0cmVhbSAqcFRv
awogdm9pZCBSZWNvcmRUb2tlbihUb2tlblN0cmVhbSAqcFRvaywgaW50IHRva2VuLCB5eXN0eXBl
cHAgKiB5eWx2YWxwcCkKIHsKICAgICBjb25zdCBjaGFyICpzOwotICAgIHVuc2lnbmVkIGNoYXIg
KnN0cj1OVUxMOworICAgIGNoYXIgKnN0cj1OVUxMOwogCiAgICAgaWYgKHRva2VuID4gMjU2KQog
ICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikoKHRva2VuICYgMHg3ZikgKyAw
eDgwKSk7CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmgJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgogCkluZGV4OiBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsMTIgQEAgbmFt
ZXNwYWNlIGVnbAogewogRGlzcGxheTo6RGlzcGxheShIREMgZGV2aWNlQ29udGV4dCkgOiBtRGMo
ZGV2aWNlQ29udGV4dCkKIHsKKyAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CisgICAgCiAgICAgbUQz
ZDkgPSBOVUxMOworICAgIG1EM2Q5ZXggPSBOVUxMOwogICAgIG1EZXZpY2UgPSBOVUxMOworICAg
IG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogCiAgICAgbUFkYXB0ZXIgPSBEM0RBREFQVEVSX0RFRkFV
TFQ7CiAKQEAgLTUxLDcgKzU1LDM4IEBAIGJvb2wgRGlzcGxheTo6aW5pdGlhbGl6ZSgpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5KEQz
RF9TREtfVkVSU0lPTik7CisgICAgbUQzZDlNb2R1bGUgPSBMb2FkTGlicmFyeShURVhUKCJkM2Q5
LmRsbCIpKTsKKyAgICBpZiAobUQzZDlNb2R1bGUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHRl
cm1pbmF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdHlwZWRlZiBJ
RGlyZWN0M0Q5KiAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlGdW5jKShVSU5UKTsKKyAgICBEaXJl
Y3QzRENyZWF0ZTlGdW5jIERpcmVjdDNEQ3JlYXRlOVB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGly
ZWN0M0RDcmVhdGU5RnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENy
ZWF0ZTkiKSk7CisKKyAgICBpZiAoRGlyZWN0M0RDcmVhdGU5UHRyID09IE5VTEwpCisgICAgewor
ICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEaXJlY3QzRENyZWF0ZTlFeEZ1bmMpKFVJTlQsIElE
aXJlY3QzRDlFeCoqKTsKKyAgICBEaXJlY3QzRENyZWF0ZTlFeEZ1bmMgRGlyZWN0M0RDcmVhdGU5
RXhQdHIgPSByZWludGVycHJldF9jYXN0PERpcmVjdDNEQ3JlYXRlOUV4RnVuYz4oR2V0UHJvY0Fk
ZHJlc3MobUQzZDlNb2R1bGUsICJEaXJlY3QzRENyZWF0ZTlFeCIpKTsKKworICAgIC8vIFVzZSBE
aXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB2ZXJzaW9u
IGlzIGxlc3MKKyAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0IGNvbnRleHQsIGZvciBl
eGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKKyAgICAvLyBkZXNrdG9wLiBEaXJlY3QzRDlF
eCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaWYgc3VpdGFibGUgZHJp
dmVycyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChEaXJlY3QzRENyZWF0ZTlFeFB0ciAmJiBTVUND
RUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19WRVJTSU9OLCAmbUQzZDlleCkpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1EM2Q5ZXgpOworICAgICAgICBtRDNkOWV4LT5RdWVyeUlu
dGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkp
OworICAgICAgICBBU1NFUlQobUQzZDkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBtRDNkOSA9IERpcmVjdDNEQ3JlYXRlOVB0cihEM0RfU0RLX1ZFUlNJT04pOworICAgIH0KIAog
ICAgIGlmIChtRDNkOSkKICAgICB7CkBAIC02OSw4NiArMTA0LDkxIEBAIGJvb2wgRGlzcGxheTo6
aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lv
biA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1EM2Q5LT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBtRDNkOSA9IE5VTEw7CisgICAgICAgICAgICB0ZXJtaW5h
dGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBmYWxz
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtTWlu
U3dhcEludGVydmFsID0gNDsKLSAgICAgICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAwOwogCi0g
ICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJF
U0VOVF9JTlRFUlZBTF9JTU1FRElBVEUpIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1p
blN3YXBJbnRlcnZhbCwgMCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcElu
dGVydmFsLCAwKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50
ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkUpICAgICAgIHttTWluU3dhcEludGVydmFs
ID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6
Om1heChtTWF4U3dhcEludGVydmFsLCAxKTt9Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMu
UHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pICAgICAgIHtt
TWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgMik7IG1NYXhTd2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAyKTt9Ci0gICAgICAgICAgICBp
ZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZB
TF9USFJFRSkgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZh
bCwgMyk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCAzKTt9
Ci0gICAgICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNE
UFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4o
bU1pblN3YXBJbnRlcnZhbCwgNCk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dh
cEludGVydmFsLCA0KTt9CisgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OworICAgICAgICBt
TWF4U3dhcEludGVydmFsID0gMDsKIAotICAgICAgICAgICAgY29uc3QgRDNERk9STUFUIHJlbmRl
clRhcmdldEZvcm1hdHNbXSA9Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRDNERk1U
X0ExUjVHNUI1LAotICAgICAgICAgICAgLy8gIEQzREZNVF9BMlIxMEcxMEIxMCwgICAvLyBUaGUg
Y29sb3JfcmFtcCBjb25mb3JtYW5jZSB0ZXN0IHVzZXMgUmVhZFBpeGVscyB3aXRoIFVOU0lHTkVE
X0JZVEUgY2F1c2luZyBpdCB0byB0aGluayB0aGF0IHJlbmRlcmluZyBza2lwcGVkIGEgY29sb3Vy
IHZhbHVlLgotICAgICAgICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKLSAgICAgICAgICAgICAg
ICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAgICAgICAgIEQzREZNVF9YMVI1RzVCNSwKLSAgICAg
ICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgKLSAgICAgICAgICAgIH07CisgICAgICAgIGlmICht
RGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lN
TUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAw
KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDApO30KKyAg
ICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRf
SU5URVJWQUxfT05FKSAgICAgICB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2Fw
SW50ZXJ2YWwsIDEpOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZh
bCwgMSk7fQorICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYg
RDNEUFJFU0VOVF9JTlRFUlZBTF9UV08pICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjpt
aW4obU1pblN3YXBJbnRlcnZhbCwgMik7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4
U3dhcEludGVydmFsLCAyKTt9CisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25J
bnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RIUkVFKSAgICAge21NaW5Td2FwSW50ZXJ2
YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAzKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0
ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDMpO30KKyAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBy
ZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUikgICAgICB7bU1p
blN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDQpOyBtTWF4U3dhcElu
dGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7fQogCi0gICAgICAgICAgICBj
b25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0c1tdID0KLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxFLAotICAgICAgICAgICAgICAgIEQzREZN
VF9EMzIsCi0gICAgICAgICAgICAvLyAgRDNERk1UX0QxNVMxLAotICAgICAgICAgICAgICAgIEQz
REZNVF9EMjRTOCwKLSAgICAgICAgICAgICAgICBEM0RGTVRfRDI0WDgsCi0gICAgICAgICAgICAv
LyAgRDNERk1UX0QyNFg0UzQsCi0gICAgICAgICAgICAgICAgRDNERk1UX0QxNiwKLSAgICAgICAg
ICAgIC8vICBEM0RGTVRfRDMyRl9MT0NLQUJMRSwKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDI0
RlM4Ci0gICAgICAgICAgICB9OworICAgICAgICBjb25zdCBEM0RGT1JNQVQgcmVuZGVyVGFyZ2V0
Rm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgRDNERk1UX0ExUjVHNUI1LAorICAg
ICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1h
bmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRv
IHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCisgICAgICAgICAg
ICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAorICAgICAgICAg
ICAgRDNERk1UX1gxUjVHNUI1LAorICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4CisgICAgICAg
IH07CiAKLSAgICAgICAgICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKLSAg
ICAgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50
RGlzcGxheU1vZGUpOworICAgICAgICBjb25zdCBEM0RGT1JNQVQgZGVwdGhTdGVuY2lsRm9ybWF0
c1tdID0KKyAgICAgICAgeworICAgICAgICAvLyAgRDNERk1UX0QxNl9MT0NLQUJMRSwKKyAgICAg
ICAgICAgIEQzREZNVF9EMzIsCisgICAgICAgIC8vICBEM0RGTVRfRDE1UzEsCisgICAgICAgICAg
ICBEM0RGTVRfRDI0UzgsCisgICAgICAgICAgICBEM0RGTVRfRDI0WDgsCisgICAgICAgIC8vICBE
M0RGTVRfRDI0WDRTNCwKKyAgICAgICAgICAgIEQzREZNVF9EMTYsCisgICAgICAgIC8vICBEM0RG
TVRfRDMyRl9MT0NLQUJMRSwKKyAgICAgICAgLy8gIEQzREZNVF9EMjRGUzgKKyAgICAgICAgfTsK
IAotICAgICAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKKyAgICAgICAgRDNERElTUExBWU1P
REUgY3VycmVudERpc3BsYXlNb2RlOworICAgICAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlN
b2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKIAotICAgICAgICAgICAgZm9yIChp
bnQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHNpemVvZihyZW5kZXJUYXJnZXRGb3Jt
YXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyBmb3JtYXRJbmRleCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSByZW5kZXJUYXJn
ZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKyAgICAgICAgQ29uZmlnU2V0IGNvbmZpZ1NldDsKIAot
ICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9TVVJGQUNFLCByZW5kZXJUYXJnZXRGb3JtYXQpOwor
ICAgICAgICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJl
bmRlclRhcmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEQzREZPUk1BVCByZW5kZXJUYXJnZXRGb3JtYXQgPSByZW5k
ZXJUYXJnZXRGb3JtYXRzW2Zvcm1hdEluZGV4XTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NV
UkZBQ0UsIHJlbmRlclRhcmdldEZvcm1hdCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVuY2lsSW5kZXggPSAwOyBk
ZXB0aFN0ZW5jaWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRzKSAvIHNpemVvZihE
M0RGT1JNQVQpOyBkZXB0aFN0ZW5jaWxJbmRleCsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgZGVwdGhTdGVuY2lsSW5kZXggPSAwOyBkZXB0aFN0ZW5j
aWxJbmRleCA8IHNpemVvZihkZXB0aFN0ZW5jaWxGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQp
OyBkZXB0aFN0ZW5jaWxJbmRleCsrKQorICAgICAgICAgICAgICAgICAgICBEM0RGT1JNQVQgZGVw
dGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJbmRleF07
CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfREVQVEhTVEVOQ0lMLCBEM0RSVFlQRV9TVVJGQUNFLCBkZXB0aFN0ZW5jaWxGb3Jt
YXQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgRDNERk9STUFUIGRlcHRo
U3RlbmNpbEZvcm1hdCA9IGRlcHRoU3RlbmNpbEZvcm1hdHNbZGVwdGhTdGVuY2lsSW5kZXhdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3RlbmNpbEZv
cm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5D
aGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXB0aFN0ZW5jaWxNYXRjaChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIHJlbmRlclRhcmdldEZvcm1hdCwgZGVwdGhT
dGVuY2lsRm9ybWF0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVE
RUQocmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBFbnVtZXJhdGUgbXVsdGktc2FtcGxpbmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBs
aW5nCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnU2V0LmFkZChjdXJy
ZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwsIHJlbmRl
clRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnU2V0LmFkZChj
dXJyZW50RGlzcGxheU1vZGUsIG1NaW5Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwsIHJl
bmRlclRhcmdldEZvcm1hdCwgZGVwdGhTdGVuY2lsRm9ybWF0LCAwKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQg
Y29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhlbSBpbnRlcm5hbGx5Ci0gICAgICAgICAg
ICBFR0xpbnQgaW5kZXggPSAxOwotICAgICAgICAgICAgZm9yIChDb25maWdTZXQ6Okl0ZXJhdG9y
IGNvbmZpZyA9IGNvbmZpZ1NldC5tU2V0LmJlZ2luKCk7IGNvbmZpZyAhPSBjb25maWdTZXQubVNl
dC5lbmQoKTsgY29uZmlnKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29uZmln
IGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOwotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24u
bUNvbmZpZ0lEID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgLy8g
R2l2ZSB0aGUgc29ydGVkIGNvbmZpZ3MgYSB1bmlxdWUgSUQgYW5kIHN0b3JlIHRoZW0gaW50ZXJu
YWxseQorICAgICAgICBFR0xpbnQgaW5kZXggPSAxOworICAgICAgICBmb3IgKENvbmZpZ1NldDo6
SXRlcmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsgY29uZmlnICE9IGNvbmZp
Z1NldC5tU2V0LmVuZCgpOyBjb25maWcrKykKKyAgICAgICAgeworICAgICAgICAgICAgQ29uZmln
IGNvbmZpZ3VyYXRpb24gPSAqY29uZmlnOworICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tQ29u
ZmlnSUQgPSBpbmRleDsKKyAgICAgICAgICAgIGluZGV4Kys7CiAKLSAgICAgICAgICAgICAgICBt
Q29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24pOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbUNvbmZpZ1NldC5tU2V0Lmluc2VydChjb25maWd1cmF0aW9uKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRlcm1pbmF0ZSgpOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTE4NSw2ICsyMjUsMjQgQEAgdm9pZCBEaXNwbGF5Ojp0ZXJtaW5hdGUoKQogICAg
ICAgICBtRDNkOS0+UmVsZWFzZSgpOwogICAgICAgICBtRDNkOSA9IE5VTEw7CiAgICAgfQorCisg
ICAgaWYgKG1EZXZpY2VXaW5kb3cpCisgICAgeworICAgICAgICBEZXN0cm95V2luZG93KG1EZXZp
Y2VXaW5kb3cpOworICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKKyAgICB9CisgICAgCisg
ICAgaWYgKG1EM2Q5ZXgpCisgICAgeworICAgICAgICBtRDNkOWV4LT5SZWxlYXNlKCk7CisgICAg
ICAgIG1EM2Q5ZXggPSBOVUxMOworICAgIH0KKworICAgIGlmIChtRDNkOU1vZHVsZSkKKyAgICB7
CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EM2Q5TW9kdWxlKTsKKyAgICAgICAgbUQzZDlNb2R1bGUg
PSBOVUxMOworICAgIH0KIH0KIAogdm9pZCBEaXNwbGF5OjpzdGFydFNjZW5lKCkKQEAgLTI1NCwx
MzIgKzMxMiw3NCBAQCBib29sIERpc3BsYXk6OmdldENvbmZpZ0F0dHJpYihFR0xDb25maWcgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVN1cmZhY2UgKkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZh
Y2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCitib29sIERpc3BsYXk6OmNyZWF0ZURl
dmljZSgpCiB7Ci0gICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgd2luZG93TmFtZVtdID0gVEVYVCgi
QW5nbGVIaWRkZW5XaW5kb3ciKTsKKyAgICBzdGF0aWMgY29uc3QgVENIQVIgY2xhc3NOYW1lW10g
PSBURVhUKCJTVEFUSUMiKTsKKworICAgIG1EZXZpY2VXaW5kb3cgPSBDcmVhdGVXaW5kb3dFeChX
U19FWF9OT0FDVElWQVRFLCBjbGFzc05hbWUsIHdpbmRvd05hbWUsIFdTX0RJU0FCTEVEIHwgV1Nf
UE9QVVAsIDAsIDAsIDEsIDEsIEhXTkRfTUVTU0FHRSwgTlVMTCwgR2V0TW9kdWxlSGFuZGxlKE5V
TEwpLCBOVUxMKTsKIAogICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVy
cyA9IHswfTsKIAotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBjb25maWd1cmF0aW9uLT5tRGVwdGhTdGVuY2lsRm9ybWF0OworICAgIC8vIFRoZSBkZWZhdWx0
IHN3YXAgY2hhaW4gaXMgbmV2ZXIgYWN0dWFsbHkgdXNlZC4gU3VyZmFjZSB3aWxsIGNyZWF0ZSBh
IG5ldyBzd2FwIGNoYWluIHdpdGggdGhlIHByb3BlciBwYXJhbWV0ZXJzLgorICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBjb25maWd1cmF0aW9uLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0
OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IDA7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDA7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
RW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFNpemUgPyBUUlVF
IDogRkFMU0U7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IEQzREZN
VF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IDE7Cisg
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7CisgICAgcHJlc2VudFBh
cmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwogICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0g
d2luZG93OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBV
bmltcGxlbWVudGVkCisgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1EZXZp
Y2VXaW5kb3c7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsK
KyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9O
T05FOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLlByZXNlbnRhdGlvbkludGVydmFsID0gY29udmVy
dEludGVydmFsKG1NaW5Td2FwSW50ZXJ2YWwpOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBF
ZmZlY3QgPSBEM0RTV0FQRUZGRUNUX0NPUFk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93
ZWQgPSBUUlVFOyAgIC8vIEZJWE1FCisgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9
IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9
IFRSVUU7CiAKLSAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICpzd2FwQ2hhaW4gPSBOVUxMOwotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsKKyAgICBEV09S
RCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJ
TkRPV0NIQU5HRVM7CiAKLSAgICBpZiAoIW1EZXZpY2UpCisgICAgSFJFU1VMVCByZXN1bHQgPSBt
RDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywg
YmVoYXZpb3JGbGFncyB8IEQzRENSRUFURV9IQVJEV0FSRV9WRVJURVhQUk9DRVNTSU5HIHwgRDNE
Q1JFQVRFX1BVUkVERVZJQ0UsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOworCisgICAg
aWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICB7Ci0gICAgICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVf
RlBVX1BSRVNFUlZFIHwgRDNEQ1JFQVRFX05PV0lORE9XQ0hBTkdFUzsKKyAgICAgICAgcmV0dXJu
IGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgd2luZG93
LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBE
M0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CisgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gbUQzZDktPkNyZWF0
ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJlaGF2aW9yRmxh
Z3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0
ZXJzLCAmbURldmljZSk7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBtRDNkOS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
d2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX1NPRlRXQVJFX1ZFUlRFWFBST0NFU1NJ
TkcsICZwcmVzZW50UGFyYW1ldGVycywgJm1EZXZpY2UpOwotCi0gICAgICAgICAgICBpZiAocmVz
dWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FM
TE9DLCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgaWYgKG1EZXZpY2Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG1EZXZpY2UtPkdldFN3YXBDaGFpbigwLCAmc3dhcENoYWluKTsKLSAgICAgICAgICAgIG1E
ZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJmRlcHRoU3RlbmNpbFN1cmZhY2UpOworICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIW1TdXJmYWNlU2V0LmVtcHR5KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgYWxyZWFkeSBleGlzdHMs
IGFuZCB0aGVyZSBhcmUgb3RoZXIgc3VyZmFjZXMvd2luZG93cyBjdXJyZW50bHkgaW4gdXNlLCB3
ZSBuZWVkIHRvIGNyZWF0ZQotICAgICAgICAgICAgLy8gYSBzZXBhcmF0ZSBzd2FwIGNoYWluIGZv
ciB0aGUgbmV3IGRyYXcgc3VyZmFjZS4KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2Fw
Q2hhaW4pOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zLiBPdXQg
b2YgbWVtb3J5LiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9D
LCAoZWdsOjpTdXJmYWNlKilOVUxMKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgLy8gQ3JlYXRlQWRkaXRpb25h
bFN3YXBDaGFpbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgZGVwdGhzdGVuY2ls
IHN1cmZhY2UsIHVubGlrZSAKLSAgICAgICAgICAgIC8vIENyZWF0ZURldmljZSwgc28gd2UgbXVz
dCBkbyBzbyBleHBsaWNpdGx5LgotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
RGVwdGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHBy
ZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9E
ZXB0aFN0ZW5jaWxGb3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwgJmRlcHRoU3RlbmNpbFN1
cmZhY2UsIE5VTEwpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dhcENoYWluLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3Rl
bmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbi4gT3V0IG9mIG1lbW9yeS4iKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVM
TCk7Ci0gICAgICAgICAgICB9CisgICAgLy8gUGVybWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwor
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVF
KTsKIAotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHRoZSBkZXZpY2UgYWxy
ZWFkeSBleGlzdHMsIGJ1dCB0aGVyZSBhcmUgbm8gc3VyZmFjZXMgaW4gdXNlLCB0aGVuIGFsbCB0
aGUgc3VyZmFjZXMvd2luZG93cwotICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlc3Ryb3llZCwg
YW5kIHdlIHNob3VsZCByZXB1cnBvc2UgdGhlIG9yaWdpbmFsbHkgY3JlYXRlZCBkZXB0aHN0ZW5j
aWwgc3VyZmFjZSBmb3IKLSAgICAgICAgICAgIC8vIHVzZSB3aXRoIHRoZSBuZXcgc3VyZmFjZSB3
ZSBhcmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlJl
c2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwogCi0g
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigi
Q291bGQgbm90IHJlc2V0IHByZXNlbnRhdGlvbiBwYXJhbWV0ZXJzIGZvciBkZXZpY2UuIE91dCBv
ZiBtZW1vcnkuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgICAgICBpZiAobURldmljZSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZzd2FwQ2hhaW4pOwotICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UoJmRlcHRoU3RlbmNpbFN1cmZh
Y2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3VyZmFjZSAqc3Vy
ZmFjZSA9IE5VTEw7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBpZiAoc3dhcENoYWluKQot
ICAgIHsKLSAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIHN3YXBDaGFpbiwgZGVw
dGhTdGVuY2lsU3VyZmFjZSwgY29uZmlndXJhdGlvbik7Ci0gICAgICAgIG1TdXJmYWNlU2V0Lmlu
c2VydChzdXJmYWNlKTsKK1N1cmZhY2UgKkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdO
RCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcpCit7CisgICAgY29uc3QgQ29uZmlnICpjb25maWd1
cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKIAotICAgICAgICBzd2FwQ2hhaW4tPlJl
bGVhc2UoKTsKLSAgICB9CisgICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMs
IGNvbmZpZ3VyYXRpb24sIHdpbmRvdyk7CisgICAgbVN1cmZhY2VTZXQuaW5zZXJ0KHN1cmZhY2Up
OwogCiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLUVHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRl
Q29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlKQorRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVh
dGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQpCiB7CiAgICAgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZyA9IG1Db25maWdTZXQu
Z2V0KGNvbmZpZ0hhbmRsZSk7CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRl
Q29udGV4dChjb25maWcpOworICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250
ZXh0KGNvbmZpZywgc2hhcmVDb250ZXh0KTsKICAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4
dCk7CiAKICAgICByZXR1cm4gY29udGV4dDsKQEAgLTQ2OCw0ICs0NjgsMjMgQEAgRDNEQ0FQUzkg
RGlzcGxheTo6Z2V0RGV2aWNlQ2FwcygpCiB7CiAgICAgcmV0dXJuIG1EZXZpY2VDYXBzOwogfQor
Cit2b2lkIERpc3BsYXk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBi
b29sICptdWx0aVNhbXBsZUFycmF5KQoreworICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXgg
PSAwOyBtdWx0aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRp
U2FtcGxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNo
ZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUUlVFLCAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKwor
ICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJl
c3VsdCk7CisgICAgfQorfQorCitib29sIERpc3BsYXk6OmdldENvbXByZXNzZWRUZXh0dXJlU3Vw
cG9ydCgpCit7CisgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlNb2RlOworICAgIG1E
M2Q5LT5HZXRBZGFwdGVyRGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUp
OworCisgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfRFhUMSkpOworfQogfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgY2xhc3MgRGlzcGxheQogICAgIGJvb2wgZ2V0Q29uZmlnQXR0cmliKEVH
TENvbmZpZyBjb25maWcsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwogCiAgICAg
ZWdsOjpTdXJmYWNlICpjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcg
Y29uZmlnKTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hh
bmRsZSk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5k
bGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwogCiAgICAgdm9pZCBkZXN0cm95
U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQo
Z2w6OkNvbnRleHQgKmNvbnRleHQpOwpAQCAtNjAsMTYgKzYwLDIyIEBAIGNsYXNzIERpc3BsYXkK
IAogICAgIHZpcnR1YWwgSURpcmVjdDNERGV2aWNlOSAqZ2V0RGV2aWNlKCk7CiAgICAgdmlydHVh
bCBEM0RDQVBTOSBnZXREZXZpY2VDYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0Q29tcHJlc3NlZFRleHR1cmVTdXBwb3J0KCk7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGlzcGxheSk7CiAgICAgY29uc3QgSERD
IG1EYzsKIAorICAgIEhNT0RVTEUgbUQzZDlNb2R1bGU7CisgICAgCiAgICAgVUlOVCBtQWRhcHRl
cjsKICAgICBEM0RERVZUWVBFIG1EZXZpY2VUeXBlOwotICAgIElEaXJlY3QzRDkgKm1EM2Q5Owor
ICAgIElEaXJlY3QzRDkgKm1EM2Q5OyAgLy8gQWx3YXlzIHZhbGlkIGFmdGVyIHN1Y2Nlc3NmdWwg
aW5pdGlhbGl6YXRpb24uCisgICAgSURpcmVjdDNEOUV4ICptRDNkOWV4OyAgLy8gTWlnaHQgYmUg
bnVsbCBpZiBEM0Q5RXggaXMgbm90IHN1cHBvcnRlZC4KICAgICBJRGlyZWN0M0REZXZpY2U5ICpt
RGV2aWNlOwogICAgIEQzRENBUFM5IG1EZXZpY2VDYXBzOworICAgIEhXTkQgbURldmljZVdpbmRv
dzsKIAogICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKICAgICBHTGludCBtU3dhcEludGVydmFsOwpA
QCAtODQsNiArOTAsOCBAQCBjbGFzcyBEaXNwbGF5CiAKICAgICB0eXBlZGVmIHN0ZDo6c2V0PGds
OjpDb250ZXh0Kj4gQ29udGV4dFNldDsKICAgICBDb250ZXh0U2V0IG1Db250ZXh0U2V0OworCisg
ICAgYm9vbCBjcmVhdGVEZXZpY2UoKTsKIH07CiB9CiAKSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wv
U3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAko
cmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNyw5ICsxNywxMSBAQAogCiBuYW1lc3BhY2UgZWdsCiB7Ci1TdXJmYWNlOjpT
dXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiwg
SURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCwgY29uc3QgQ29uZmlnICpjb25maWcpIAot
ICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Td2FwQ2hhaW4oc3dhcENoYWluKSwgbURlcHRoU3Rl
bmNpbChkZXB0aFN0ZW5jaWwpLCBtQ29uZmlnKGNvbmZpZykKK1N1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93KSAKKyAgICA6
IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KQogewor
ICAgIG1Td2FwQ2hhaW4gPSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIG1C
YWNrQnVmZmVyID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAgICBtRmxpcFRl
eHR1cmUgPSBOVUxMOwpAQCAtMzAsNDIgKzMyLDcgQEAgU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5
ICpkaXNwbGF5LCBJRGlyZQogICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CiAg
ICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogCi0gICAgaWYgKG1Td2Fw
Q2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENoYWluLT5BZGRSZWYoKTsKLSAgICAgICAgbVN3
YXBDaGFpbi0+R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJm1CYWNr
QnVmZmVyKTsKLQotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3JpcHRpb247Ci0gICAgICAg
IG1CYWNrQnVmZmVyLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgbVdpZHRoID0g
ZGVzY3JpcHRpb24uV2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBkZXNjcmlwdGlvbi5IZWlnaHQ7
Ci0KLSAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNl
KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQo
bVdpZHRoLCBtSGVpZ2h0LCBkZXNjcmlwdGlvbi5Gb3JtYXQsIGRlc2NyaXB0aW9uLk11bHRpU2Ft
cGxlVHlwZSwgZGVzY3JpcHRpb24uTXVsdGlTYW1wbGVRdWFsaXR5LCBGQUxTRSwgJm1SZW5kZXJU
YXJnZXQsIE5VTEwpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9N
RU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGVycm9yKEVHTF9CQURfQUxMT0MpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZShtV2lkdGgsIG1IZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtRmxpcFRleHR1
cmUsIE5VTEwpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgICAgIGVycm9yKEVHTF9CQURfQUxMT0Mp
OwotCi0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICByZXNldFN3YXBDaGFpbigpOwogfQogCiBT
dXJmYWNlOjp+U3VyZmFjZSgpCkBAIC0xMDYsMjAgKzczLDEyMSBAQCBTdXJmYWNlOjp+U3VyZmFj
ZSgpCiAgICAgfQogfQogCi1IV05EIFN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSgpCit2b2lkIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKKyAgICBJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CisKKyAgICBEM0RQ
UkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07CisKKyAgICBwcmVzZW50
UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0gbUNvbmZpZy0+bURlcHRoU3RlbmNp
bEZvcm1hdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBtQ29uZmlnLT5tUmVuZGVyVGFy
Z2V0Rm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwg
PSBGQUxTRTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CisgICAgcHJlc2VudFBh
cmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdpbmRvd0hhbmRsZSgpOworICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUg
PSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJWE1FOiBVbmltcGxlbWVudGVkCisgICAgcHJl
c2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEaXNwbGF5Ojpjb252ZXJ0SW50
ZXJ2YWwobUNvbmZpZy0+bU1pblN3YXBJbnRlcnZhbCk7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
U3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVy
cy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICBSRUNUIHdpbmRvd1JlY3Q7CisgICAgaWYgKCFHZXRD
bGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93UmVjdCkpCisgICAgeworICAgICAg
ICBBU1NFUlQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gd2luZG93UmVjdC5yaWdodCAtIHdpbmRvd1JlY3Qu
bGVmdDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gd2luZG93UmVj
dC5ib3R0b20gLSB3aW5kb3dSZWN0LnRvcDsKKworICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3
YXBDaGFpbiA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0
aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmc3dhcENoYWluKTsKKworICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJS
X09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBhZGRpdGlvbmFsIHN3YXAgY2hhaW5zOiAlMDhsWCIsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DKTsKKyAgICB9CisKKyAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3VyZmFjZSA9IE5VTEw7CisgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmZGVwdGhTdGVuY2ls
U3VyZmFjZSwgTlVMTCk7CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewotICAgICAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnM7Ci0gICAgICAgIG1Td2Fw
Q2hhaW4tPkdldFByZXNlbnRQYXJhbWV0ZXJzKCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOwogCi0gICAgICAg
IHJldHVybiBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93OworICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAl
MDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gTlVMTDsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0ID0gTlVMTDsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldChwcmVz
ZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQsIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1w
bGVUeXBlLCBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmcmVu
ZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOworCisgICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAg
ICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisKKyAgICAgICAgRVJSKCJDb3VsZCBu
b3QgY3JlYXRlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46ICUwOGxY
IiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MpOworICAgIH0K
KworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBJRGlyZWN0M0RUZXh0dXJl
OSAqZmxpcFRleHR1cmUgPSBOVUxMOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNlbnRQYXJhbWV0ZXJzLkJh
Y2tCdWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwg
RDNEUE9PTF9ERUZBVUxULCAmZmxpcFRleHR1cmUsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURF
T01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgc3dhcENoYWlu
LT5SZWxlYXNlKCk7CisgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisKKyAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIGZsaXAgdGV4dHVyZSBmb3IgbmV3IHN3YXAgY2hhaW46ICUwOGxYIiwgcmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MpOworICAgIH0KKworICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpiYWNrQnVmZmVyID0gTlVMTDsKKyAgICBzd2FwQ2hhaW4tPkdldEJhY2tC
dWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZiYWNrQnVmZmVyKTsKKworICAgIGlm
IChtU3dhcENoYWluKSBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgaWYgKG1EZXB0aFN0ZW5j
aWwpIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICBpZiAobUJhY2tCdWZmZXIpIG1CYWNr
QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKKyAgICBpZiAobUZsaXBUZXh0dXJlKSBtRmxpcFRleHR1cmUtPlJlbGVhc2Uo
KTsKKworICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aDsKKyAg
ICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodDsKKworICAgIG1T
d2FwQ2hhaW4gPSBzd2FwQ2hhaW47CisgICAgbURlcHRoU3RlbmNpbCA9IGRlcHRoU3RlbmNpbFN1
cmZhY2U7CisgICAgbUJhY2tCdWZmZXIgPSBiYWNrQnVmZmVyOworICAgIG1SZW5kZXJUYXJnZXQg
PSByZW5kZXJUYXJnZXQ7CisgICAgbUZsaXBUZXh0dXJlID0gZmxpcFRleHR1cmU7CisKKyAgICAv
LyBUaGUgZmxpcCBzdGF0ZSBibG9jayByZWNvcmRlZCBtRmxpcFRleHR1cmUgc28gaXQgaXMgbm93
IGludmFsaWQuCisgICAgcmVsZWFzZVJlY29yZGVkU3RhdGUoZGV2aWNlKTsKK30KKworSFdORCBT
dXJmYWNlOjpnZXRXaW5kb3dIYW5kbGUoKQoreworICAgIHJldHVybiBtV2luZG93OwogfQogCi12
b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit2b2lkIFN1cmZhY2U6OndyaXRlUmVj
b3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCiB7CiAgICAgLy8gRGlz
YWJsZSBhbGwgcGlwZWxpbmUgb3BlcmF0aW9ucwogICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
RDNEUlNfWkVOQUJMRSwgRDNEWkJfRkFMU0UpOwpAQCAtMTM4LDE2ICsyMDYsMTggQEAgdm9pZCBT
dXJmYWNlOjp3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSQogICAgIGRldmljZS0+U2V0VGV4dHVy
ZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKICAgICBk
ZXZpY2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RF
WFRVUkUpOwogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9S
T1AsIEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgc291cmNlKTsK
KyAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7IC8vIFRoZSBhY3R1YWwgdGV4dHVyZSB3
aWxsIGNoYW5nZSBhZnRlciByZXNpemluZy4gQnV0IHRoZSBwcmUtZmxpcCBzdGF0ZSBibG9jayBt
dXN0IHNhdmUvcmVzdG9yZSB0aGUgdGV4dHVyZS4KICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZSgwLCBEM0RTQU1QX01BR0ZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CiAgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9NSU5GSUxURVIsIEQzRFRFWEZfUE9JTlQpOwogICAgIGRl
dmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfU1JHQlRFWFRVUkUsIEZBTFNFKTsKKyAg
ICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVT
U19DTEFNUCk7CisgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNT
ViwgRDNEVEFERFJFU1NfQ0xBTVApOwogICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcg
fCBEM0RGVkZfVEVYMSk7CiAKICAgICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7
IC8vIERyYXdQcmltaXRpdmVVUCBvbmx5IGNhcmVzIGFib3V0IHN0cmVhbSAwLCBub3QgdGhlIHJl
c3QuCiB9CiAKLXZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKQordm9pZCBTdXJmYWNlOjphcHBseUZs
aXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCiB7CiAgICAgSFJFU1VMVCBocjsKIApA
QCAtMTU4LDcgKzIyOCw3IEBAIHZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNE
RGUKICAgICAgICAgLy8gbVByZUZsaXBTdGF0ZSB3aWxsIHJlY29yZCB0aGUgb3JpZ2luYWwgc3Rh
dGUgZWFjaCBlbnRyeS4KICAgICAgICAgaHIgPSBkZXZpY2UtPkJlZ2luU3RhdGVCbG9jaygpOwog
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgIHdyaXRlUmVjb3JkYWJsZUZs
aXBTdGF0ZShkZXZpY2UsIHNvdXJjZSk7CisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0
ZShkZXZpY2UpOwogICAgICAgICBociA9IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbVByZUZsaXBT
dGF0ZSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwogCkBAIC0xNzEsNyArMjQxLDcg
QEAgdm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZQogICAgICAgICBociA9
IGRldmljZS0+QmVnaW5TdGF0ZUJsb2NrKCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKIAotICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoZGV2aWNlLCBzb3VyY2UpOwor
ICAgICAgICB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoZGV2aWNlKTsKIAogICAgICAgICBociA9
IGRldmljZS0+RW5kU3RhdGVCbG9jaygmbUZsaXBTdGF0ZSk7CiAgICAgICAgIEFTU0VSVChTVUND
RUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IGhyID09IEVfT1VU
T0ZNRU1PUlkpOwpAQCAtMjIzLDI5ICsyOTMsODggQEAgdm9pZCBTdXJmYWNlOjpyZXN0b3JlU3Rh
dGUoSURpcmVjdDNERGV2aQogICAgIH0KIH0KIAorLy8gT24gdGhlIG5leHQgZmxpcCwgdGhpcyB3
aWxsIGNhdXNlIHRoZSBzdGF0ZSB0byBiZSByZWNvcmRlZCBmcm9tIHNjcmF0Y2guCisvLyBJbiBw
YXJ0aWN1bGFyIHdlIG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgZmxpcCB0ZXh0dXJlIGNoYW5nZXMu
Cit2b2lkIFN1cmZhY2U6OnJlbGVhc2VSZWNvcmRlZFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRl
dmljZSkKK3sKKyAgICBpZiAobUZsaXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1GbGlwU3RhdGUt
PlJlbGVhc2UoKTsKKyAgICAgICAgbUZsaXBTdGF0ZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYg
KG1QcmVGbGlwU3RhdGUpCisgICAgeworICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7
CisgICAgICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOworICAgIH0KK30KKworYm9vbCBTdXJmYWNl
OjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpCit7CisgICAgUkVDVCBjbGllbnQ7CisgICAgaWYgKCFH
ZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Z2V0V2lkdGgoKSAhPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdCB8fCBnZXRIZWlnaHQoKSAh
PSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcCkKKyAgICB7CisgICAgICAgIHJlc2V0U3dhcENo
YWluKCk7CisKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGVnbDo6U3VyZmFjZSo+KGdldEN1cnJl
bnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQorICAgICAgICB7CisgICAgICAgICAgICBnbE1ha2VD
dXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQoKSwgc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4o
Z2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFN1cmZhY2U6OnN3
YXAoKQogewogICAgIGlmIChtU3dhcENoYWluKQogICAgIHsKKyAgICAgICAgSURpcmVjdDNEVGV4
dHVyZTkgKmZsaXBUZXh0dXJlID0gbUZsaXBUZXh0dXJlOworICAgICAgICBmbGlwVGV4dHVyZS0+
QWRkUmVmKCk7CisKKyAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IG1S
ZW5kZXJUYXJnZXQ7CisgICAgICAgIHJlbmRlclRhcmdldC0+QWRkUmVmKCk7CisKKyAgICAgICAg
RUdMaW50IG9sZFdpZHRoID0gbVdpZHRoOworICAgICAgICBFR0xpbnQgb2xkSGVpZ2h0ID0gbUhl
aWdodDsKKworICAgICAgICBjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpOworCiAgICAgICAgIElEaXJl
Y3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKIAogICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0gICAgICAgIG1GbGlwVGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7CisgICAgICAgIGZsaXBUZXh0dXJl
LT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKIAogICAgICAgICBtRGlzcGxh
eS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChtUmVuZGVyVGFyZ2V0
LCBOVUxMLCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKyAgICAgICAgZGV2
aWNlLT5TdHJldGNoUmVjdChyZW5kZXJUYXJnZXQsIE5VTEwsIHRleHR1cmVTdXJmYWNlLCBOVUxM
LCBEM0RURVhGX05PTkUpOworICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKIAotICAg
ICAgICBhcHBseUZsaXBTdGF0ZShkZXZpY2UsIG1GbGlwVGV4dHVyZSk7CisgICAgICAgIGFwcGx5
RmxpcFN0YXRlKGRldmljZSk7CisgICAgICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBmbGlwVGV4
dHVyZSk7CisKKyAgICAgICAgZmxvYXQgeHNjYWxlID0gKGZsb2F0KW1XaWR0aCAvIG9sZFdpZHRo
OworICAgICAgICBmbG9hdCB5c2NhbGUgPSAoZmxvYXQpbUhlaWdodCAvIG9sZEhlaWdodDsKIAog
ICAgICAgICAvLyBSZW5kZXIgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBi
dWZmZXIKLSAgICAgICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAg
MCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYsIDEuMGZ9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHttV2lkdGggLSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMS4wZiwg
MS4wZn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWln
aHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAuMGYs
IDAuMGZ9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKyAgICAgICAgLy8gVGV4Y29vcmRzIGFy
ZSBjaG9zZW4gdG8gcGluIGEgcG90ZW50aWFsbHkgcmVzaXplZCBpbWFnZSBpbnRvIHRoZSB1cHBl
ci1sZWZ0IGNvcm5lciB3aXRob3V0IHNjYWxpbmcuCisgICAgICAgIGZsb2F0IHF1YWRbNF1bNl0g
PSB7eyAgICAgMCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAwLjBmLCAgIDEu
MGYgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41Ziwg
ICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIHhzY2FsZSwgMS4wZiAgICAgICB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4w
ZiwgMS4wZiwgeHNjYWxlLCAxLjBmLXlzY2FsZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAgICAgMCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAwLjBmLCAgIDEu
MGYteXNjYWxlfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2CiAKICAgICAgICAgbURpc3BsYXkt
PnN0YXJ0U2NlbmUoKTsKICAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJ
QU5HTEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKIAorICAgICAgICBmbGlwVGV4
dHVyZS0+UmVsZWFzZSgpOwogICAgICAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgpOwogCiAg
ICAgICAgIHJlc3RvcmVTdGF0ZShkZXZpY2UpOwpAQCAtMjY0LDYgKzM5Myw3IEBAIGJvb2wgU3Vy
ZmFjZTo6c3dhcCgpCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBBTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2
aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQCBjbGFzcyBDb25maWc7CiBjbGFzcyBTdXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIElEaXJlY3QzRFN3YXBDaGFpbjkg
KnN3YXBDaGFpbiwgSURpcmVjdDNEU3VyZmFjZTkqIGRlcHRoU3RlbmNpbCwgY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZyk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdyk7CiAKICAgICB+U3VyZmFjZSgpOwogCkBAIC00
MiwyMCArNDIsMjUgQEAgY2xhc3MgU3VyZmFjZQogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihTdXJmYWNlKTsKIAogICAgIERpc3BsYXkgKmNvbnN0IG1EaXNwbGF5OwotICAgIElEaXJlY3Qz
RFN3YXBDaGFpbjkgKmNvbnN0IG1Td2FwQ2hhaW47CisgICAgSURpcmVjdDNEU3dhcENoYWluOSAq
bVN3YXBDaGFpbjsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7CiAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKm1SZW5kZXJUYXJnZXQ7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1E
ZXB0aFN0ZW5jaWw7CiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1GbGlwVGV4dHVyZTsKIAotICAg
IHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RU
ZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHJlc2V0U3dhcENoYWluKCk7CisgICAgYm9vbCBj
aGVja0ZvcldpbmRvd1Jlc2l6ZSgpOworCisgICAgdm9pZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0
M0REZXZpY2U5ICpkZXZpY2UpOwogICAgIHZvaWQgcmVzdG9yZVN0YXRlKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSk7Ci0gICAgdm9pZCB3cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlLCBJRGlyZWN0M0RUZXh0dXJlOSAqc291cmNlKTsKKyAgICB2b2lkIHdy
aXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOworICAgIHZv
aWQgcmVsZWFzZVJlY29yZGVkU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKTsKICAgICBJ
RGlyZWN0M0RTdGF0ZUJsb2NrOSAqbUZsaXBTdGF0ZTsKICAgICBJRGlyZWN0M0RTdGF0ZUJsb2Nr
OSAqbVByZUZsaXBTdGF0ZTsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBCYWNrQnVm
ZmVyOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKIAorICAg
IGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhhdCB0aGUgc3VyZmFj
ZSBpcyBjcmVhdGVkIGZvci4KICAgICBjb25zdCBlZ2w6OkNvbmZpZyAqbUNvbmZpZzsgICAgLy8g
RUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgKICAgICBFR0xpbnQgbUhlaWdodDsg
ICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UKICAgICBFR0xpbnQgbVdpZHRoOyAg
ICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQpJbmRleDogQU5HTEUvc3JjL2xpYkVH
TC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAko
cmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3Miw3ICs3NzIsNyBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVD
b250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CiAgICAgICAgIH0K
IAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNv
bmZpZyk7CisgICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGRpc3BsYXktPmNyZWF0ZUNvbnRl
eHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpKTsKIAog
ICAgICAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKICAgICB9CkBAIC04MjQsOSArODI0LDgg
QEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdMRAogICAgICAgICBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oY3R4
KTsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2aWNl
KCk7Ci0gICAgICAgIERXT1JEIHBhc3NlczsKIAotICAgICAgICBpZiAoIWRldmljZSB8fCBkZXZp
Y2UtPlZhbGlkYXRlRGV2aWNlKCZwYXNzZXMpID09IEQzREVSUl9ERVZJQ0VMT1NUKQorICAgICAg
ICBpZiAoIWRldmljZSB8fCBkZXZpY2UtPlRlc3RDb29wZXJhdGl2ZUxldmVsKCkgIT0gRDNEX09L
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwg
RUdMX0ZBTFNFKTsKICAgICAgICAgfQpJbmRleDogQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagkocmV2aXNp
b24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML2xpYkVHTC52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDcgKzYyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5r
ZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkM2Q5LmxpYiINCisJCQkJQWRk
aXRpb25hbERlcGVuZGVuY2llcz0iZHhndWlkLmxpYiINCiAJCQkJTGlua0luY3JlbWVudGFsPSIy
Ig0KIAkJCQlNb2R1bGVEZWZpbml0aW9uRmlsZT0ibGliRUdMLmRlZiINCiAJCQkJR2VuZXJhdGVE
ZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KQEAgLTE0MCw3ICsxNDAsNyBAQAogCQkJLz4NCiAJCQk8
VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNp
ZXM9ImQzZDkubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkeGd1aWQubGliIg0K
IAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJF
R0wuZGVmIg0KIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL0JsaXQuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQmxp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiwxMiArMjMyLDEyIEBAIGJvb2wgQmxpdDo6c2V0
U2hhZGVyKFNoYWRlcklkIHNvdXJjZSwgY28KIAogYm9vbCBCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIo
U2hhZGVySWQgc2hhZGVyKQogewotICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVydGV4
U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0VmVydGV4U2hhZGVyUHJvZmlsZSgpLCAmSURp
cmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVjdDNERGV2aWNlOTo6U2V0
VmVydGV4U2hhZGVyKTsKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFZlcnRleFNoYWRl
cjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAidnNfM18wIiA6
ICJ2c18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlVmVydGV4U2hhZGVyLCAmSURpcmVj
dDNERGV2aWNlOTo6U2V0VmVydGV4U2hhZGVyKTsKIH0KIAogYm9vbCBCbGl0OjpzZXRQaXhlbFNo
YWRlcihTaGFkZXJJZCBzaGFkZXIpCiB7Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQ
aXhlbFNoYWRlcjk+KHNoYWRlciwgbUNvbnRleHQtPmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpLCAm
SURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0M0REZXZpY2U5OjpT
ZXRQaXhlbFNoYWRlcik7CisgICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0M0RQaXhlbFNoYWRl
cjk+KHNoYWRlciwgbUNvbnRleHQtPnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgPyAicHNfM18wIiA6
ICJwc18yXzAiLCAmSURpcmVjdDNERGV2aWNlOTo6Q3JlYXRlUGl4ZWxTaGFkZXIsICZJRGlyZWN0
M0REZXZpY2U5OjpTZXRQaXhlbFNoYWRlcik7CiB9CiAKIFJFQ1QgQmxpdDo6Z2V0U3VyZmFjZVJl
Y3QoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpIGNvbnN0CkBAIC0zMjUsNiArMzI1LDcgQEAg
Ym9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyhHTGVudQogICAgIHsKICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICBjYXNlIEdM
X0JHUkFfRVhUOgogICAgICAgY2FzZSBHTF9SR0I6CiAgICAgICBjYXNlIEdMX0FMUEhBOgogICAg
ICAgICBva2F5ID0gb2theSAmJiBzZXRQaXhlbFNoYWRlcihTSEFERVJfUFNfQ09NUE9ORU5UTUFT
Syk7CkBAIC0zNTEsNiArMzUyLDcgQEAgYm9vbCBCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVy
cyhHTGVudQogICAgIHsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICBjYXNl
IEdMX1JHQkE6CisgICAgICBjYXNlIEdMX0JHUkFfRVhUOgogICAgICAgICBwc0NvbnN0MFtYXSA9
IDE7CiAgICAgICAgIHBzQ29uc3QwW1pdID0gMTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBBTkdM
RS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CdWZmZXIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyArMTMsNyBAQAogbmFtZXNwYWNlIGds
CiB7CiAKLUJ1ZmZlcjo6QnVmZmVyKCkKK0J1ZmZlcjo6QnVmZmVyKEdMdWludCBpZCkgOiBSZWZD
b3VudE9iamVjdChpZCkKIHsKICAgICBtQ29udGVudHMgPSBOVUxMOwogICAgIG1TaXplID0gMDsK
SW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCwxNCArMTgsMTUgQEAKICNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1j
bGFzcyBCdWZmZXIKK2NsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewogICBw
dWJsaWM6Ci0gICAgQnVmZmVyKCk7CisgICAgZXhwbGljaXQgQnVmZmVyKEdMdWludCBpZCk7CiAK
ICAgICB2aXJ0dWFsIH5CdWZmZXIoKTsKIApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L0JsaXQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCkBAIC0zMyw3ICszNCw3IEBACiAKIG5h
bWVzcGFjZSBnbAogewotQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmln
KQorQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25zdCBnbDo6
Q29udGV4dCAqc2hhcmVDb250ZXh0KQogICAgIDogbUNvbmZpZyhjb25maWcpCiB7CiAgICAgc2V0
Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKQEAgLTEwMywzNyArMTA0LDM5IEBA
IENvbnRleHQ6OkNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmYKICAgICBtU3RhdGUuY29s
b3JNYXNrQWxwaGEgPSB0cnVlOwogICAgIG1TdGF0ZS5kZXB0aE1hc2sgPSB0cnVlOwogCisgICAg
aWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbVJlc291cmNlTWFuYWdl
ciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKKyAgICAgICAgbVJlc291cmNlTWFu
YWdlci0+YWRkUmVmKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1SZXNvdXJj
ZU1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7CisgICAgfQorCiAgICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43IHBhZ2UgODM6CiAgICAgLy8gSW4gdGhlIGluaXRpYWwg
c3RhdGUsIFRFWFRVUkVfMkQgYW5kIFRFWFRVUkVfQ1VCRV9NQVAgaGF2ZSB0d29kaW1lbnNpb25h
bAogICAgIC8vIGFuZCBjdWJlIG1hcCB0ZXh0dXJlIHN0YXRlIHZlY3RvcnMgcmVzcGVjdGl2ZWx5
IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgogICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRo
ZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4
dHVyZQogICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3NlIG5hbWVzIGFyZSAwLgogCi0gICAgbVRl
eHR1cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKHRoaXMpOwotICAgIG1UZXh0dXJlQ3ViZU1hcFpl
cm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgbVRleHR1cmUyRFplcm8gPSBuZXcg
VGV4dHVyZTJEKDApOworICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8gPSBuZXcgVGV4dHVyZUN1YmVN
YXAoMCk7CiAKICAgICBtQ29sb3JidWZmZXJaZXJvID0gTlVMTDsKLSAgICBtRGVwdGhidWZmZXJa
ZXJvID0gTlVMTDsKLSAgICBtU3RlbmNpbGJ1ZmZlclplcm8gPSBOVUxMOworICAgIG1EZXB0aFN0
ZW5jaWxidWZmZXJaZXJvID0gTlVMTDsKIAogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsK
LSAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIgPSAwOworICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsKKyAgICBiaW5kRWxlbWVudEFycmF5QnVm
ZmVyKDApOwogICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKICAgICBiaW5kVGV4dHVyZTJEKDAp
OwotICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICBiaW5kUmVhZEZyYW1lYnVmZmVyKDApOwor
ICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKIAog
ICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKysp
CiAgICAgewotICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IE1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VOVDsgdHlwZSsr
KQotICAgIHsKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXSA9IE5VTEw7CiAgICAg
fQogCkBAIC0xNTUsNjUgKzE1OCw3MiBAQCBDb250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29u
ZmlnICpjb25mCiAKICAgICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKIAorICAgIG1NYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVMTDsKICAg
ICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCiBDb250ZXh0Ojp+Q29udGV4dCgpCiB7Ci0gICAg
bVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBl
IDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCisgICAgaWYgKG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbSAhPSAwKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlw
ZV07CisgICAgICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7CisgICAgICAgIGlmIChwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5yZWxlYXNlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKICAgICB9CiAKLSAg
ICBkZWxldGUgbVRleHR1cmUyRFplcm87Ci0gICAgZGVsZXRlIG1UZXh0dXJlQ3ViZU1hcFplcm87
Ci0KLSAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsKLSAgICBkZWxldGUgbURlcHRoYnVmZmVy
WmVybzsKLSAgICBkZWxldGUgbVN0ZW5jaWxidWZmZXJaZXJvOwotCi0gICAgZGVsZXRlIG1CdWZm
ZXJCYWNrRW5kOwotICAgIGRlbGV0ZSBtVmVydGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1J
bmRleERhdGFNYW5hZ2VyOwotICAgIGRlbGV0ZSBtQmxpdDsKLQotICAgIHdoaWxlICghbUJ1ZmZl
ck1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZyYW1lYnVmZmVyTWFwLmVtcHR5KCkpCiAgICAg
ewotICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAg
ICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CiAg
ICAgfQogCi0gICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbU11
bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgZGVsZXRlUHJvZ3JhbSht
UHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1w
bGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydC5l
cmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwogICAgIH0KIAotICAgIHdoaWxlICgh
bVNoYWRlck1hcC5lbXB0eSgpKQorICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExF
Ul9UWVBFX0NPVU5UOyB0eXBlKyspCiAgICAgewotICAgICAgICBkZWxldGVTaGFkZXIobVNoYWRl
ck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1w
bGVyIDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLnNldChOVUxMKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIHdoaWxlICghbUZyYW1lYnVmZmVyTWFwLmVtcHR5KCkp
CisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUr
KykKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdp
bigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOwog
ICAgIH0KIAotICAgIHdoaWxlICghbVJlbmRlcmJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAgICAgICBk
ZWxldGVSZW5kZXJidWZmZXIobVJlbmRlcmJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAg
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKICAg
ICB9CiAKLSAgICB3aGlsZSAoIW1UZXh0dXJlTWFwLmVtcHR5KCkpCi0gICAgewotICAgICAgICBk
ZWxldGVUZXh0dXJlKG1UZXh0dXJlTWFwLmJlZ2luKCktPmZpcnN0KTsKLSAgICB9CisgICAgbVN0
YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVy
LnNldChOVUxMKTsKKyAgICBtU3RhdGUudGV4dHVyZTJELnNldChOVUxMKTsKKyAgICBtU3RhdGUu
dGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOworICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5V
TEwpOworCisgICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOworICAgIGRlbGV0ZSBtVGV4dHVyZUN1
YmVNYXBaZXJvOworCisgICAgZGVsZXRlIG1CdWZmZXJCYWNrRW5kOworICAgIGRlbGV0ZSBtVmVy
dGV4RGF0YU1hbmFnZXI7CisgICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOworICAgIGRlbGV0
ZSBtQmxpdDsKIAogICAgIGlmIChtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKQogICAgIHsKICAgICAg
ICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+UmVsZWFzZSgpOwogICAgIH0KKworICAgIG1SZXNv
dXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKIH0KIAogdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKQEAgLTIyOSw2ICsy
MzksMzQgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAgICAg
ICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIG1CdWZmZXJC
YWNrRW5kKTsKICAgICAgICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKIAorICAgICAgICBjb25z
dCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0KKyAgICAgICAgeworICAgICAgICAg
ICAgRDNERk1UX0E4UjhHOEI4LAorICAgICAgICAgICAgRDNERk1UX1g4UjhHOEI4LAorICAgICAg
ICAgICAgRDNERk1UX1I1RzZCNSwKKyAgICAgICAgICAgIEQzREZNVF9EMjRTOAorICAgICAgICB9
OworCisgICAgICAgIGludCBtYXggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emVvZihyZW5kZXJCdWZmZXJGb3JtYXRzKSAvIHNpemVvZihEM0RGT1JNQVQpOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RN
VUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07CisgICAgICAgICAgICBkaXNwbGF5LT5nZXRNdWx0
aVNhbXBsZVN1cHBvcnQocmVuZGVyQnVmZmVyRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7
CisgICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W3JlbmRlckJ1ZmZlckZvcm1hdHNbaV1d
ID0gbXVsdGlzYW1wbGVBcnJheTsKKworICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9O
TUFTS0FCTEUgJiYgaiA+IG1heCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1heCA9IGo7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7CisKKyAgICAgICAgbVN1cHBv
cnRzQ29tcHJlc3NlZFRleHR1cmVzID0gZGlzcGxheS0+Z2V0Q29tcHJlc3NlZFRleHR1cmVTdXBw
b3J0KCk7CisKICAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwogCiAgICAgICAgIG1TdGF0
ZS52aWV3cG9ydFggPSAwOwpAQCAtMjQ4LDE5ICsyODYsMTEgQEAgdm9pZCBDb250ZXh0OjptYWtl
Q3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZWZhdWx0UmVu
ZGVyVGFyZ2V0ID0gc3VyZmFjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKmRlcHRoU3RlbmNpbCA9IHN1cmZhY2UtPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAg
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBGcmFtZWJ1ZmZlcigpOwogICAgIENv
bG9yYnVmZmVyICpjb2xvcmJ1ZmZlclplcm8gPSBuZXcgQ29sb3JidWZmZXIoZGVmYXVsdFJlbmRl
clRhcmdldCk7Ci0gICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyWmVybyA9IG5ldyBEZXB0aGJ1
ZmZlcihkZXB0aFN0ZW5jaWwpOwotICAgIFN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXJaZXJv
ID0gbmV3IFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aFN0ZW5jaWxidWZm
ZXIgKmRlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBuZXcgRGVwdGhTdGVuY2lsYnVmZmVyKGRlcHRo
U3RlbmNpbCk7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0
RnJhbWVidWZmZXIoY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsKIAog
ICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOwotICAgIHNldENvbG9yYnVm
ZmVyWmVybyhjb2xvcmJ1ZmZlclplcm8pOwotICAgIHNldERlcHRoYnVmZmVyWmVybyhkZXB0aGJ1
ZmZlclplcm8pOwotICAgIHNldFN0ZW5jaWxidWZmZXJaZXJvKHN0ZW5jaWxidWZmZXJaZXJvKTsK
LQotICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0Q29sb3JidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAw
KTsKLSAgICBmcmFtZWJ1ZmZlclplcm8tPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
MCk7Ci0gICAgZnJhbWVidWZmZXJaZXJvLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgMCk7CiAKICAgICBkZWZhdWx0UmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CiAKQEAgLTI2OSwx
NiArMjk5LDcgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OkRpc3BsYXkgKgogICAg
ICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1EZXZp
Y2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19WRVJTSU9OKDMsIDApKQotICAgIHsK
LSAgICAgICAgbVBzUHJvZmlsZSA9ICJwc18zXzAiOwotICAgICAgICBtVnNQcm9maWxlID0gInZz
XzNfMCI7Ci0gICAgfQotICAgIGVsc2UgIC8vIGVnbDo6RGlzcGxheSBndWFyYW50ZWVzIHN1cHBv
cnQgZm9yIGF0IGxlYXN0IDIuMAotICAgIHsKLSAgICAgICAgbVBzUHJvZmlsZSA9ICJwc18yXzAi
OwotICAgICAgICBtVnNQcm9maWxlID0gInZzXzJfMCI7Ci0gICAgfQorICAgIG1TdXBwb3J0c1No
YWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19WRVJT
SU9OKDMsIDApOwogCiAgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKIH0KQEAgLTMwMCw2ICszMjEs
MTIgQEAgdm9pZCBDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbVNjaXNzb3JTdGF0
ZURpcnR5ID0gdHJ1ZTsKICAgICBtU2FtcGxlU3RhdGVEaXJ0eSA9IHRydWU7CiAgICAgbURpdGhl
clN0YXRlRGlydHkgPSB0cnVlOworICAgIG1Gcm9udEZhY2VEaXJ0eSA9IHRydWU7CisKKyAgICBp
ZiAobUJ1ZmZlckJhY2tFbmQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1CdWZmZXJCYWNrRW5k
LT5pbnZhbGlkYXRlKCk7CisgICAgfQogfQogCiB2b2lkIENvbnRleHQ6OnNldENsZWFyQ29sb3Io
ZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpCkBAIC02NzEs
MTkgKzY5OCwyNCBAQCB2b2lkIENvbnRleHQ6OnNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2CiAg
ICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSBhY3RpdmU7CiB9CiAKLUdMdWludCBDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0CitHTHVpbnQgQ29udGV4dDo6Z2V0UmVhZEZyYW1l
YnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZl
cjsKK30KKworR0x1aW50IENvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5mcmFtZWJ1ZmZlcjsKKyAgICByZXR1cm4gbVN0YXRlLmRy
YXdGcmFtZWJ1ZmZlcjsKIH0KIAogR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRs
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXI7CisgICAgcmV0dXJu
IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsKIH0KIAogR0x1aW50IENvbnRleHQ6OmdldEFycmF5
QnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyOwor
ICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKIH0KIAogdm9pZCBDb250ZXh0Ojpz
ZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxl
ZCkKQEAgLTY5NiwxMCArNzI4LDEwIEBAIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZDb250ZXh0Ojpn
ZXRWZXJ0ZXgKICAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOwog
fQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRy
aWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wg
bm9ybWFsaXplZCwKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5
cGUsIGJvb2wgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCiB7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlciA9IGJvdW5kQnVmZmVyOworICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVm
ZmVyKTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBzaXpl
OwogICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7CiAg
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9ybWFs
aXplZDsKQEAgLTczOCw3MiArNzcwLDI5IEBAIEdMaW50IENvbnRleHQ6OmdldFVucGFja0FsaWdu
bWVudCgpIGNvbnMKICAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKIH0KIAotLy8g
UmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKIEdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZm
ZXIoKQogewotICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1CdWZm
ZXJNYXAuZmluZChoYW5kbGUpICE9IG1CdWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBo
YW5kbGUrKzsKLSAgICB9Ci0KLSAgICBtQnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0gICAg
cmV0dXJuIGhhbmRsZTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlQnVmZmVy
KCk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRlci9wcm9ncmFtIG5hbWUKLUdMdWlu
dCBDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCitHTHVpbnQgQ29udGV4dDo6Y3Jl
YXRlUHJvZ3JhbSgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7Ci0KLSAgICB3aGls
ZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQoKSB8fCBtUHJvZ3Jh
bU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkpICAgLy8gU2hhcmVkIG5hbWUg
c3BhY2UKLSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQotICAgIGlmICh0eXBlID09
IEdMX1ZFUlRFWF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBu
ZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gR0xfRlJBR01FTlRfU0hBREVSKQotICAgIHsKLSAgICAgICAgbVNoYWRlck1hcFtoYW5kbGVd
ID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7Ci0gICAgfQotICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgIHJldHVybiBoYW5kbGU7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmNyZWF0ZVByb2dyYW0oKTsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3Jh
bS9zaGFkZXIgbmFtZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVByb2dyYW0oKQorR0x1aW50IENv
bnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaGFu
ZGxlID0gMTsKLQotICAgIHdoaWxlIChtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dy
YW1NYXAuZW5kKCkgfHwgbVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5lbmQo
KSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQotICAgIHsKLSAgICAgICAgaGFuZGxlKys7Ci0gICAg
fQotCi0gICAgbVByb2dyYW1NYXBbaGFuZGxlXSA9IG5ldyBQcm9ncmFtKCk7Ci0KLSAgICByZXR1
cm4gaGFuZGxlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVTaGFkZXIodHlw
ZSk7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQogR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwotCi0g
ICAgd2hpbGUgKG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKSAhPSBtVGV4dHVyZU1hcC5lbmQoKSkK
LSAgICB7Ci0gICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQotICAgIG1UZXh0dXJlTWFwW2hhbmRs
ZV0gPSBOVUxMOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKCk7
Cit9CiAKLSAgICByZXR1cm4gaGFuZGxlOworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOwogfQogCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCkBAIC04MjEs
ODUgKzgxMCw0NCBAQCBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogICAgIHJl
dHVybiBoYW5kbGU7CiB9CiAKLS8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1l
Ci1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICB1bnNpZ25lZCBp
bnQgaGFuZGxlID0gMTsKLQotICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxl
KSAhPSBtUmVuZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaGFuZGxlKys7Ci0g
ICAgfQotCi0gICAgbVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKLQotICAgIHJldHVy
biBoYW5kbGU7Ci19Ci0KIHZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZp
bmQoYnVmZmVyKTsKLQotICAgIGlmIChidWZmZXJPYmplY3QgIT0gbUJ1ZmZlck1hcC5lbmQoKSkK
KyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGJ1ZmZlcikpCiAgICAgewogICAg
ICAgICBkZXRhY2hCdWZmZXIoYnVmZmVyKTsKLQotICAgICAgICBkZWxldGUgYnVmZmVyT2JqZWN0
LT5zZWNvbmQ7Ci0gICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2JqZWN0KTsKICAgICB9
CisgICAgCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7CiB9CiAK
IHZvaWQgQ29udGV4dDo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpCiB7Ci0gICAgU2hhZGVy
TWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFwLmZpbmQoc2hhZGVyKTsKLQot
ICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAg
IGlmICghc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmlzQXR0YWNoZWQoKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVsZXRlIHNoYWRlck9iamVjdC0+c2Vjb25kOwotICAgICAgICAgICAgbVNoYWRl
ck1hcC5lcmFzZShzaGFkZXJPYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgc2hhZGVyT2JqZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigp
OwotICAgICAgICB9Ci0gICAgfQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNoYWRlcihz
aGFkZXIpOwogfQogCiB2b2lkIENvbnRleHQ6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0p
CiB7Ci0gICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFw
LmZpbmQocHJvZ3JhbSk7Ci0KLSAgICBpZiAocHJvZ3JhbU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5l
bmQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChwcm9ncmFtICE9IG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1PYmplY3QtPnNlY29uZDsK
LSAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1PYmplY3QpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2Vj
b25kLT5mbGFnRm9yRGVsZXRpb24oKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5kZWxldGVQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIENvbnRleHQ6OmRlbGV0
ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpCiB7Ci0gICAgVGV4dHVyZU1hcDo6aXRlcmF0b3IgdGV4
dHVyZU9iamVjdCA9IG1UZXh0dXJlTWFwLmZpbmQodGV4dHVyZSk7Ci0KLSAgICBpZiAodGV4dHVy
ZU9iamVjdCAhPSBtVGV4dHVyZU1hcC5lbmQoKSkKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKSkKICAgICB7CiAgICAgICAgIGRldGFjaFRleHR1cmUodGV4dHVy
ZSk7CisgICAgfQogCi0gICAgICAgIGlmICh0ZXh0dXJlICE9IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRlbGV0ZSB0ZXh0dXJlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIH0KKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworfQogCi0gICAgICAgIG1UZXh0
dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOwordm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJi
dWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAobVJlc291cmNlTWFuYWdlci0+
Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpCisgICAgeworICAgICAgICBkZXRhY2hSZW5k
ZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKICAgICB9CisgICAgCisgICAgbVJlc291cmNlTWFuYWdl
ci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKIHZvaWQgQ29udGV4dDo6
ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQpAQCAtOTE1LDMwNyArODYzLDE4
NiBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQog
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQor
QnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkKIHsKLSAgICBSZW5kZXJi
dWZmZXJNYXA6Oml0ZXJhdG9yIHJlbmRlcmJ1ZmZlck9iamVjdCA9IG1SZW5kZXJidWZmZXJNYXAu
ZmluZChyZW5kZXJidWZmZXIpOwotCi0gICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCAhPSBtUmVu
ZGVyYnVmZmVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgZGV0YWNoUmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcik7Ci0KLSAgICAgICAgZGVsZXRlIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2Vjb25k
OwotICAgICAgICBtUmVuZGVyYnVmZmVyTWFwLmVyYXNlKHJlbmRlcmJ1ZmZlck9iamVjdCk7Ci0g
ICAgfQorICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKIH0K
IAotdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKK1No
YWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCiB7Ci0gICAgaWYgKGJ1ZmZl
ciAhPSAwICYmICFnZXRCdWZmZXIoYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIG1CdWZmZXJNYXBb
YnVmZmVyXSA9IG5ldyBCdWZmZXIoKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUuYXJyYXlCdWZmZXIg
PSBidWZmZXI7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlcihoYW5kbGUp
OwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQgaW50
IGJ1ZmZlcikKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkKIHsK
LSAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQotICAgIHsKLSAgICAg
ICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOwotICAgIH0KLQotICAgIG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KIAotdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJE
KEdMdWludCB0ZXh0dXJlKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGV4dHVyZShHTHVpbnQgaGFu
ZGxlKQogewotICAgIGlmICghZ2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCi0g
ICAgewotICAgICAgICBtVGV4dHVyZU1hcFt0ZXh0dXJlXSA9IG5ldyBUZXh0dXJlMkQodGhpcyk7
Ci0gICAgfQotCi0gICAgbVN0YXRlLnRleHR1cmUyRCA9IHRleHR1cmU7Ci0KLSAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdID0gdGV4dHVy
ZTsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0VGV4dHVyZShoYW5kbGUpOwogfQog
Ci12b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkKK1JlbmRl
cmJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpCiB7Ci0gICAg
aWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKLSAgICB7Ci0gICAgICAg
IG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOwotICAgIH0K
LQotICAgIG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcCA9IHRleHR1cmU7Ci0KLSAgICBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0gPSB0ZXh0dXJl
OworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsK
IH0KIAotdm9pZCBDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQor
RnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigpCiB7Ci0gICAgaWYgKCFn
ZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCi0gICAgewotICAgICAgICBtRnJhbWVidWZmZXJN
YXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRl
LmZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CisgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1T
dGF0ZS5yZWFkRnJhbWVidWZmZXIpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRSZW5kZXJidWZm
ZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJh
bWVidWZmZXIoKQogewotICAgIGlmIChyZW5kZXJidWZmZXIgIT0gMCAmJiAhZ2V0UmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcikpCi0gICAgewotICAgICAgICBtUmVuZGVyYnVmZmVyTWFwW3JlbmRl
cmJ1ZmZlcl0gPSBuZXcgUmVuZGVyYnVmZmVyKCk7Ci0gICAgfQotCi0gICAgbVN0YXRlLnJlbmRl
cmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlcjsKKyAgICByZXR1cm4gZ2V0RnJhbWVidWZmZXIobVN0YXRl
LmRyYXdGcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29udGV4dDo6dXNlUHJvZ3JhbShHTHVpbnQg
cHJvZ3JhbSkKK3ZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZm
ZXIpCiB7Ci0gICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdldEN1cnJlbnRQcm9ncmFtKCk7
CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CiAK
LSAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOwotICAgIG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0
Y2ggYmVmb3JlIHRyeWluZyB0byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dl
ZC4KLQotICAgIGlmIChwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW1PYmplY3QtPmlzRmxhZ2dlZEZv
ckRlbGV0aW9uKCkpCi0gICAgewotICAgICAgICBkZWxldGVQcm9ncmFtKHByaW9yUHJvZ3JhbSk7
Ci0gICAgfQorICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwog
fQogCi12b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVy
KQordm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBidWZm
ZXIpCiB7Ci0gICAgZGVsZXRlIG1GcmFtZWJ1ZmZlck1hcFswXTsKLSAgICBtRnJhbWVidWZmZXJN
YXBbMF0gPSBidWZmZXI7Ci19CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxv
Y2F0aW9uKGJ1ZmZlcik7CiAKLXZvaWQgQ29udGV4dDo6c2V0Q29sb3JidWZmZXJaZXJvKENvbG9y
YnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRlIG1Db2xvcmJ1ZmZlclplcm87Ci0gICAgbUNv
bG9yYnVmZmVyWmVybyA9IGJ1ZmZlcjsKKyAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNl
dChnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKLXZvaWQgQ29udGV4dDo6c2V0RGVwdGhidWZmZXJa
ZXJvKERlcHRoYnVmZmVyICpidWZmZXIpCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1
aW50IHRleHR1cmUpCiB7Ci0gICAgZGVsZXRlIG1EZXB0aGJ1ZmZlclplcm87Ci0gICAgbURlcHRo
YnVmZmVyWmVybyA9IGJ1ZmZlcjsKLX0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1
cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfMkQpOwogCi12b2lkIENvbnRleHQ6OnNldFN0
ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZmZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxldGUgbVN0
ZW5jaWxidWZmZXJaZXJvOwotICAgIG1TdGVuY2lsYnVmZmVyWmVybyA9IGJ1ZmZlcjsKLX0KKyAg
ICBtU3RhdGUudGV4dHVyZTJELnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIAotdm9pZCBDb250
ZXh0OjpzZXRSZW5kZXJidWZmZXIoUmVuZGVyYnVmZmVyICpidWZmZXIpCi17Ci0gICAgZGVsZXRl
IG1SZW5kZXJidWZmZXJNYXBbbVN0YXRlLnJlbmRlcmJ1ZmZlcl07Ci0gICAgbVJlbmRlcmJ1ZmZl
ck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXSA9IGJ1ZmZlcjsKKyAgICBtU3RhdGUuc2FtcGxlclRl
eHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChtU3RhdGUudGV4dHVy
ZTJELmdldCgpKTsKIH0KIAotQnVmZmVyICpDb250ZXh0OjpnZXRCdWZmZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJl
KQogewotICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhh
bmRsZSk7Ci0KLSAgICBpZiAoYnVmZmVyID09IG1CdWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGJ1ZmZlci0+c2Vjb25kOwotICAgIH0KLX0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1Rl
eHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNBTVBMRVJfQ1VCRSk7CiAKLVNoYWRlciAqQ29udGV4
dDo6Z2V0U2hhZGVyKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgU2hhZGVyTWFwOjppdGVy
YXRvciBzaGFkZXIgPSBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBtU3RhdGUudGV4dHVy
ZUN1YmVNYXAuc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogCi0gICAgaWYgKHNoYWRlciA9PSBt
U2hhZGVyTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaGFkZXItPnNlY29uZDsKLSAgICB9CisgICAg
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJd
LnNldChtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOwogfQogCi1Qcm9ncmFtICpDb250ZXh0
OjpnZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCit2b2lkIENvbnRleHQ6OmJpbmRSZWFk
RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewotICAgIFByb2dyYW1NYXA6Oml0ZXJh
dG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAocHJvZ3Jh
bSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAg
IH0KLSAgICBlbHNlCisgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCiAgICAg
ewotICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vjb25kOworICAgICAgICBtRnJhbWVidWZmZXJN
YXBbZnJhbWVidWZmZXJdID0gbmV3IEZyYW1lYnVmZmVyKCk7CiAgICAgfQotfQotCi1UZXh0dXJl
ICpDb250ZXh0OjpnZXRUZXh0dXJlKHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0gICAgaWYgKGhh
bmRsZSA9PSAwKSByZXR1cm4gTlVMTDsKLQotICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1
cmUgPSBtVGV4dHVyZU1hcC5maW5kKGhhbmRsZSk7CiAKLSAgICBpZiAodGV4dHVyZSA9PSBtVGV4
dHVyZU1hcC5lbmQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gdGV4dHVyZS0+c2Vjb25kOwotICAgIH0KKyAgICBt
U3RhdGUucmVhZEZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7CiB9CiAKLUZyYW1lYnVmZmVyICpD
b250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0
OjpiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBGcmFtZWJ1
ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5k
bGUpOwotCi0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCisgICAgaWYgKCFnZXRG
cmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCiAgICAgewotICAgICAgICByZXR1cm4gZnJhbWVidWZm
ZXItPnNlY29uZDsKKyAgICAgICAgbUZyYW1lYnVmZmVyTWFwW2ZyYW1lYnVmZmVyXSA9IG5ldyBG
cmFtZWJ1ZmZlcigpOwogICAgIH0KKworICAgIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXIgPSBmcmFt
ZWJ1ZmZlcjsKIH0KIAotUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIodW5z
aWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQg
cmVuZGVyYnVmZmVyKQogewotICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVm
ZmVyID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKHJlbmRlcmJ1ZmZlcik7CiAKLSAgICBpZiAo
cmVuZGVyYnVmZmVyID09IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRl
cmJ1ZmZlci0+c2Vjb25kOwotICAgIH0KKyAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSk7CiB9CiAKLUNvbG9yYnVmZmVyICpDb250ZXh0Ojpn
ZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQogewotICAgIGlmIChoYW5kbGUgIT0gMCkKKyAgICBHTHVpbnQgcHJpb3JQ
cm9ncmFtID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOworICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bSA9IHByb2dyYW07ICAgICAgICAgICAgICAgLy8gTXVzdCBzd2l0Y2ggYmVmb3JlIHRyeWluZyB0
byBkZWxldGUsIG90aGVyd2lzZSBpdCBvbmx5IGdldHMgZmxhZ2dlZC4KKworICAgIGlmIChwcmlv
clByb2dyYW0gIT0gcHJvZ3JhbSkKICAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVy
YnVmZmVyID0gZ2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisgICAgICAgIFByb2dyYW0gKm5ld1By
b2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICBQ
cm9ncmFtICpvbGRQcm9ncmFtID0gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShwcmlvclBy
b2dyYW0pOwogCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc0Nv
bG9yYnVmZmVyKCkpCisgICAgICAgIGlmIChuZXdQcm9ncmFtKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIpOworICAg
ICAgICAgICAgbmV3UHJvZ3JhbS0+YWRkUmVmKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChvbGRQcm9ncmFtKQorICAgICAgICB7CisgICAgICAgICAgICBvbGRQcm9ncmFtLT5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAgIC8vIFNwZWNpYWwgY2FzZTog
MCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRhcmdldHMgYmFzZWQgb24gdGhl
IGF0dGFjaG1lbnQgdHlwZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclplcm87
Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CiB9CiAKLURlcHRoYnVmZmVyICpDb250ZXh0Ojpn
ZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZl
clplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKIHsKLSAgICBpZiAoaGFuZGxlICE9IDApCi0gICAg
ewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGdldFJlbmRlcmJ1ZmZlciho
YW5kbGUpOwotCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIgJiYgcmVuZGVyYnVmZmVyLT5pc0Rl
cHRoYnVmZmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
ZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAg
IC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgcmVuZGVyIHRh
cmdldHMgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1EZXB0aGJ1ZmZlclplcm87Ci0gICAgfQorICAgIGRlbGV0ZSBtRnJhbWVidWZmZXJNYXBbMF07
CisgICAgbUZyYW1lYnVmZmVyTWFwWzBdID0gYnVmZmVyOworfQogCi0gICAgcmV0dXJuIE5VTEw7
Cit2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFn
ZSAqcmVuZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0
ID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKKyAgICByZW5kZXJidWZmZXJPYmplY3QtPnNl
dFN0b3JhZ2UocmVuZGVyYnVmZmVyKTsKIH0KIAotU3RlbmNpbGJ1ZmZlciAqQ29udGV4dDo6Z2V0
U3RlbmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZy
YW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCiB7Ci0gICAgaWYgKGhhbmRsZSAhPSAwKQot
ICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBt
RnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOwogCi0gICAgICAgIGlmIChyZW5kZXJidWZmZXIg
JiYgcmVuZGVyYnVmZmVyLT5pc1N0ZW5jaWxidWZmZXIoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0ZW5jaWxidWZmZXIqPihyZW5kZXJidWZmZXIpOwotICAg
ICAgICB9CisgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAg
ICByZXR1cm4gbVN0ZW5jaWxidWZmZXJaZXJvOworICAgICAgICByZXR1cm4gZnJhbWVidWZmZXIt
PnNlY29uZDsKICAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAogQnVmZmVyICpDb250ZXh0
OjpnZXRBcnJheUJ1ZmZlcigpCiB7Ci0gICAgcmV0dXJuIGdldEJ1ZmZlcihtU3RhdGUuYXJyYXlC
dWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKIEJ1ZmZl
ciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKIHsKLSAgICByZXR1cm4gZ2V0QnVm
ZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpOworICAgIHJldHVybiBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmdldCgpOwogfQogCiBQcm9ncmFtICpDb250ZXh0OjpnZXRDdXJyZW50UHJv
Z3JhbSgpCiB7Ci0gICAgcmV0dXJuIGdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsK
KyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFBy
b2dyYW0pOwogfQogCiBUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpCiB7Ci0gICAg
aWYgKG1TdGF0ZS50ZXh0dXJlMkQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRv
IGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKKyAgICBpZiAo
bVN0YXRlLnRleHR1cmUyRC5pZCgpID09IDApICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0
byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0dXJlcyBiYXNlZCBvbiB0aGUgdGFyZ2V0CiAgICAgewog
ICAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm87CiAgICAgfQogCi0gICAgcmV0dXJuIChUZXh0
dXJlMkQqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmUyRCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHR1cmUyRCo+KG1TdGF0ZS50ZXh0dXJlMkQuZ2V0KCkpOwogfQogCiBUZXh0dXJlQ3Vi
ZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQogewotICAgIGlmIChtU3RhdGUudGV4
dHVyZUN1YmVNYXAgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVu
dCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKKyAgICBpZiAobVN0YXRlLnRl
eHR1cmVDdWJlTWFwLmlkKCkgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRp
ZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKICAgICB7CiAgICAg
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOwogICAgIH0KIAotICAgIHJldHVybiAoVGV4
dHVyZUN1YmVNYXAqKWdldFRleHR1cmUobVN0YXRlLnRleHR1cmVDdWJlTWFwKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPihtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0
KCkpOwogfQogCiBUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBp
bnQgc2FtcGxlciwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBHTHVpbnQgdGV4aWQgPSBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl07CisgICAgR0x1aW50IHRleGlkID0gbVN0
YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7CiAKICAgICBpZiAodGV4aWQg
PT0gMCkKICAgICB7CkBAIC0xMjI3LDEyICsxMDU0LDcgQEAgVGV4dHVyZSAqQ29udGV4dDo6Z2V0
U2FtcGxlclRleHR1cmUodW5zaQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGdldFRl
eHR1cmUodGV4aWQpOwotfQotCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIo
KQotewotICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUuZnJhbWVidWZmZXIpOworICAg
IHJldHVybiBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uZ2V0KCk7CiB9CiAK
IGJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4gKnBhcmFt
cykKQEAgLTEyODMsNyArMTEwNSw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0RmxvYXR2KEdMZW51bSBw
bmFtZSwgR0wKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0la
RV9SQU5HRToKICAgICAgICAgcGFyYW1zWzBdID0gZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NSU47Ci0gICAgICAgIHBhcmFtc1sxXSA9IGdsOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0Vf
TUFYOworICAgICAgICBwYXJhbXNbMV0gPSBzdXBwb3J0c1NoYWRlck1vZGVsMygpID8gZ2w6OkFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zIDogZ2w6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NQVhfU00yOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6
CiAgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS56TmVhcjsKQEAgLTEzMjYsMTMgKzExNDgsMTMg
QEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBH
TF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdsOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTOyAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9SRU5ERVJCVUZGRVJf
U0laRTsgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllf
Rk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6ICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAvKiBubyBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlcjsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
cjsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzog
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZnJhbWVidWZmZXI7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXI7ICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOworICAgICAgLy9jYXNlIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKKyAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9V
TlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tB
bGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzYzLDggKzExODUsNjMgQEAgYm9v
bCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9TVUJQ
SVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX1NJWkU7ICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RTogICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTsgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBhdCBjdXJyZW50LCBvbmx5IEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQgYW5kIAorICAgICAgICAgICAgICAgIC8vIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUIGFyZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gMjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5HTEU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEdMc2l6ZWkgbWF4U2FtcGxlcyA9IGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsKKyAgICAg
ICAgICAgIGlmIChtYXhTYW1wbGVzICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1heFNhbXBsZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgY2FzZSBHTF9TQU1Q
TEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICAgCisgICAgICBjYXNlIEdMX1NBTVBMRVM6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOgorICAgICAgICAgICAgICAgICAgICBpZiAoZnJh
bWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVT
OgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZnJhbWVidWZmZXItPmdldFNhbXBsZXMo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgICpwYXJhbXMg
PSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOyAgIGJyZWFrOwogICAgICAgY2Fz
ZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDsgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9W
SUVXUE9SVF9ESU1TOgpAQCAtMTM3NCw2ICsxMjUxLDE1IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50
ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lv
bjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9U
RVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0NvbXBy
ZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1sw
XSA9IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7CisgICAgICAgICAgICAgICAgcGFy
YW1zWzFdID0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1ZJRVdQT1JUOgogICAg
ICAgICBwYXJhbXNbMF0gPSBtU3RhdGUudmlld3BvcnRYOwogICAgICAgICBwYXJhbXNbMV0gPSBt
U3RhdGUudmlld3BvcnRZOwpAQCAtMTM5Myw3ICsxMjc5LDcgQEAgYm9vbCBDb250ZXh0OjpnZXRJ
bnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9CTFVFX0JJVFM6CiAgICAgICBj
YXNlIEdMX0FMUEhBX0JJVFM6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogICAgICAgICAgICAg
Z2w6OkNvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpOwogCiAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXIpCkBAIC0xNDE0LDggKzEzMDAsOCBA
QCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOgogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAg
IGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRo
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgICAgIGlm
IChkZXB0aGJ1ZmZlcikKICAgICAgICAgICAgIHsKQEAgLTE0MjksOCArMTMxNSw4IEBAIGJvb2wg
Q29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX1NURU5DSUxfQklUUzoKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICBnbDo6
U3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyICpzdGVu
Y2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKIAogICAgICAgICAg
ICAgaWYgKHN0ZW5jaWxidWZmZXIpCiAgICAgICAgICAgICB7CkBAIC0xNDUwLDcgKzEzMzYsNyBA
QCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfMkRdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXTsK
KyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDoKQEAgLTE0NjEsNyArMTM0Nyw3
IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxl
cl07CisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJf
Q1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgICBkZWZhdWx0OgpAQCAtMTU1Miw2ICsxNDM4LDE5IEBAIGJvb2wgQ29udGV4dDo6
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdM
RToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAg
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX1ZJ
RVdQT1JUX0RJTVM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwpAQCAt
MTYyNiw3ICsxNTI1LDcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGln
bgogewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwogCi0gICAg
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAog
ICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRl
bmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKQEAgLTE2MzYsMjAgKzE1
MzUsMzUgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29sIGlnbgogICAgIH0K
IAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBmcmFtZWJ1ZmZlck9iamVj
dC0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNp
bCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKIAogICAgIHVuc2lnbmVkIGludCByZW5kZXJU
YXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCk7
CiAgICAgaWYgKHJlbmRlclRhcmdldFNlcmlhbCAhPSBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdl
dCk7CiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2Vy
aWFsOworICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSB0cnVlOyAvLyBTY2lzc29yIGFyZWEg
bXVzdCBiZSBjbGFtcGVkIHRvIHJlbmRlciB0YXJnZXQncyBzaXplLS0gdGhpcyBpcyBkaWZmZXJl
bnQgZm9yIGRpZmZlcmVudCByZW5kZXIgdGFyZ2V0cy4KKyAgICB9CisKKyAgICB1bnNpZ25lZCBp
bnQgZGVwdGhidWZmZXJTZXJpYWwgPSAwOworICAgIHVuc2lnbmVkIGludCBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gMDsKKyAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlw
ZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZl
ck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIGRl
cHRoYnVmZmVyU2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyKCktPmdl
dFNlcmlhbCgpOworICAgIH0KKyAgICBlbHNlIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgZGVwdGhTdGVuY2ls
ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
U3RlbmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQg
ZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJTZXJp
YWwoKTsKLSAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNl
cmlhbCkKKyAgICBpZiAoZGVwdGhidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNl
cmlhbCB8fAorICAgICAgICBzdGVuY2lsYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFj
ZShkZXB0aFN0ZW5jaWwpOwogICAgICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsID0gZGVw
dGhidWZmZXJTZXJpYWw7CisgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCA9IHN0
ZW5jaWxidWZmZXJTZXJpYWw7CiAgICAgfQogCiAgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0OwpA
QCAtMTY5MCw3ICsxNjA0LDggQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChib29s
IGlnbgogICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0ZS5zY2lzc29y
SGVpZ2h0fTsKLQorICAgICAgICAgICAgcmVjdC5yaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0
PFVJTlQ+KHJlY3QucmlnaHQpLCBkZXNjLldpZHRoKTsKKyAgICAgICAgICAgIHJlY3QuYm90dG9t
ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8VUlOVD4ocmVjdC5ib3R0b20pLCBkZXNjLkhlaWdodCk7
CiAgICAgICAgICAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZyZWN0KTsKICAgICAgICAgICAg
IGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIFRSVUUpOwog
ICAgICAgICB9CkBAIC0xNjk4LDcgKzE2MTMsNyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVy
VGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVy
U3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBtU2Npc3NvclN0YXRlRGlydHkgPSBmYWxzZTsKICAgICB9CiAKQEAgLTE3
MTAsNyArMTYyNSw3IEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24K
ICAgICAgICAgR0xmbG9hdCB4eVsyXSA9IHsxLjBmIC8gdmlld3BvcnQuV2lkdGgsIDEuMGYgLyB2
aWV3cG9ydC5IZWlnaHR9OwogICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2KGhh
bGZQaXhlbFNpemUsIDEsIChHTGZsb2F0KikmeHkpOwogCi0gICAgICAgIEdMaW50IHdpbmRvdyA9
IHByb2dyYW1PYmplY3QtPmdldER4V2luZG93TG9jYXRpb24oKTsKKyAgICAgICAgR0xpbnQgd2lu
ZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhWaWV3cG9ydExvY2F0aW9uKCk7CiAgICAgICAgIEdM
ZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52aWV3
cG9ydEhlaWdodCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0
YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRZICsgbVN0YXRlLnZpZXdwb3J0
SGVpZ2h0IC8gMi4wZn07CkBAIC0xNzQ4LDYgKzE2NjMsOCBAQCB2b2lkIENvbnRleHQ6OmFwcGx5
U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiAgICAgR0xpbnQgYWx3YXlzRnJvbnQgPSAhaXNUcmlhbmds
ZU1vZGUoZHJhd01vZGUpOwogICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xaXYocG9pbnRz
T3JMaW5lcywgMSwgJmFsd2F5c0Zyb250KTsKIAorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCiAgICAgaWYgKG1DdWxsU3RhdGVEaXJ0
eSB8fCBtRnJvbnRGYWNlRGlydHkpCiAgICAgewogICAgICAgICBpZiAobVN0YXRlLmN1bGxGYWNl
KQpAQCAtMTc2NCw3ICsxNjgxLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBk
cmF3TW9kZQogCiAgICAgaWYgKG1EZXB0aFN0YXRlRGlydHkpCiAgICAgewotICAgICAgICBpZiAo
bVN0YXRlLmRlcHRoVGVzdCkKKyAgICAgICAgaWYgKG1TdGF0ZS5kZXB0aFRlc3QgJiYgZnJhbWVi
dWZmZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgRDNEWkJf
VFJVRSk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pGVU5DLCBl
czJkeDo6Q29udmVydENvbXBhcmlzb24obVN0YXRlLmRlcHRoRnVuYykpOwpAQCAtMTgyNiw3ICsx
NzQzLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogCiAgICAg
aWYgKG1TdGVuY2lsU3RhdGVEaXJ0eSB8fCBtRnJvbnRGYWNlRGlydHkpCiAgICAgewotICAgICAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGhhc1N0ZW5jaWwoKSkKKyAgICAgICAgaWYgKG1T
dGF0ZS5zdGVuY2lsVGVzdCAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+aGFzU3RlbmNpbCgpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxF
TkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19U
V09TSURFRFNURU5DSUxNT0RFLCBUUlVFKTsKQEAgLTE4NDQsOCArMTc2MSw3IEBAIHZvaWQgQ29u
dGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgLy8gZ2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHN0ZW5jaWwgcmVmCi0gICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKLSAg
ICAgICAgICAgIGdsOjpTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIg
KnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwog
ICAgICAgICAgICAgR0x1aW50IG1heFN0ZW5jaWwgPSAoMSA8PCBzdGVuY2lsYnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpKSAtIDE7CiAKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUo
bVN0YXRlLmZyb250RmFjZSA9PSBHTF9DQ1cgPyBEM0RSU19TVEVOQ0lMV1JJVEVNQVNLIDogRDNE
UlNfQ0NXX1NURU5DSUxXUklURU1BU0ssIG1TdGF0ZS5zdGVuY2lsV3JpdGVtYXNrKTsKQEAgLTE4
OTcsNyArMTgxMyw3IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUK
ICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUucG9seWdvbk9mZnNldEZpbGwpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBnZXRGcmFtZWJ1ZmZl
cigpLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKTsKICAg
ICAgICAgICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NMT1BFU0NBTEVERVBUSEJJQVMsICooKERX
T1JEKikmbVN0YXRlLnBvbHlnb25PZmZzZXRGYWN0b3IpKTsKQEAgLTE5MTQsNyArMTgzMCw3IEBA
IHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAgICAgICAgbVBvbHln
b25PZmZzZXRTdGF0ZURpcnR5ID0gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKG1Db25maWctPm1N
dWx0aVNhbXBsZSAhPSAwICYmIG1TYW1wbGVTdGF0ZURpcnR5KQorICAgIGlmIChmcmFtZWJ1ZmZl
ck9iamVjdC0+aXNNdWx0aXNhbXBsZSgpICYmIG1TYW1wbGVTdGF0ZURpcnR5KQogICAgIHsKICAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCiAgICAgICAgIHsKQEAgLTE5
MjMsNyArMTgzOSwzNCBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2Rl
CiAKICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZSkKICAgICAgICAgewotICAgICAg
ICAgICAgRklYTUUoIlNhbXBsZSBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAg
ICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRUFOVElBTElBUywg
VFJVRSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisgICAgICAgICAgICBp
ZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCB0aHJlc2hvbGQgPSAwLjVmOworCisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBsZUNvdmVyYWdlVmFsdWUg
Pj0gdGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJlc2hvbGQgKz0gMS4wZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0g
MTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZUlu
dmVydCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVM
VElTQU1QTEVNQVNLLCBtYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJ
QUxJQVMsIEZBTFNFKTsKICAgICAgICAgfQogCiAgICAgICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0g
ZmFsc2U7CkBAIC0yMDA1LDcgKzE5NDgsNyBAQCBHTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhC
dWZmZXIoY29uc3QgCiAvLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJp
bmRpbmdzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQogR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5k
ZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUs
IEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCiB7Ci0gICAgR0xl
bnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBl
LCBjb3VudCwgZ2V0QnVmZmVyKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpLCBpbmRpY2VzLCBp
bmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlUmVuZGVy
VmFsaWRhdGUobW9kZSwgdHlwZSwgY291bnQsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0
KCksIGluZGljZXMsIGluZGV4SW5mbyk7CiAKICAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQog
ICAgIHsKQEAgLTIwOTIsNyArMjAzNSwxOCBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMo
KQogCiB2b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB2b2lkKiBw
aXhlbHMpCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIo
KTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsK
KworICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEUpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOworICAgIH0KKworICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5k
bGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCiAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKIApAQCAt
MjE1NSw2ICsyMTA5LDE5IEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGlu
dCAKIAogICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgaisr
KQogICAgIHsKKyAgICAgICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJgor
ICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCisgICAgICAgICAgICB0eXBlID09
IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBm
b3IgRVhUX3JlYWRfZm9ybWF0X2JncmEsIGdpdmVuCisgICAgICAgICAgICAvLyBhbiBSR0JBIHNv
dXJjZSBidWZmZXIuICBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vCisgICAgICAgICAgICAvLyBh
bHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGggYmVsb3cuCisgICAgICAgICAgICBtZW1jcHko
ZGVzdCArIGogKiBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICog
bG9jay5QaXRjaCwKKyAgICAgICAgICAgICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkg
KiA0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGZsb2F0IHI7CkBAIC0yMjQzLDYgKzIyMTAsNDYgQEAgdm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRj
aCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIp
KDI1NSAqIGcgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoK
KyAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAg
ICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcg
ICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAorICAgICAgICAgICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gfCAgICAg
ICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwg
ICAxc3QgY29tcG9uZW50ICAgfAorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
CisgICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBz
aG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfAorICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6CisgICAgICAgICAgICAgICAgICAgIC8vIEFjY29y
ZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVj
dGFuZ2xlcyIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFj
a2VkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAg
MTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAx
ICAgIDAKKyAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAg
ICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg
ICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQs
IEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBkZXN0MTZb
aSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1KSB8
CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVm
KSA8PCAxMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEg
KiBnICsgMC41ZikgPDwgNSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBz
aG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOiAg
IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUCiAgICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQogICAgICAgICAgICAgICAgIHsKQEAgLTIyNjcsNyArMjI3NCw3IEBAIHZvaWQg
Q29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCAKIAogdm9pZCBDb250ZXh0OjpjbGVh
cihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0
ID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3Qg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAogICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwg
ZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQogICAgIHsKQEAgLTIyOTksMjIgKzIzMDYsMjQgQEAgdm9pZCBDb250ZXh0OjpjbGVhcihH
TGJpdGZpZWxkIG1hc2spCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpOwot
CiAgICAgR0x1aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKIAotICAgIGlmICgobWFzayAmIEdM
X1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgZGVwdGhTdGVuY2lsKQorICAgIGlmIChtYXNrICYgR0xf
U1RFTkNJTF9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7
Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7Ci0KICAgICAgICAgbWFzayAm
PSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFNp
emUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwotICAgICAgICBzdGVuY2ls
VW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0KLSAgICAgICAgaWYgKHN0ZW5j
aWxVbm1hc2tlZCAhPSAweDApCisgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7Ci0gICAgICAgICAgICBmbGFn
cyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERl
cHRoU3RlbmNpbCgpOworICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CisgICAgICAg
ICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgc3RlbmNpbFNpemUgPSBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzYy5Gb3JtYXQpOwor
ICAgICAgICAgICAgc3RlbmNpbFVubWFza2VkID0gKDB4MSA8PCBzdGVuY2lsU2l6ZSkgLSAxOwor
CisgICAgICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjE4LDcgKzI2MjcsOCBAQCB2b2lkIENvbnRleHQ6
OmZpbmlzaCgpCiAgICAgICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICpzYXZlZFN0YXRlID0gTlVM
TDsKICAgICAgICAgZGV2aWNlLT5DcmVhdGVTdGF0ZUJsb2NrKEQzRFNCVF9BTEwsICZzYXZlZFN0
YXRlKTsKIAotICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNESVNTVUVfQkVHSU4pOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9C
RUdJTik7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8g
UmVuZGVyIHNvbWV0aGluZyBvdXRzaWRlIHRoZSByZW5kZXIgdGFyZ2V0CiAgICAgICAgIGRldmlj
ZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKQEAgLTI2MjksNyArMjYzOSw4IEBAIHZvaWQg
Q29udGV4dDo6ZmluaXNoKCkKICAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOwogICAgICAg
ICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9QT0lOVExJU1QsIDEsIGRhdGEsIHNpemVv
ZihkYXRhKSk7CiAKLSAgICAgICAgb2NjbHVzaW9uUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7
CisgICAgICAgIHJlc3VsdCA9IG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9FTkQpOwor
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIHdoaWxlIChvY2Ns
dXNpb25RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKSA9PSBTX0ZBTFNF
KQogICAgICAgICB7CkBAIC0yNjYzLDE1ICsyNjc0LDE2IEBAIHZvaWQgQ29udGV4dDo6Zmx1c2go
KQogCiAgICAgaWYgKGV2ZW50UXVlcnkpCiAgICAgewotICAgICAgICBldmVudFF1ZXJ5LT5Jc3N1
ZShEM0RJU1NVRV9FTkQpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGV2ZW50UXVlcnktPklz
c3VlKEQzRElTU1VFX0VORCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgcmVzdWx0ID0gZXZlbnRRdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RHRVREQVRB
X0ZMVVNIKTsKKyAgICAgICAgZXZlbnRRdWVyeS0+UmVsZWFzZSgpOwogCi0gICAgICAgIHdoaWxl
IChldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpID09IFNfRkFM
U0UpCisgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZywgYnV0IGFsbG93IG90aGVyIHRocmVhZHMgdG8g
ZG8gc29tZXRoaW5nIHVzZWZ1bCBmaXJzdAotICAgICAgICAgICAgU2xlZXAoMCk7CisgICAgICAg
ICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQotCi0gICAgICAgIGV2ZW50
UXVlcnktPlJlbGVhc2UoKTsKICAgICB9CiB9CiAKQEAgLTI3NDIsMTQgKzI3NTQsNDMgQEAgR0xl
bnVtIENvbnRleHQ6OmdldEVycm9yKCkKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CiB9CiAKLWNv
bnN0IGNoYXIgKkNvbnRleHQ6OmdldFBpeGVsU2hhZGVyUHJvZmlsZSgpCitib29sIENvbnRleHQ6
OnN1cHBvcnRzU2hhZGVyTW9kZWwzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzU2hh
ZGVyTW9kZWwzOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworfQorCitpbnQgQ29udGV4
dDo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVl
c3RlZCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVBzUHJvZmlsZTsKKyAgICBpZiAocmVxdWVzdGVk
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gcmVxdWVzdGVkOworICAgIH0KKworICAgIHN0
ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2Ft
cGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgaWYgKGl0ciA9PSBtTXVsdGlTYW1wbGVTdXBw
b3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAo
aW50IGkgPSByZXF1ZXN0ZWQ7IGkgPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgKytpKQor
ICAgIHsKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVf
Tk9OTUFTS0FCTEUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIC0xOwogfQogCi1jb25zdCBjaGFyICpDb250ZXh0OjpnZXRW
ZXJ0ZXhTaGFkZXJQcm9maWxlKCkKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNDb21wcmVzc2VkVGV4
dHVyZXMoKSBjb25zdAogewotICAgIHJldHVybiBtVnNQcm9maWxlOworICAgIHJldHVybiBtU3Vw
cG9ydHNDb21wcmVzc2VkVGV4dHVyZXM7CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGV0YWNoQnVmZmVy
KEdMdWludCBidWZmZXIpCkBAIC0yNzU4LDIxICsyNzk5LDIxIEBAIHZvaWQgQ29udGV4dDo6ZGV0
YWNoQnVmZmVyKEdMdWludCBidWZmZXIKICAgICAvLyBJZiBhIGJ1ZmZlciBvYmplY3QgaXMgZGVs
ZXRlZCB3aGlsZSBpdCBpcyBib3VuZCwgYWxsIGJpbmRpbmdzIHRvIHRoYXQgb2JqZWN0IGluIHRo
ZSBjdXJyZW50IGNvbnRleHQKICAgICAvLyAoaS5lLiBpbiB0aGUgdGhyZWFkIHRoYXQgY2FsbGVk
IERlbGV0ZS1CdWZmZXJzKSBhcmUgcmVzZXQgdG8gemVyby4KIAotICAgIGlmIChtU3RhdGUuYXJy
YXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIGlmIChtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKSA9PSBi
dWZmZXIpCiAgICAgewotICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIgPSAwOworICAgICAgICBt
U3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3RhdGUuZWxl
bWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikKKyAgICBpZiAobVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5pZCgpID09IGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIgPSAwOworICAgICAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsK
ICAgICB9CiAKICAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQogICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICBp
ZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09
IGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlciA9IDA7CisgICAgICAgICAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTI3ODcsOSArMjgyOCw5IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShH
THVpbnQgdGV4dHUKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVy
IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXSA9PSB0ZXh0dXJl
KQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5p
ZCgpID09IHRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVN0YXRlLnNh
bXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKKyAgICAgICAgICAgICAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0KE5VTEwpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMjc5OSwxMSArMjg0MCwxNyBAQCB2b2lkIENvbnRleHQ6OmRl
dGFjaFRleHR1cmUoR0x1aW50IHRleHR1CiAgICAgLy8gYXMgaWYgRnJhbWVidWZmZXJUZXh0dXJl
MkQgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgdGV4dHVyZSBvZiAwLCBmb3IgZWFjaCBhdHRhY2ht
ZW50IHBvaW50IHRvIHdoaWNoIHRoaXMKICAgICAvLyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhl
IGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZm
ZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICBp
ZiAocmVhZEZyYW1lYnVmZmVyKQogICAgIHsKLSAgICAgICAgZnJhbWVidWZmZXItPmRldGFjaFRl
eHR1cmUodGV4dHVyZSk7CisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0
ZXh0dXJlKTsKKyAgICB9CisKKyAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyICYmIGRyYXdGcmFtZWJ1
ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCisgICAgeworICAgICAgICBkcmF3RnJhbWVidWZmZXIt
PmRldGFjaFRleHR1cmUodGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0yODEzLDkgKzI4NjAsMTQg
QEAgdm9pZCBDb250ZXh0OjpkZXRhY2hGcmFtZWJ1ZmZlcihHTHVpbnQgZgogICAgIC8vIElmIGEg
ZnJhbWVidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gdGhlIHRhcmdldCBGUkFNRUJV
RkZFUiBpcyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2gKICAgICAvLyBCaW5kRnJhbWVidWZmZXIg
aGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IG9mIEZSQU1FQlVGRkVSIGFuZCBmcmFt
ZWJ1ZmZlciBvZiB6ZXJvLgogCi0gICAgaWYgKG1TdGF0ZS5mcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1
ZmZlcikKKyAgICBpZiAobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKKyAg
ICB7CisgICAgICAgIGJpbmRSZWFkRnJhbWVidWZmZXIoMCk7CisgICAgfQorCisgICAgaWYgKG1T
dGF0ZS5kcmF3RnJhbWVidWZmZXIgPT0gZnJhbWVidWZmZXIpCiAgICAgewotICAgICAgICBiaW5k
RnJhbWVidWZmZXIoMCk7CisgICAgICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgfQog
fQogCkBAIC0yODI1LDcgKzI4NzcsNyBAQCB2b2lkIENvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZl
cihHTHVpbnQgCiAgICAgLy8gSWYgYSByZW5kZXJidWZmZXIgdGhhdCBpcyBjdXJyZW50bHkgYm91
bmQgdG8gUkVOREVSQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaCBCaW5kUmVuZGVy
YnVmZmVyCiAgICAgLy8gaGFkIGJlZW4gZXhlY3V0ZWQgd2l0aCB0aGUgdGFyZ2V0IFJFTkRFUkJV
RkZFUiBhbmQgbmFtZSBvZiB6ZXJvLgogCi0gICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIgPT0g
cmVuZGVyYnVmZmVyKQorICAgIGlmIChtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCkgPT0gcmVuZGVy
YnVmZmVyKQogICAgIHsKICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKICAgICB9CkBAIC0y
ODM1LDExICsyODg3LDE3IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWlu
dCAKICAgICAvLyB0aGVuIGl0IGlzIGFzIGlmIEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIGhhZCBi
ZWVuIGNhbGxlZCwgd2l0aCBhIHJlbmRlcmJ1ZmZlciBvZiAwLCBmb3IgZWFjaCBhdHRhY2htZW50
CiAgICAgLy8gcG9pbnQgdG8gd2hpY2ggdGhpcyBpbWFnZSB3YXMgYXR0YWNoZWQgaW4gdGhlIGN1
cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlci4KIAotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9
IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgIGlmIChyZWFkRnJhbWVidWZmZXIpCisgICAg
eworICAgICAgICByZWFkRnJhbWVidWZmZXItPmRldGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpOworICAgIH0KIAotICAgIGlmIChmcmFtZWJ1ZmZlcikKKyAgICBpZiAoZHJhd0ZyYW1lYnVm
ZmVyICYmIGRyYXdGcmFtZWJ1ZmZlciAhPSByZWFkRnJhbWVidWZmZXIpCiAgICAgewotICAgICAg
ICBmcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CisgICAgICAg
IGRyYXdGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiAgICAg
fQogfQogCkBAIC0yODU5LDcgKzI5MTcsNyBAQCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBs
ZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBjYXNlIFNBTVBMRVJfMkQ6CiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVyZTJE
KHRoaXMpOworICAgICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRl
eHR1cmUyRChUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwogICAgICAgICAgICAgICAg
IGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7
CiAgICAgICAgICAgICB9CkBAIC0yODY3LDcgKzI5MjUsNyBAQCBUZXh0dXJlICpDb250ZXh0Ojpn
ZXRJbmNvbXBsZXRlVGV4dHVyZShTCiAKICAgICAgICAgICBjYXNlIFNBTVBMRVJfQ1VCRToKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJl
ID0gbmV3IFRleHR1cmVDdWJlTWFwKHRoaXMpOworICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1h
cCAqaW5jb21wbGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAoVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAogICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9y
KTsKICAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCBHTF9SR0JB
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CkBAIC0yOTExLDIz
ICsyOTY5LDYgQEAgYm9vbCBDb250ZXh0Ojppc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhdwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBDb250ZXh0OjpoYXNTdGVuY2lsKCkKLXsKLSAgICBG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOwotCi0gICAg
aWYgKGZyYW1lYnVmZmVyT2JqZWN0KQotICAgIHsKLSAgICAgICAgU3RlbmNpbGJ1ZmZlciAqc3Rl
bmNpbGJ1ZmZlck9iamVjdCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCk7
Ci0KLSAgICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBDb250ZXh0Ojpz
ZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCiB7CiAg
ICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CkBAIC0yOTQyLDYgKzI5
ODMsMjIgQEAgdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZAogCiB2b2lk
IENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogeworICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAiOworICAgIG1FeHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7CisgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOworICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU19yZ2I4X3JnYmE4ICI7CisKKyAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVy
ZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJl
X2NvbXByZXNzaW9uX2R4dDEgIjsKKyAgICB9CisKKyAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpICE9IDApCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAiOworICAgIH0KKwogICAgIGlmIChtQnVmZmVyQmFj
a0VuZC0+c3VwcG9ydEludEluZGljZXMoKSkKICAgICB7CiAgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQgIjsKQEAgLTI5NTksMTMgKzMwMTYsMjg1
IEBAIGNvbnN0IGNoYXIgKkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygKICAgICByZXR1cm4g
bUV4dGVuc2lvblN0cmluZy5jX3N0cigpOwogfQogCit2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1
ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAs
IEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMYml0ZmllbGQgbWFzaykKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXRE
ZXZpY2UoKTsKKworICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJh
bWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0Zy
YW1lYnVmZmVyKCk7CisKKyAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZm
ZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8CisgICAgICAg
ICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIH0KKworICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAg
ICBSRUNUIGRlc3RSZWN0OworCisgICAgaWYgKHNyY1gwIDwgc3JjWDEpCisgICAgeworICAgICAg
ICBzb3VyY2VSZWN0LmxlZnQgPSBzcmNYMDsKKyAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNy
Y1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDA7CisgICAgICAgIGRlc3RSZWN0LnJp
Z2h0ID0gZHN0WDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvdXJjZVJlY3Qu
bGVmdCA9IHNyY1gxOworICAgICAgICBkZXN0UmVjdC5sZWZ0ID0gZHN0WDE7CisgICAgICAgIHNv
dXJjZVJlY3QucmlnaHQgPSBzcmNYMDsKKyAgICAgICAgZGVzdFJlY3QucmlnaHQgPSBkc3RYMDsK
KyAgICB9CisKKyAgICAvLyBBcmd1bWVudHMgdG8gU3RyZXRjaFJlY3QgbXVzdCBiZSBpbiBEM0Qt
c3R5bGUgKDAtdG9wKSBjb29yZGluYXRlcywgc28gd2UgbXVzdCAKKyAgICAvLyBmbGlwIG91ciBZ
LXZhbHVlcyBoZXJlCisgICAgaWYgKHNyY1kwIDwgc3JjWTEpCisgICAgeworICAgICAgICBzb3Vy
Y2VSZWN0LmJvdHRvbSA9IHNyY1kxOworICAgICAgICBkZXN0UmVjdC5ib3R0b20gPSBkc3RZMTsK
KyAgICAgICAgc291cmNlUmVjdC50b3AgPSBzcmNZMDsKKyAgICAgICAgZGVzdFJlY3QudG9wID0g
ZHN0WTA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNvdXJjZVJlY3QuYm90dG9t
ID0gc3JjWTA7CisgICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9IGRzdFkwOworICAgICAgICBzb3Vy
Y2VSZWN0LnRvcCA9IHNyY1kxOworICAgICAgICBkZXN0UmVjdC50b3AgPSBkc3RZMTsKKyAgICB9
CisKKyAgICBSRUNUIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0OworICAgIFJFQ1Qg
ZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKKworICAgIGlmIChtU3RhdGUuc2Npc3NvclRl
c3QpCisgICAgeworICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5h
dGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QKKyAgICAgICAgLy8g
UGxlYXNlIG5vdGU6IHRoZSBkZXN0UmVjdCBpcyBub3cgaW4gRDNELXN0eWxlIGNvb3JkaW5hdGVz
LCBzbyB0aGUgKnRvcCogb2YgdGhlCisgICAgICAgIC8vIHJlY3Qgd2lsbCBiZSBjaGVja2VkIGFn
YWluc3Qgc2Npc3NvclksIHJhdGhlciB0aGFuIHRoZSBib3R0b20uCisgICAgICAgIGlmIChkZXN0
UmVjdC5sZWZ0IDwgbVN0YXRlLnNjaXNzb3JYKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQg
eERpZmYgPSBtU3RhdGUuc2Npc3NvclggLSBkZXN0UmVjdC5sZWZ0OworICAgICAgICAgICAgZGVz
dFNjaXNzb3JlZFJlY3QubGVmdCA9IG1TdGF0ZS5zY2lzc29yWDsKKyAgICAgICAgICAgIHNvdXJj
ZVNjaXNzb3JlZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChk
ZXN0UmVjdC5yaWdodCA+IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludCB4RGlmZiA9IGRlc3RSZWN0LnJpZ2h0IC0gKG1TdGF0
ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29yV2lkdGgpOworICAgICAgICAgICAgZGVzdFNjaXNz
b3JlZFJlY3QucmlnaHQgPSBtU3RhdGUuc2Npc3NvclggKyBtU3RhdGUuc2Npc3NvcldpZHRoOwor
ICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5yaWdodCAtPSB4RGlmZjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChkZXN0UmVjdC50b3AgPCBtU3RhdGUuc2Npc3NvclkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yWSAtIGRlc3RSZWN0LnRv
cDsKKyAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnRvcCA9IG1TdGF0ZS5zY2lzc29yWTsK
KyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QudG9wICs9IHlEaWZmOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LmJvdHRvbSA+IG1TdGF0ZS5zY2lzc29yWSArIG1TdGF0
ZS5zY2lzc29ySGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgeURpZmYgPSBkZXN0
UmVjdC5ib3R0b20gLSAobVN0YXRlLnNjaXNzb3JZICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpOwor
ICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuYm90dG9tID0gbVN0YXRlLnNjaXNzb3JZICsg
bVN0YXRlLnNjaXNzb3JIZWlnaHQ7CisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmJv
dHRvbSAtPSB5RGlmZjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgYmxpdFJlbmRlclRh
cmdldCA9IGZhbHNlOworICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOworCisgICAg
UkVDVCBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7CisgICAgUkVDVCBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKKworICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCisgICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgorICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgMCkKKyAg
ICB7CisgICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0OworICAg
ICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0
LmxlZnQgKz0geERpZmY7CisgICAgfQorCisgICAgaW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKTsKKyAgICBpbnQgcmVhZEJ1
ZmZlckhlaWdodCA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0
KCk7CisgICAgaW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0V2lkdGgoKTsKKyAgICBpbnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCk7CisKKyAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QucmlnaHQgPiByZWFkQnVmZmVyV2lkdGgpCisgICAgeworICAgICAgICBpbnQg
eERpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHJlYWRCdWZmZXJXaWR0aDsKKyAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgPSByZWFkQnVmZmVyV2lkdGg7CisgICAgICAgIGRl
c3RUcmltbWVkUmVjdC5yaWdodCAtPSB4RGlmZjsKKyAgICB9CisKKyAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VU
cmltbWVkUmVjdC50b3A7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA9IDA7CisgICAg
ICAgIGRlc3RUcmltbWVkUmVjdC50b3AgKz0geURpZmY7CisgICAgfQorCisgICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmJvdHRvbSA+IHJlYWRCdWZmZXJIZWlnaHQpCisgICAgeworICAgICAgICBp
bnQgeURpZmYgPSBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSByZWFkQnVmZmVySGVpZ2h0Owor
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gPSByZWFkQnVmZmVySGVpZ2h0OworICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgIH0KKworICAgIGlmIChk
ZXN0VHJpbW1lZFJlY3QubGVmdCA8IDApCisgICAgeworICAgICAgICBpbnQgeERpZmYgPSAwIC0g
ZGVzdFRyaW1tZWRSZWN0LmxlZnQ7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5sZWZ0ID0gMDsK
KyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICB9CisKKyAgICBp
ZiAoZGVzdFRyaW1tZWRSZWN0LnJpZ2h0ID4gZHJhd0J1ZmZlcldpZHRoKQorICAgIHsKKyAgICAg
ICAgaW50IHhEaWZmID0gZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC0gZHJhd0J1ZmZlcldpZHRoOwor
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgPSBkcmF3QnVmZmVyV2lkdGg7CisgICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOworICAgIH0KKworICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QudG9wIDwgMCkKKyAgICB7CisgICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0
VHJpbW1lZFJlY3QudG9wOworICAgICAgICBkZXN0VHJpbW1lZFJlY3QudG9wID0gMDsKKyAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QudG9wICs9IHlEaWZmOworICAgIH0KKworICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QuYm90dG9tID4gZHJhd0J1ZmZlckhlaWdodCkKKyAgICB7CisgICAgICAgIGlu
dCB5RGlmZiA9IGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkcmF3QnVmZmVySGVpZ2h0OworICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuYm90dG9tID0gZHJhd0J1ZmZlckhlaWdodDsKKyAgICAgICAg
c291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgIH0KKworICAgIGJvb2wgcGFy
dGlhbEJ1ZmZlckNvcHkgPSBmYWxzZTsKKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9t
IC0gc291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
cigpLT5nZXRIZWlnaHQoKSB8fAorICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNv
dXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCkt
PmdldFdpZHRoKCkgfHwgCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJp
bW1lZFJlY3QudG9wIDwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWln
aHQoKSB8fAorICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3Qu
bGVmdCA8IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSB8fAor
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9w
ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5s
ZWZ0ICE9IDApCisgICAgeworICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIHsKKyAgICAgICAg
aWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSB8fAorICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdl
dENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBs
ZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICB9CisKKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRy
dWU7CisKKyAgICB9CisKKyAgICBpZiAobWFzayAmIChHTF9ERVBUSF9CVUZGRVJfQklUIHwgR0xf
U1RFTkNJTF9CVUZGRVJfQklUKSkKKyAgICB7CisgICAgICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAq
cmVhZERTQnVmZmVyID0gTlVMTDsKKyAgICAgICAgRGVwdGhTdGVuY2lsYnVmZmVyICpkcmF3RFNC
dWZmZXIgPSBOVUxMOworCisgICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9z
dGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFu
ZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQorICAgICAgICAvLyBib3RoIGEgZGVwdGgg
YW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KKworICAgICAg
ICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERl
cHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSAmJiBkcmF3RnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8fAorICAgICAgICAgICAgICAgICAgICBy
ZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkgIT0gZHJh
d0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBibGl0RGVw
dGhTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBkcmF3RFNCdWZm
ZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0
cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyBvbmx5IHdob2xlLWJ1ZmZlciBj
b3BpZXMgYXJlIHBlcm1pdHRlZAorICAgICAgICB9CisKKyAgICAgICAgaWYgKChkcmF3RFNCdWZm
ZXIgJiYgZHJhd0RTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkgfHwgCisgICAgICAgICAgICAo
cmVhZERTQnVmZmVyICYmIHJlYWREU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICB7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IGdldERpc3BsYXko
KTsKKyAgICAgICAgZGlzcGxheS0+ZW5kU2NlbmUoKTsKKworICAgICAgICBpZiAoYmxpdFJlbmRl
clRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PlN0cmV0Y2hSZWN0KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCksICZzb3VyY2VU
cmltbWVkUmVjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSwgJmRlc3RUcmltbWVkUmVj
dCwgRDNEVEVYRl9OT05FKTsKKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFp
bGVkOiBTdHJldGNoUmVjdCByZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChibGl0RGVw
dGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwg
ZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKSwgTlVMTCwgRDNEVEVYRl9OT05FKTsK
KworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEVSUigiQmxpdEZyYW1lYnVmZmVyQU5HTEUgZmFpbGVkOiBTdHJldGNoUmVjdCBy
ZXR1cm5lZCAleC4iLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogfQogCiBleHRlcm4gIkMiCiB7Ci1nbDo6Q29u
dGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpCitnbDo6Q29u
dGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChj
b25maWcpOworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQp
OwogfQogCiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCkluZGV4
OiBBTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xF
U3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDggQEAKIC8vIENvbnRleHQu
aDogRGVmaW5lcyB0aGUgZ2w6OkNvbnRleHQgY2xhc3MsIG1hbmFnaW5nIGFsbCBHTCBzdGF0ZSBh
bmQgcGVyZm9ybWluZwogLy8gcmVuZGVyaW5nIG9wZXJhdGlvbnMuIEl0IGlzIHRoZSBHTEVTMiBz
cGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBFR0xDb250ZXh0LgogCi0jaWZuZGVmIElOQ0xVREVf
Q09OVEVYVF9IXwotI2RlZmluZSBJTkNMVURFX0NPTlRFWFRfSF8KKyNpZm5kZWYgTElCR0xFU1Yy
X0NPTlRFWFRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8KIAogI2RlZmluZSBHTF9B
UElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVk
ZSA8bWFwPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlZkNvdW50T2Jq
ZWN0LmgiCiAKIG5hbWVzcGFjZSBlZ2wKIHsKQEAgLTQwLDkgKzQyLDExIEBAIGNsYXNzIFRleHR1
cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOwogY2xhc3MgRnJhbWVidWZmZXI7CiBjbGFzcyBS
ZW5kZXJidWZmZXI7CitjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwogY2xhc3MgQ29sb3JidWZm
ZXI7CiBjbGFzcyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5jaWxidWZmZXI7CitjbGFzcyBEZXB0
aFN0ZW5jaWxidWZmZXI7CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4RGF0
YU1hbmFnZXI7CiBjbGFzcyBCdWZmZXJCYWNrRW5kOwpAQCAtNjcsMTUgKzcxLDggQEAgZW51bQog
Y29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7CiBjb25zdCBm
bG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKIGNvbnN0IGZsb2F0IEFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9Q
T0lOVF9TSVpFX1JBTkdFX01BWCA9IDEuMGY7Ci0KLWVudW0gU2FtcGxlclR5cGUKLXsKLSAgICBT
QU1QTEVSXzJELAotICAgIFNBTVBMRVJfQ1VCRSwKLQotICAgIFNBTVBMRVJfVFlQRV9DT1VOVAot
fTsKK2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00yID0gMS4wZjsK
K2NvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NQVhfU00zID0gNjQuMGY7CiAK
IHN0cnVjdCBDb2xvcgogewpAQCAtOTAsNyArODcsNyBAQCBjbGFzcyBBdHRyaWJ1dGVTdGF0ZQog
ewogICBwdWJsaWM6CiAgICAgQXR0cmlidXRlU3RhdGUoKQotICAgICAgICA6IG1UeXBlKEdMX0ZM
T0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIo
TlVMTCksIG1Cb3VuZEJ1ZmZlcigwKSwgbUVuYWJsZWQoZmFsc2UpCisgICAgICAgIDogbVR5cGUo
R0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9p
bnRlcihOVUxMKSwgbUVuYWJsZWQoZmFsc2UpCiAgICAgewogICAgICAgICBtQ3VycmVudFZhbHVl
WzBdID0gMDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7CkBAIC0xMDUsNyArMTAyLDcg
QEAgY2xhc3MgQXR0cmlidXRlU3RhdGUKICAgICBHTHNpemVpIG1TdHJpZGU7IC8vIDAgbWVhbnMg
bmF0dXJhbCBzdHJpZGUKICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKIAotICAgIEdMdWludCBt
Qm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQb2ludGVyIGlzIGNhbGxl
ZC4KKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgLy8gQ2FwdHVyZWQg
d2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIgaXMgY2FsbGVkLgogCiAgICAgYm9vbCBtRW5hYmxlZDsg
Ly8gRnJvbSBFbmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5CiAKQEAgLTE4MCwxNiArMTc3
LDE3IEBAIHN0cnVjdCBTdGF0ZQogICAgIGJvb2wgZGVwdGhNYXNrOwogCiAgICAgaW50IGFjdGl2
ZVNhbXBsZXI7ICAgLy8gQWN0aXZlIHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUw
Ci0gICAgR0x1aW50IGFycmF5QnVmZmVyOwotICAgIEdMdWludCBlbGVtZW50QXJyYXlCdWZmZXI7
Ci0gICAgR0x1aW50IHRleHR1cmUyRDsKLSAgICBHTHVpbnQgdGV4dHVyZUN1YmVNYXA7Ci0gICAg
R0x1aW50IGZyYW1lYnVmZmVyOwotICAgIEdMdWludCByZW5kZXJidWZmZXI7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBhcnJheUJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiB0ZXh0dXJl
MkQ7CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gdGV4dHVyZUN1YmVNYXA7CisgICAgR0x1
aW50IHJlYWRGcmFtZWJ1ZmZlcjsKKyAgICBHTHVpbnQgZHJhd0ZyYW1lYnVmZmVyOworICAgIEJp
bmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOwogICAgIEdMdWludCBjdXJy
ZW50UHJvZ3JhbTsKIAogICAgIEF0dHJpYnV0ZVN0YXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVS
VEVYX0FUVFJJQlNdOwotICAgIEdMdWludCBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09V
TlRdW01BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
PiBzYW1wbGVyVGV4dHVyZVtTQU1QTEVSX1RZUEVfQ09VTlRdW01BWF9URVhUVVJFX0lNQUdFX1VO
SVRTXTsKIAogICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKICAgICBHTGludCBwYWNrQWxpZ25t
ZW50OwpAQCAtMTk4LDcgKzE5Niw3IEBAIHN0cnVjdCBTdGF0ZQogY2xhc3MgQ29udGV4dAogewog
ICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKyAgICBD
b250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQpOwogCiAgICAgfkNvbnRleHQoKTsKIApAQCAtMjc2LDE0ICsyNzQsMTUgQEAgY2xh
c3MgQ29udGV4dAogCiAgICAgdm9pZCBzZXRBY3RpdmVTYW1wbGVyKGludCBhY3RpdmUpOwogCi0g
ICAgR0x1aW50IGdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFJl
YWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZm
ZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29u
c3Q7CiAKICAgICBHTHVpbnQgZ2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKIAogICAgIHZv
aWQgc2V0VmVydGV4QXR0cmliRW5hYmxlZCh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVu
YWJsZWQpOwogICAgIGNvbnN0IEF0dHJpYnV0ZVN0YXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIEdMdWludCBib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xl
bnVtIHR5cGUsCisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJp
ZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJp
YlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKQEAgLTI5NSwzMyArMjk0
LDM2IEBAIGNsYXNzIENvbnRleHQKICAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxp
Z25tZW50KTsKICAgICBHTGludCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CiAKKyAgICAvLyBU
aGVzZSBjcmVhdGUgIGFuZCBkZXN0cm95IG1ldGhvZHMgYXJlIG1lcmVseSBwYXNzLXRocm91Z2hz
IHRvIAorICAgIC8vIFJlc291cmNlTWFuYWdlciwgd2hpY2ggb3ducyB0aGVzZSBvYmplY3QgdHlw
ZXMKICAgICBHTHVpbnQgY3JlYXRlQnVmZmVyKCk7CiAgICAgR0x1aW50IGNyZWF0ZVNoYWRlcihH
TGVudW0gdHlwZSk7CiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKICAgICBHTHVpbnQgY3Jl
YXRlVGV4dHVyZSgpOwotICAgIEdMdWludCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgIEdMdWlu
dCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKIAogICAgIHZvaWQgZGVsZXRlQnVmZmVyKEdMdWludCBi
dWZmZXIpOwogICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpOwogICAgIHZvaWQg
ZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKEdM
dWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1
ZmZlcik7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CiAKKyAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVz
ZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKKyAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZm
ZXIoKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CisK
ICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRF
bGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJE
KEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4
dHVyZSk7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAg
ICB2b2lkIGJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKKyAgICB2b2lk
IGJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGJpbmRS
ZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdM
dWludCBwcm9ncmFtKTsKIAogICAgIHZvaWQgc2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRDb2xvcmJ1ZmZlclplcm8oQ29sb3JidWZmZXIg
KnJlbmRlcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1ZmZlclplcm8oRGVwdGhidWZmZXIg
KmRlcHRoQnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXJaZXJvKFN0ZW5jaWxidWZm
ZXIgKnN0ZW5jaWxCdWZmZXIpOwotICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKFJlbmRlcmJ1ZmZl
ciAqcmVuZGVyYnVmZmVyKTsKKworICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5k
ZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpOwogCiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpOwogCkBAIC0zMzEsOSArMzMz
LDYgQEAgY2xhc3MgQ29udGV4dAogICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRs
ZSk7CiAgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBoYW5kbGUpOwogICAg
IFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIENvbG9y
YnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBEZXB0aGJ1ZmZlciAq
Z2V0RGVwdGhidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgU3RlbmNpbGJ1ZmZlciAqZ2V0U3Rl
bmNpbGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKIAogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIo
KTsKICAgICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwpAQCAtMzQxLDcgKzM0MCw4
IEBAIGNsYXNzIENvbnRleHQKICAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwogICAgIFRl
eHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgIFRleHR1cmUgKmdldFNhbXBs
ZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBTYW1wbGVyVHlwZSB0eXBlKTsKLSAgICBG
cmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZy
YW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOwogCiAg
ICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0ICpwYXJhbXMpOwogICAgIGJv
b2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKQEAgLTM3MywxMCAr
MzczLDE1IEBAIGNsYXNzIENvbnRleHQKIAogICAgIEdMZW51bSBnZXRFcnJvcigpOwogCi0gICAg
Y29uc3QgY2hhciAqZ2V0UGl4ZWxTaGFkZXJQcm9maWxlKCk7Ci0gICAgY29uc3QgY2hhciAqZ2V0
VmVydGV4U2hhZGVyUHJvZmlsZSgpOwotCisgICAgYm9vbCBzdXBwb3J0c1NoYWRlck1vZGVsMygp
IGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAg
IGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVx
dWVzdGVkKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25z
dDsKKyAgICBib29sIHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkgY29uc3Q7CisKKyAgICB2
b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gx
LCBHTGludCBzcmNZMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdM
aW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKIAogICAgIEJsaXQgKmdldEJsaXR0ZXIoKSB7IHJldHVy
biBtQmxpdDsgfQogCkBAIC0zOTYsNyArNDAxLDYgQEAgY2xhc3MgQ29udGV4dAogCiAgICAgYm9v
bCBjdWxsU2tpcHNEcmF3KEdMZW51bSBkcmF3TW9kZSk7CiAgICAgYm9vbCBpc1RyaWFuZ2xlTW9k
ZShHTGVudW0gZHJhd01vZGUpOwotICAgIGJvb2wgaGFzU3RlbmNpbCgpOwogCiAgICAgY29uc3Qg
ZWdsOjpDb25maWcgKmNvbnN0IG1Db25maWc7CiAKQEAgLTQwNiwyNyArNDEwLDExIEBAIGNsYXNz
IENvbnRleHQKICAgICBUZXh0dXJlQ3ViZU1hcCAqbVRleHR1cmVDdWJlTWFwWmVybzsKIAogICAg
IENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJvOwotICAgIERlcHRoYnVmZmVyICptRGVwdGhi
dWZmZXJaZXJvOwotICAgIFN0ZW5jaWxidWZmZXIgKm1TdGVuY2lsYnVmZmVyWmVybzsKLQotICAg
IHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7Ci0gICAgQnVmZmVy
TWFwIG1CdWZmZXJNYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgU2hhZGVyKj4g
U2hhZGVyTWFwOwotICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwotCi0gICAgdHlwZWRlZiBzdGQ6
Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwotICAgIFByb2dyYW1NYXAgbVByb2dy
YW1NYXA7Ci0KLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVN
YXA7Ci0gICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIg
Km1EZXB0aFN0ZW5jaWxidWZmZXJaZXJvOwogCiAgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQs
IEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVidWZmZXJNYXAgbUZyYW1l
YnVmZmVyTWFwOwogCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+
IFJlbmRlcmJ1ZmZlck1hcDsKLSAgICBSZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsK
LQogICAgIHZvaWQgaW5pdEV4dGVuc2lvblN0cmluZygpOwogICAgIHN0ZDo6c3RyaW5nIG1FeHRl
bnNpb25TdHJpbmc7CiAKQEAgLTQzNSw3ICs0MjMsNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgSW5k
ZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1hbmFnZXI7CiAKICAgICBCbGl0ICptQmxpdDsKLQor
ICAgIAogICAgIFRleHR1cmUgKm1JbmNvbXBsZXRlVGV4dHVyZXNbU0FNUExFUl9UWVBFX0NPVU5U
XTsKIAogICAgIC8vIFJlY29yZGVkIGVycm9ycwpAQCAtNDUwLDkgKzQzOCwxMiBAQCBjbGFzcyBD
b250ZXh0CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbTsKICAgICB1bnNpZ25lZCBp
bnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
RGVwdGhidWZmZXJTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RlbmNpbGJ1ZmZl
clNlcmlhbDsKIAotICAgIGNvbnN0IGNoYXIgKm1Qc1Byb2ZpbGU7Ci0gICAgY29uc3QgY2hhciAq
bVZzUHJvZmlsZTsKKyAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKKyAgICBzdGQ6Om1h
cDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKKyAgICBHTHNpemVpIG1N
YXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIGJvb2wgbVN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVz
OwogCiAgICAgLy8gc3RhdGUgY2FjaGluZyBmbGFncwogICAgIGJvb2wgbUNsZWFyU3RhdGVEaXJ0
eTsKQEAgLTQ3MSwxMyArNDYyLDE1IEBAIGNsYXNzIENvbnRleHQKICAgICBJRGlyZWN0M0RTdGF0
ZUJsb2NrOSAqbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZTsKIAogICAgIEQzRENBUFM5IG1EZXZpY2VD
YXBzOworCisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogfTsKIH0KIAog
ZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCi1nbDo6
Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcpOworZ2w6
OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBjb25z
dCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0KTsKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6
Q29udGV4dCAqY29udGV4dCk7CiB2b2lkIGdsTWFrZUN1cnJlbnQoZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKIGdsOjpD
b250ZXh0ICpnbEdldEN1cnJlbnRDb250ZXh0KCk7CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsODUgKzE2LDEwOSBAQAogCiBuYW1lc3Bh
Y2UgZ2wKIHsKKwogRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKCkKIHsKICAgICBtQ29sb3JidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOwotCiAgICAgbURl
cHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKLQog
ICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJIYW5k
bGUgPSAwOwogfQogCiBGcmFtZWJ1ZmZlcjo6fkZyYW1lYnVmZmVyKCkKIHsKKyAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworfQorCitSZW5kZXJidWZm
ZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBo
YW5kbGUpIGNvbnN0Cit7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKworICAgIGlmICh0eXBlID09
IEdMX05PTkUpCisgICAgeworICAgICAgICBidWZmZXIgPSBOVUxMOworICAgIH0KKyAgICBlbHNl
IGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICB7CisgICAgICAgIGJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworICAgIH0KKyAgICBlbHNlIGlmIChJc1Rl
eHR1cmVUYXJnZXQodHlwZSkpCisgICAgeworICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlKGhhbmRsZSktPmdldENvbG9yYnVmZmVyKHR5cGUpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBidWZmZXI7
CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgY29sb3JidWZmZXIpCiB7CiAgICAgbUNvbG9yYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbUNv
bG9yYnVmZmVySGFuZGxlID0gY29sb3JidWZmZXI7CisgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5z
ZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CiB9CiAKIHZvaWQgRnJh
bWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIp
CiB7CiAgICAgbURlcHRoYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbURlcHRoYnVmZmVySGFuZGxl
ID0gZGVwdGhidWZmZXI7CisgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVy
YnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OnNldFN0
ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQogewogICAgIG1T
dGVuY2lsYnVmZmVyVHlwZSA9IHR5cGU7Ci0gICAgbVN0ZW5jaWxidWZmZXJIYW5kbGUgPSBzdGVu
Y2lsYnVmZmVyOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVm
ZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIpKTsKIH0KIAogdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNo
VGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKIHsKLSAgICBpZiAobUNvbG9yYnVmZmVySGFuZGxlID09
IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQorICAgIGlmICht
Q29sb3JidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobUNv
bG9yYnVmZmVyVHlwZSkpCiAgICAgewogICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9O
RTsKLSAgICAgICAgbUNvbG9yYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbUNvbG9yYnVmZmVy
UG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRsZSA9
PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKKyAgICBpZiAo
bURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1E
ZXB0aGJ1ZmZlclR5cGUpKQogICAgIHsKICAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05P
TkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlckhhbmRsZSA9IDA7CisgICAgICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1ZmZlckhhbmRs
ZSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAg
IGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRh
cmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQogICAgIHsKICAgICAgICAgbVN0ZW5jaWxidWZmZXJU
eXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJIYW5kbGUgPSAwOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAgIH0KIH0KIAogdm9pZCBGcmFt
ZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpCiB7Ci0gICAg
aWYgKG1Db2xvcmJ1ZmZlckhhbmRsZSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlw
ZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9
PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAg
ICAgewogICAgICAgICBtQ29sb3JidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbUNvbG9y
YnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7
CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlckhhbmRsZSA9PSByZW5kZXJidWZmZXIgJiYg
bURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1EZXB0aGJ1ZmZl
clBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCiAgICAgewogICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsK
LSAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbURlcHRoYnVmZmVyUG9p
bnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVySGFuZGxlID09
IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0
ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7CiAgICAgICAgIG1TdGVu
Y2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVySGFuZGxlID0g
MDsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKICAgICB9CiB9CiAK
IHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKCkKIHsKLSAg
ICBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsKKyAgICBSZW5k
ZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKIAogICAg
IGlmIChjb2xvcmJ1ZmZlcikKICAgICB7CkBAIC0xMDYsNyArMTMwLDcgQEAgdW5zaWduZWQgaW50
IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogCiBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVi
dWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZl
ciA9IGdldENvbG9yYnVmZmVyKCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1D
b2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKICAgICBpZiAoY29sb3JidWZmZXIpCiAgICAgewpA
QCAtMTE2LDEwICsxNDAsMjYgQEAgSURpcmVjdDNEU3VyZmFjZTkgKkZyYW1lYnVmZmVyOjpnZXRS
ZW5kZQogICAgIHJldHVybiBOVUxMOwogfQogCitJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZm
ZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxi
dWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIAorICAgIGlmICghZGVwdGhz
dGVuY2lsYnVmZmVyKQorICAgIHsKKyAgICAgICAgZGVwdGhzdGVuY2lsYnVmZmVyID0gbVN0ZW5j
aWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIH0KKworICAgIGlmIChkZXB0aHN0ZW5jaWxidWZm
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGhzdGVuY2lsYnVmZmVyLT5nZXREZXB0aFN0
ZW5jaWwoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwogdW5zaWduZWQgaW50IEZy
YW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIERlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9
IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7CisgICAgUmVuZGVy
YnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKICAgICBp
ZiAoZGVwdGhidWZmZXIpCiAgICAgewpAQCAtMTI5LDcwICsxNjksNTggQEAgdW5zaWduZWQgaW50
IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcgogICAgIHJldHVybiAwOwogfQogCi1JRGlyZWN0
M0RTdXJmYWNlOSAqRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCit1bnNpZ25lZCBpbnQg
RnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKQogewotICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZm
ZXIgPSBjb250ZXh0LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOworICAgIFJl
bmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsK
IAotICAgIGlmIChkZXB0aGJ1ZmZlcikKKyAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBkZXB0aGJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgIHJl
dHVybiBzdGVuY2lsYnVmZmVyLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKLSAgICByZXR1cm4gTlVM
TDsKKyAgICByZXR1cm4gMDsKIH0KIAogQ29sb3JidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRDb2xv
cmJ1ZmZlcigpCiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgp
OwotICAgIENvbG9yYnVmZmVyICpjb2xvcmJ1ZmZlciA9IE5VTEw7CisgICAgUmVuZGVyYnVmZmVy
ICpyYiA9IG1Db2xvcmJ1ZmZlclBvaW50ZXIuZ2V0KCk7CiAKLSAgICBpZiAobUNvbG9yYnVmZmVy
VHlwZSA9PSBHTF9OT05FKQorICAgIGlmIChyYiAhPSBOVUxMICYmIHJiLT5pc0NvbG9yYnVmZmVy
KCkpCiAgICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBjb2xvcmJ1ZmZlciA9
IE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1Db2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVS
QlVGRkVSKQotICAgIHsKLSAgICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRDb2xvcmJ1
ZmZlcihtQ29sb3JidWZmZXJIYW5kbGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29s
b3JidWZmZXIqPihyYi0+Z2V0U3RvcmFnZSgpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgY29sb3JidWZmZXIgPSBjb250ZXh0LT5nZXRUZXh0dXJlKG1Db2xvcmJ1ZmZlckhhbmRs
ZSktPmdldENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlclR5cGUpOwotICAgIH0KLQotICAgIGlmIChj
b2xvcmJ1ZmZlciAmJiBjb2xvcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNvbG9yYnVmZmVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSAg
ICByZXR1cm4gTlVMTDsKIH0KIAotRGVwdGhidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1
ZmZlcigpCitEZXB0aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcigp
CiB7Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIERl
cHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1
ZmZlckhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpyYiA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIu
Z2V0KCk7CiAKLSAgICBpZiAoZGVwdGhidWZmZXIgJiYgZGVwdGhidWZmZXItPmlzRGVwdGhidWZm
ZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNEZXB0aGJ1ZmZlcigpKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RGVwdGhTdGVuY2lsYnVmZmVyKj4ocmItPmdldFN0b3JhZ2UoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAgIHJldHVybiBOVUxMOwog
fQogCi1TdGVuY2lsYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcigpCitEZXB0
aFN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkKIHsKLSAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0gICAgU3RlbmNpbGJ1ZmZl
ciAqc3RlbmNpbGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0ZW5jaWxidWZm
ZXJIYW5kbGUpOworICAgIFJlbmRlcmJ1ZmZlciAqcmIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIu
Z2V0KCk7CiAKLSAgICBpZiAoc3RlbmNpbGJ1ZmZlciAmJiBzdGVuY2lsYnVmZmVyLT5pc1N0ZW5j
aWxidWZmZXIoKSkKKyAgICBpZiAocmIgIT0gTlVMTCAmJiByYi0+aXNTdGVuY2lsYnVmZmVyKCkp
CiAgICAgewotICAgICAgICByZXR1cm4gc3RlbmNpbGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERlcHRoU3RlbmNpbGJ1ZmZlcio+KHJiLT5nZXRTdG9yYWdlKCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSAgICByZXR1
cm4gTlVMTDsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUoKQpA
QCAtMjEyLDI1ICsyNDAsNTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVy
VHlwZQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKCkKIHsKLSAg
ICByZXR1cm4gbUNvbG9yYnVmZmVySGFuZGxlOworICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2lu
dGVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUo
KQogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJIYW5kbGU7CisgICAgcmV0dXJuIG1EZXB0aGJ1
ZmZlclBvaW50ZXIuaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVm
ZmVySGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJIYW5kbGU7CisgICAgcmV0
dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpOwogfQogCi1HTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpCitib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkKIHsKLSAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisgICAgaWYgKG1TdGVuY2ls
YnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIHsKKyAgICAgICAgRGVwdGhTdGVuY2lsYnVmZmVy
ICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCisgICAgICAgIGlm
IChzdGVuY2lsYnVmZmVyT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3Rl
bmNpbGJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbFNpemUoKSA+IDA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVidWZmZXI6OmlzTXVsdGlzYW1w
bGUoKQoreworICAgIC8vIElmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIGF0dGFj
aG1lbnQgc2FtcGxlcyBtYXkgYmUgbWlzbWF0Y2hlZCwgYW5kIGl0CisgICAgLy8gY2Fubm90IGJl
IHVzZWQgYXMgYSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlci4gSWYgaXQgaXMgY29tcGxldGUsIGl0
IGlzIHJlcXVpcmVkIHRvCisgICAgLy8gaGF2ZSBhIGNvbG9yIGF0dGFjaG1lbnQsIGFuZCBhbGwg
aXRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygc2FtcGxlcywKKyAg
ICAvLyBzbyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSBjb2xvcmJ1ZmZlciB3aWxsIGlu
ZGljYXRlIHdoZXRoZXIgdGhlIGZyYW1lYnVmZmVyIGlzCisgICAgLy8gbXVsdGlzYW1wbGVkLgor
ICAgIGlmIChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAmJiBnZXRD
b2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgPiAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK3sKICAgICBpbnQgd2lk
dGggPSAwOwogICAgIGludCBoZWlnaHQgPSAwOworICAgIGludCBzYW1wbGVzID0gLTE7CiAKICAg
ICBpZiAobUNvbG9yYnVmZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKQEAgLTI0NiwxMyArMzA1
LDI5IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRGb3JtYXQoKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgd2lkdGggPSBj
b2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdl
dEhlaWdodCgpOworICAgICAgICBzYW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsK
ICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOworICAgIH0KKworICAgIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZGVwdGhidWZmZXIgPSBOVUxMOworICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqc3RlbmNp
bGJ1ZmZlciA9IE5VTEw7CiAKICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAhPSBHTF9OT05FKQog
ICAgIHsKLSAgICAgICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVw
dGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKyAgICAgICAgZGVwdGhidWZmZXIgPSBnZXRE
ZXB0aGJ1ZmZlcigpOwogCiAgICAgICAgIGlmICghZGVwdGhidWZmZXIpCiAgICAgICAgIHsKQEAg
LTI3MywxMSArMzQ4LDI4IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUzsKICAgICAgICAgfQorCisgICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAg
ICB7CisgICAgICAgICAgICBzYW1wbGVzID0gZGVwdGhidWZmZXItPmdldFNhbXBsZXMoKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChzYW1wbGVzICE9IGRlcHRoYnVmZmVyLT5nZXRTYW1w
bGVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX01VTFRJU0FNUExFX0FOR0xFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGRlcHRoYnVmZmVyLT5nZXRGb3JtYXQoKSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1TdGVuY2lsYnVm
ZmVyVHlwZSAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNp
bGJ1ZmZlciA9IGNvbnRleHQtPmdldFN0ZW5jaWxidWZmZXIobVN0ZW5jaWxidWZmZXJIYW5kbGUp
OworICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAgICAgICAg
IGlmICghc3RlbmNpbGJ1ZmZlcikKICAgICAgICAgewpAQCAtMjk4LDggKzM5MCw2NiBAQCBHTGVu
dW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc2FtcGxlcyA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgc2FtcGxl
cyA9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChzYW1wbGVzICE9IHN0ZW5jaWxidWZmZXItPmdldFNhbXBsZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVf
QU5HTEU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChJc1RleHR1cmVUYXJnZXQo
bVN0ZW5jaWxidWZmZXJUeXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKElzQ29tcHJl
c3NlZChzdGVuY2lsYnVmZmVyLT5nZXRGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVO
REVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAg
eworICAgICAgICBpZiAoZGVwdGhidWZmZXItPmdldEZvcm1hdCgpICE9IEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTIHx8CisgICAgICAgICAgICBzdGVuY2lsYnVmZmVyLT5nZXRGb3JtYXQoKSAhPSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUyB8fAorICAgICAgICAgICAgZGVwdGhidWZmZXItPmdldFNl
cmlhbCgpICE9IHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEU7Cit9CisKK0RlZmF1bHRGcmFt
ZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKENvbG9yYnVmZmVyICpjb2xvciwgRGVwdGhTdGVu
Y2lsYnVmZmVyICpkZXB0aFN0ZW5jaWwpCit7CisgICAgbUNvbG9yYnVmZmVyVHlwZSA9IEdMX1JF
TkRFUkJVRkZFUjsKKyAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfUkVOREVSQlVGRkVSOworICAg
IG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKKworICAgIG1Db2xvcmJ1ZmZl
clBvaW50ZXIuc2V0KG5ldyBSZW5kZXJidWZmZXIoMCwgY29sb3IpKTsKKworICAgIFJlbmRlcmJ1
ZmZlciAqZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcigwLCBkZXB0
aFN0ZW5jaWwpOworICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRl
cmJ1ZmZlcik7CisgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5k
ZXJidWZmZXIpOworfQorCitpbnQgRnJhbWVidWZmZXI6OmdldFNhbXBsZXMoKQoreworICAgIGlm
IChjb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KK30KIAorR0xlbnVtIERlZmF1bHRG
cmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK3sKICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEU7CiB9CisKIH0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNSwxOSArMTUsMjIgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAKICNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZWZDb3VudE9iamVj
dC5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9y
YnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOworY2xhc3Mg
RGVwdGhTdGVuY2lsYnVmZmVyOwogCiBjbGFzcyBGcmFtZWJ1ZmZlcgogewogICBwdWJsaWM6CiAg
ICAgRnJhbWVidWZmZXIoKTsKIAotICAgIH5GcmFtZWJ1ZmZlcigpOworICAgIHZpcnR1YWwgfkZy
YW1lYnVmZmVyKCk7CiAKICAgICB2b2lkIHNldENvbG9yYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVp
bnQgY29sb3JidWZmZXIpOwogICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlcik7CkBAIC00MSwxMCArNDQsMTEgQEAgY2xhc3MgRnJhbWVidWZmZXIK
IAogICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoKTsKICAgICB1bnNpZ25l
ZCBpbnQgZ2V0RGVwdGhidWZmZXJTZXJpYWwoKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U3RlbmNp
bGJ1ZmZlclNlcmlhbCgpOwogCiAgICAgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKCk7Ci0g
ICAgRGVwdGhidWZmZXIgKmdldERlcHRoYnVmZmVyKCk7Ci0gICAgU3RlbmNpbGJ1ZmZlciAqZ2V0
U3RlbmNpbGJ1ZmZlcigpOworICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIo
KTsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKTsKIAogICAgIEdM
ZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUoKTsKICAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJUeXBl
KCk7CkBAIC01NCwyMCArNTgsMzkgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTHVpbnQgZ2V0
RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICBHTHVpbnQgZ2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgp
OwogCi0gICAgR0xlbnVtIGNvbXBsZXRlbmVzcygpOworICAgIGJvb2wgaGFzU3RlbmNpbCgpOwor
ICAgIGJvb2wgaXNNdWx0aXNhbXBsZSgpOworICAgIGludCBnZXRTYW1wbGVzKCk7CiAKLSAgcHJp
dmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOworICAgIHZp
cnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOwogCi0gICAgR0x1aW50IG1Db2xvcmJ1ZmZlckhh
bmRsZTsKKyAgcHJvdGVjdGVkOgogICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlOworICAgIEJp
bmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9pbnRlcjsKIAotICAgIEdM
dWludCBtRGVwdGhidWZmZXJIYW5kbGU7CiAgICAgR0xlbnVtIG1EZXB0aGJ1ZmZlclR5cGU7Cisg
ICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXJQb2ludGVyOwogCi0g
ICAgR0x1aW50IG1TdGVuY2lsYnVmZmVySGFuZGxlOwogICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZl
clR5cGU7CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVi
dWZmZXIpOworCisgICAgUmVuZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0OworfTsKKworY2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVy
IDogcHVibGljIEZyYW1lYnVmZmVyCit7CisgIHB1YmxpYzoKKyAgICBEZWZhdWx0RnJhbWVidWZm
ZXIoQ29sb3JidWZmZXIgKmNvbG9yLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCk7
CisKKyAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKTsKKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZWZhdWx0RnJhbWVidWZmZXIpOwogfTsKKwogfQog
CiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRlJBTUVCVUZGRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFVuaWZvcm1Mb2NhdGlvbjo6
VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHMKIHsKIH0KIAotUHJvZ3JhbTo6UHJvZ3JhbSgpCitQcm9n
cmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBt
UmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSkKIHsKICAgICBtRnJhZ21l
bnRTaGFkZXIgPSBOVUxMOwogICAgIG1WZXJ0ZXhTaGFkZXIgPSBOVUxMOwpAQCAtNjIsNiArNjIs
OCBAQCBQcm9ncmFtOjpQcm9ncmFtKCkKIAogICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKIAor
ICAgIG1SZWZDb3VudCA9IDA7CisKICAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwoKTsKIH0KIApA
QCAtNzEsMTIgKzczLDEyIEBAIFByb2dyYW06On5Qcm9ncmFtKCkKIAogICAgIGlmIChtVmVydGV4
U2hhZGVyICE9IE5VTEwpCiAgICAgewotICAgICAgICBtVmVydGV4U2hhZGVyLT5kZXRhY2goKTsK
KyAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlmIChtRnJh
Z21lbnRTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GcmFnbWVudFNoYWRlci0+ZGV0
YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+cmVsZWFzZSgpOwogICAgIH0KIH0KIApA
QCAtOTAsNyArOTIsNyBAQCBib29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRl
CiAgICAgICAgIH0KIAogICAgICAgICBtVmVydGV4U2hhZGVyID0gKFZlcnRleFNoYWRlciopc2hh
ZGVyOwotICAgICAgICBtVmVydGV4U2hhZGVyLT5hdHRhY2goKTsKKyAgICAgICAgbVZlcnRleFNo
YWRlci0+YWRkUmVmKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09
IEdMX0ZSQUdNRU5UX1NIQURFUikKICAgICB7CkBAIC0xMDAsNyArMTAyLDcgQEAgYm9vbCBQcm9n
cmFtOjphdHRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAgICAgICB9CiAKICAgICAgICAgbUZy
YWdtZW50U2hhZGVyID0gKEZyYWdtZW50U2hhZGVyKilzaGFkZXI7Ci0gICAgICAgIG1GcmFnbWVu
dFNoYWRlci0+YXR0YWNoKCk7CisgICAgICAgIG1GcmFnbWVudFNoYWRlci0+YWRkUmVmKCk7CiAg
ICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIApAQCAtMTE2LDcgKzExOCw3IEBAIGJvb2wg
UHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFNoYWRlciAqc2hhZGUKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRldGFjaCgpOworICAg
ICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSBO
VUxMOwogICAgIH0KICAgICBlbHNlIGlmIChzaGFkZXItPmdldFR5cGUoKSA9PSBHTF9GUkFHTUVO
VF9TSEFERVIpCkBAIC0xMjYsNyArMTI4LDcgQEAgYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
U2hhZGVyICpzaGFkZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgbUZyYWdtZW50U2hhZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVy
LT5yZWxlYXNlKCk7CiAgICAgICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgfQogICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKQEAgLTExOTUsNiArMTE5NywxMCBAQCBib29sIFByb2dyYW06
OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBDb250ZXh0ICpjb250ZXh0
ID0gZ2V0Q29udGV4dCgpOworICAgIGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9S
IiA6ICJURVhDT09SRCIpOworCiAgICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxu
IgogICAgICAgICAgICAgICAgICAgICJ7XG4iOwogCkBAIC0xMjI4LDEyICsxMjM0LDE3IEBAIGJv
b2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICB7CiAgICAgICAgIGludCByZWdpc3RlclNp
emUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3Jd
WzFdID8gMiA6IDEpKTsKIAotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0
cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiBURVhDT09SRCIgKyBzdHIocikg
KyAiO1xuIjsKKyAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0
ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
KSArICI7XG4iOwogICAgIH0KIAogICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQogICAgIHsKLSAgICAgICAgbVZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICAgICAgbVZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyAr
IHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKG1WZXJ0ZXhTaGFkZXIt
Pm1Vc2VzUG9pbnRTaXplICYmIHNtMykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOwogICAgIH0KIAogICAgIG1WZXJ0ZXhI
TFNMICs9ICJ9O1xuIgpAQCAtMTI2Miw2ICsxMjczLDExIEBAIGJvb2wgUHJvZ3JhbTo6bGlua1Zh
cnlpbmdzKCkKICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0g
KGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7CiAKKyAg
ICBpZiAobVZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gY2xhbXAoZ2xfUG9p
bnRTaXplLCAxLjAsICIgKyBzdHIoKGludClBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYX1NN
MykgKyAiKTtcbiI7CisgICAgfQorCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCiAgICAgewogICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFn
Q29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CkBAIC0xMzQ1LDcgKzEzNjEsNyBAQCBib29sIFByb2dy
YW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBy
b3dzOyBqKyspCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZyBuID0gc3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAg
ICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgdiIgKyBuICsgIiA6IFRFWENPT1JEIiAr
IG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0
NCB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEzNTQsOSArMTM3MCwxNCBA
QCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAKICAgICBpZiAobUZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKICAgICB7Ci0gICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogVEVYQ09PUkQiICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAg
ICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWlu
Z1NlbWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogVEVYQ09PUkQwO1xuIjsKICAg
ICB9Ci0gICAgICAgIAorCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKICAgICB7CiAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCB2RmFjZSA6IFZGQUNF
O1xuIjsKQEAgLTEzNzUsMTIgKzEzOTYsMTcgQEAgYm9vbCBQcm9ncmFtOjpsaW5rVmFyeWluZ3Mo
KQogICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKICAgICAg
ICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29y
ZC53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfV2luZG93LnggKyBkeF9XaW5kb3cuejtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0Zy
YWdDb29yZC55ICogcmh3KSAqIGR4X1dpbmRvdy55ICsgZHhfV2luZG93Lnc7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eCAqIHJodykgKiBkeF9WaWV3cG9ydC54ICsgZHhfVmlld3BvcnQuejtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29yZC55ICog
cmh3KSAqIGR4X1ZpZXdwb3J0LnkgKyBkeF9WaWV3cG9ydC53O1xuIgogICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcp
ICogZHhfRGVwdGgueCArIGR4X0RlcHRoLnk7XG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7CiAgICAgfQogCisgICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKKyAgICB7CisgICAgICAgIG1QaXhlbEhMU0wg
Kz0gIiAgICBnbF9Qb2ludENvb3JkID0gZmxvYXQyKGlucHV0LmdsX1BvaW50Q29vcmQueCwgMS4w
IC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55KTtcbiI7CisgICAgfQorCiAgICAgaWYgKG1GcmFnbWVu
dFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKICAgICB7CiAgICAgICAgIG1QaXhlbEhMU0wgKz0g
IiAgICBnbF9Gcm9udEZhY2luZyA9IGR4X1BvaW50c09yTGluZXMgfHwgKGR4X0Zyb250Q0NXID8g
KGlucHV0LnZGYWNlID49IDAuMCkgOiAoaW5wdXQudkZhY2UgPD0gMC4wKSk7XG4iOwpAQCAtMTQ0
NywxMCArMTQ3Myw2IEBAIHZvaWQgUHJvZ3JhbTo6bGluaygpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOwotICAgIGNvbnN0IGNo
YXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7Ci0g
ICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9m
aWxlKCk7Ci0KICAgICBtUGl4ZWxITFNMID0gbUZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7CiAg
ICAgbVZlcnRleEhMU0wgPSBtVmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CiAKQEAgLTE0NTksNiAr
MTQ4MSwxMCBAQCB2b2lkIFByb2dyYW06OmxpbmsoKQogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgQ29udGV4dCAqY29udGV4dCA9IGdldENvbnRleHQoKTsKKyAgICBjb25zdCBjaGFyICp2
ZXJ0ZXhQcm9maWxlID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2c18zXzAi
IDogInZzXzJfMCI7CisgICAgY29uc3QgY2hhciAqcGl4ZWxQcm9maWxlID0gY29udGV4dC0+c3Vw
cG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJwc18zXzAiIDogInBzXzJfMCI7CisKICAgICBJRDNEWEJ1
ZmZlciAqdmVydGV4QmluYXJ5ID0gY29tcGlsZVRvQmluYXJ5KG1WZXJ0ZXhITFNMLmNfc3RyKCks
IHZlcnRleFByb2ZpbGUsICZtQ29uc3RhbnRUYWJsZVZTKTsKICAgICBJRDNEWEJ1ZmZlciAqcGl4
ZWxCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVBpeGVsSExTTC5jX3N0cigpLCBwaXhlbFByb2Zp
bGUsICZtQ29uc3RhbnRUYWJsZVBTKTsKIApAQCAtMTUwMyw3ICsxNTI5LDcgQEAgdm9pZCBQcm9n
cmFtOjpsaW5rKCkKICAgICAgICAgICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSBnZXRVbmlm
b3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZmFyIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRGVw
dGhSYW5nZURpZmZMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5k
aWZmIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhEZXB0aExvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9EZXB0aCIsIHRydWUpOwotICAgICAgICAgICAgbUR4V2luZG93TG9jYXRpb24g
PSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X1dpbmRvdyIsIHRydWUpOworICAgICAgICAgICAgbUR4
Vmlld3BvcnRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfVmlld3BvcnQiLCB0cnVl
KTsKICAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2Nh
dGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOwogICAgICAgICAgICAgbUR4RnJvbnRDQ1dM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRnJvbnRDQ1ciLCB0cnVlKTsKICAgICAg
ICAgICAgIG1EeFBvaW50c09yTGluZXNMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhf
UG9pbnRzT3JMaW5lcyIsIHRydWUpOwpAQCAtMjM1NSwxMyArMjM4MSwxMyBAQCB2b2lkIFByb2dy
YW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgewogICAgICAgICBpZiAobUZyYWdtZW50U2hh
ZGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOwor
ICAgICAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICBtRnJh
Z21lbnRTaGFkZXIgPSBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1WZXJ0ZXhTaGFk
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRldGFjaCgpOworICAg
ICAgICAgICAgbVZlcnRleFNoYWRlci0+cmVsZWFzZSgpOwogICAgICAgICAgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDEyLDcgKzI0MzgsNyBAQCB2b2lk
IFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRp
b24gPSAtMTsKICAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gLTE7CiAgICAgbUR4RGVwdGhM
b2NhdGlvbiA9IC0xOwotICAgIG1EeFdpbmRvd0xvY2F0aW9uID0gLTE7CisgICAgbUR4Vmlld3Bv
cnRMb2NhdGlvbiA9IC0xOwogICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IC0xOwogICAg
IG1EeEZyb250Q0NXTG9jYXRpb24gPSAtMTsKICAgICBtRHhQb2ludHNPckxpbmVzTG9jYXRpb24g
PSAtMTsKQEAgLTI0MzgsNiArMjQ2NCwyNiBAQCBib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkg
Y29uc3QgCiAgICAgcmV0dXJuIG1WYWxpZGF0ZWQ7CiB9CiAKK3ZvaWQgUHJvZ3JhbTo6cmVsZWFz
ZSgpCit7CisgICAgbVJlZkNvdW50LS07CisKKyAgICBpZiAobVJlZkNvdW50ID09IDAgJiYgbURl
bGV0ZVN0YXR1cykKKyAgICB7CisgICAgICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dy
YW0obUhhbmRsZSk7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmFkZFJlZigpCit7CisgICAg
bVJlZkNvdW50Kys7Cit9CisKK3Vuc2lnbmVkIGludCBQcm9ncmFtOjpnZXRSZWZDb3VudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1SZWZDb3VudDsKK30KKwogdW5zaWduZWQgaW50IFByb2dyYW06
OmdldFNlcmlhbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TZXJpYWw7CkBAIC0yNzM3LDkgKzI3
ODMsOSBAQCBHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBjb25zCiAgICAgcmV0
dXJuIG1EeERlcHRoTG9jYXRpb247CiB9CiAKLUdMaW50IFByb2dyYW06OmdldER4V2luZG93TG9j
YXRpb24oKSBjb25zdAorR0xpbnQgUHJvZ3JhbTo6Z2V0RHhWaWV3cG9ydExvY2F0aW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbUR4V2luZG93TG9jYXRpb247CisgICAgcmV0dXJuIG1EeFZpZXdw
b3J0TG9jYXRpb247CiB9CiAKIEdMaW50IFByb2dyYW06OmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0
aW9uKCkgY29uc3QKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiA2NjYxMSkKKysr
IEFOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2ICsy
MCw3IEBACiAKIG5hbWVzcGFjZSBnbAogeworY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogY2xhc3Mg
RnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiAKQEAgLTU1LDcgKzU2LDcgQEAg
c3RydWN0IFVuaWZvcm1Mb2NhdGlvbgogY2xhc3MgUHJvZ3JhbQogewogICBwdWJsaWM6Ci0gICAg
UHJvZ3JhbSgpOworICAgIFByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQg
aGFuZGxlKTsKIAogICAgIH5Qcm9ncmFtKCk7CiAKQEAgLTk3LDcgKzk4LDcgQEAgY2xhc3MgUHJv
Z3JhbQogICAgIEdMaW50IGdldERlcHRoUmFuZ2VOZWFyTG9jYXRpb24oKSBjb25zdDsKICAgICBH
TGludCBnZXREZXB0aFJhbmdlRmFyTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeERl
cHRoTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREeFdpbmRvd0xvY2F0aW9uKCkgY29u
c3Q7CisgICAgR0xpbnQgZ2V0RHhWaWV3cG9ydExvY2F0aW9uKCkgY29uc3Q7CiAgICAgR0xpbnQg
Z2V0RHhIYWxmUGl4ZWxTaXplTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeEZyb250
Q0NXTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeFBvaW50c09yTGluZXNMb2NhdGlv
bigpIGNvbnN0OwpAQCAtMTE5LDYgKzEyMCw5IEBAIGNsYXNzIFByb2dyYW0KICAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVu
Z3RoKCk7CiAKKyAgICB2b2lkIGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworICAgIHVu
c2lnbmVkIGludCBnZXRSZWZDb3VudCgpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9u
KCk7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogCkBAIC0yMDQsNyAr
MjA4LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIEdMaW50IG1EZXB0aFJhbmdlTmVhckxvY2F0aW9u
OwogICAgIEdMaW50IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247CiAgICAgR0xpbnQgbUR4RGVwdGhM
b2NhdGlvbjsKLSAgICBHTGludCBtRHhXaW5kb3dMb2NhdGlvbjsKKyAgICBHTGludCBtRHhWaWV3
cG9ydExvY2F0aW9uOwogICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsKICAgICBH
TGludCBtRHhGcm9udENDV0xvY2F0aW9uOwogICAgIEdMaW50IG1EeFBvaW50c09yTGluZXNMb2Nh
dGlvbjsKQEAgLTIxNCw5ICsyMTgsMTQgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGNoYXIgKm1JbmZv
TG9nOwogICAgIGJvb2wgbVZhbGlkYXRlZDsKIAorICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7
CisKICAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRTZXJpYWw7CisKKyAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7
CisgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7CiB9OwogfQogCkluZGV4OiBBTkdMRS9zcmMvbGli
R0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xF
U3YyL1JlZkNvdW50T2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvUmVmQ291bnRPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBSZWZDb3VudE9iamVjdC5jcHA6IERlZmluZXMgdGhlIGdsOjpS
ZWZDb3VudE9iamVjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMKKy8vIGxpZmVjeWNsZSBzdXBw
b3J0IGZvciBHTCBvYmplY3RzIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBCaW5kT2JqZWN0IHNjaGVt
ZSwgYnV0CisvLyB0aGF0IG5lZWQgdG8gYmUgcmVmZXJlbmNlIGNvdW50ZWQgZm9yIGNvcnJlY3Qg
Y3Jvc3MtY29udGV4dCBkZWxldGlvbi4KKy8vIChDb25jcmV0ZWx5LCB0ZXh0dXJlcywgYnVmZmVy
cyBhbmQgcmVuZGVyYnVmZmVycy4pCisKKyNpbmNsdWRlICJSZWZDb3VudE9iamVjdC5oIgorCitu
YW1lc3BhY2UgZ2wKK3sKKworUmVmQ291bnRPYmplY3Q6OlJlZkNvdW50T2JqZWN0KEdMdWludCBp
ZCkKK3sKKyAgICBtSWQgPSBpZDsKKyAgICBtUmVmQ291bnQgPSAwOworfQorCitSZWZDb3VudE9i
amVjdDo6flJlZkNvdW50T2JqZWN0KCkKK3sKK30KKwordm9pZCBSZWZDb3VudE9iamVjdDo6YWRk
UmVmKCkgY29uc3QKK3sKKyAgICBtUmVmQ291bnQrKzsKK30KKwordm9pZCBSZWZDb3VudE9iamVj
dDo6cmVsZWFzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1SZWZDb3VudCA+IDApOworCisgICAg
aWYgKC0tbVJlZkNvdW50ID09IDApCisgICAgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9
Cit9CisKK3ZvaWQgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KFJlZkNvdW50T2Jq
ZWN0ICpuZXdPYmplY3QpCit7CisgICAgLy8gYWRkUmVmIGZpcnN0IGluIGNhc2UgbmV3T2JqZWN0
ID09IG1PYmplY3QgYW5kIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGl0LgorICAgIGlm
IChuZXdPYmplY3QgIT0gTlVMTCkgbmV3T2JqZWN0LT5hZGRSZWYoKTsKKyAgICBpZiAobU9iamVj
dCAhPSBOVUxMKSBtT2JqZWN0LT5yZWxlYXNlKCk7CisKKyAgICBtT2JqZWN0ID0gbmV3T2JqZWN0
OworfQorCit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oCShyZXZpc2lv
biAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDcwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZWZDb3VudE9iamVj
dC5oOiBEZWZpbmVzIHRoZSBnbDo6UmVmQ291bnRPYmplY3QgYmFzZSBjbGFzcyB0aGF0IHByb3Zp
ZGVzCisvLyBsaWZlY3ljbGUgc3VwcG9ydCBmb3IgR0wgb2JqZWN0cyB1c2luZyB0aGUgdHJhZGl0
aW9uYWwgQmluZE9iamVjdCBzY2hlbWUsIGJ1dAorLy8gdGhhdCBuZWVkIHRvIGJlIHJlZmVyZW5j
ZSBjb3VudGVkIGZvciBjb3JyZWN0IGNyb3NzLWNvbnRleHQgZGVsZXRpb24uCisvLyAoQ29uY3Jl
dGVseSwgdGV4dHVyZXMsIGJ1ZmZlcnMgYW5kIHJlbmRlcmJ1ZmZlcnMuKQorCisjaWZuZGVmIExJ
QkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVGQ09VTlRPQkpF
Q1RfSF8KKworI2luY2x1ZGUgPGNzdGRkZWY+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFj
ZSBnbAoreworCitjbGFzcyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGlj
aXQgUmVmQ291bnRPYmplY3QoR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFsIH5SZWZDb3VudE9iamVj
dCgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZFJlZigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtSWQ7
IH0KKyAgICAKKyAgcHJpdmF0ZToKKyAgICBHTHVpbnQgbUlkOworCisgICAgbXV0YWJsZSBzdGQ6
OnNpemVfdCBtUmVmQ291bnQ7Cit9OworCitjbGFzcyBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2lu
dGVyCit7CisgIHByb3RlY3RlZDoKKyAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyKCkg
OiBtT2JqZWN0KE5VTEwpIHsgfQorICAgIH5SZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyKCkg
eyBBU1NFUlQobU9iamVjdCA9PSBOVUxMKTsgfSAvLyBPYmplY3RzIGhhdmUgdG8gYmUgcmVsZWFz
ZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGlzIGRlc3Ryb3llZCwgc28gdGhleSBtdXN0
IGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cC4KKworICAgIHZvaWQgc2V0KFJlZkNvdW50T2JqZWN0
ICpuZXdPYmplY3QpOworICAgIFJlZkNvdW50T2JqZWN0ICpnZXQoKSBjb25zdCB7IHJldHVybiBt
T2JqZWN0OyB9CisKKyAgcHVibGljOgorICAgIEdMdWludCBpZCgpIGNvbnN0IHsgcmV0dXJuICht
T2JqZWN0ICE9IE5VTEwpID8gbU9iamVjdC0+aWQoKSA6IDA7IH0KKyAgICBib29sIG9wZXJhdG9y
ICEgKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RU
eXBlPgorY2xhc3MgQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcgoreworICBwdWJsaWM6CisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0
KSB7IFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdPYmplY3QpOyB9CisgICAg
T2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+
KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUg
Km9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Cit9OworCit9CisKKyNlbmRp
ZiAgIC8vIExJQkdMRVNWMl9SRUZDT1VOVE9CSkVDVF9IXwpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDczICsxNSwxNDggQEAKIAog
bmFtZXNwYWNlIGdsCiB7Ci11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjptQ3VycmVudFNlcmlh
bCA9IDE7Cit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6bUN1cnJlbnRTZXJpYWwg
PSAxOwogCi1SZW5kZXJidWZmZXI6OlJlbmRlcmJ1ZmZlcigpCitSZW5kZXJidWZmZXI6OlJlbmRl
cmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UpIDogUmVmQ291
bnRPYmplY3QoaWQpCiB7Ci0gICAgbVdpZHRoID0gMDsKLSAgICBtSGVpZ2h0ID0gMDsKLSAgICBt
Rm9ybWF0ID0gR0xfUkdCQTQ7IC8vIGRlZmF1bHQgZm9ybWF0LCBuZWVkcyB0byBiZSBvbmUgb2Yg
dGhlIGV4cGVjdGVkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzCi0gICAgbVNlcmlhbCA9IGlzc3VlU2Vy
aWFsKCk7CisgICAgQVNTRVJUKHN0b3JhZ2UgIT0gTlVMTCk7CisgICAgbVN0b3JhZ2UgPSBzdG9y
YWdlOwogfQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQogeworICAgIGRlbGV0ZSBt
U3RvcmFnZTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzQ29sb3JidWZmZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtU3RvcmFnZS0+aXNDb2xvcmJ1ZmZlcigpOworfQorCitib29sIFJlbmRl
cmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5p
c0RlcHRoYnVmZmVyKCk7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+aXNTdGVuY2lsYnVmZmVyKCk7Cit9CisK
K0lEaXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCit7Cisg
ICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKK30KKworSURpcmVjdDNEU3Vy
ZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVN0
b3JhZ2UtPmdldERlcHRoU3RlbmNpbCgpOworfQorCitpbnQgUmVuZGVyYnVmZmVyOjpnZXRXaWR0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRXaWR0aCgpOworfQorCitpbnQg
UmVuZGVyYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+
Z2V0SGVpZ2h0KCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldEZvcm1hdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRGb3JtYXQoKTsKK30KKworRDNERk9STUFUIFJl
bmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2Ut
PmdldEQzREZvcm1hdCgpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpnZXRTZXJp
YWwoKSBjb25zdAoreworICAgIHJldHVybiBtU3RvcmFnZS0+Z2V0U2VyaWFsKCk7Cit9CisKK3Zv
aWQgUmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKm5ld1N0b3Jh
Z2UpCit7CisgICAgQVNTRVJUKG5ld1N0b3JhZ2UgIT0gTlVMTCk7CisKKyAgICBkZWxldGUgbVN0
b3JhZ2U7CisgICAgbVN0b3JhZ2UgPSBuZXdTdG9yYWdlOworfQorCitSZW5kZXJidWZmZXJTdG9y
YWdlOjpSZW5kZXJidWZmZXJTdG9yYWdlKCkKK3sKKyAgICBtU2VyaWFsID0gaXNzdWVTZXJpYWwo
KTsKK30KKworUmVuZGVyYnVmZmVyU3RvcmFnZTo6flJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQorewog
fQogCi1ib29sIFJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCitib29sIFJlbmRlcmJ1ZmZl
clN0b3JhZ2U6OmlzQ29sb3JidWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZW5kZXJidWZmZXI6OmlzRGVwdGhidWZmZXIoKQorYm9vbCBSZW5kZXJidWZmZXJT
dG9yYWdlOjppc0RlcHRoYnVmZmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKQorYm9vbCBSZW5kZXJidWZmZXJT
dG9yYWdlOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK0lE
aXJlY3QzRFN1cmZhY2U5ICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJUYXJnZXQoKQog
ewogICAgIHJldHVybiBOVUxMOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWwoKQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLWludCBSZW5k
ZXJidWZmZXI6OmdldFdpZHRoKCkKK2ludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRXaWR0aCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1XaWR0aDsKIH0KIAotaW50IFJlbmRlcmJ1ZmZlcjo6Z2V0
SGVpZ2h0KCkKK2ludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRIZWlnaHQoKSBjb25zdAogewog
ICAgIHJldHVybiBtSGVpZ2h0OwogfQogCi12b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit2b2lkIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OnNldFNpemUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQg
PSBoZWlnaHQ7CiB9CiAKLQotR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0KCkKK0dMZW51
bSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRGb3JtYXQoKSBjb25zdAogewogICAgIHJldHVybiBt
Rm9ybWF0OwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpnZXRTZXJpYWwoKSBjb25z
dAorRDNERk9STUFUIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEQzREZvcm1hdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1EM0RGb3JtYXQ7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVzOworfQorCit1bnNp
Z25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbVNlcmlhbDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlcjo6aXNzdWVTZXJp
YWwoKQordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkKIHsK
ICAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKIH0KQEAgLTk2LDM2ICsxNzEsNTkgQEAgQ29s
b3JidWZmZXI6OkNvbG9yYnVmZmVyKElEaXJlY3QzRFN1cmZhYwogICAgICAgICByZW5kZXJUYXJn
ZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKIAogICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9u
LldpZHRoLCBkZXNjcmlwdGlvbi5IZWlnaHQpOworICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3Jp
cHRpb24uRm9ybWF0OworICAgICAgICBtU2FtcGxlcyA9IGVzMmR4OjpHZXRTYW1wbGVzRnJvbU11
bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047CisgICAgICAg
IG1TYW1wbGVzID0gMDsKICAgICB9Ci0KIH0KIAotQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCkKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1
ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cykKIHsKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKIAogICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZXMyZHg6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoZm9ybWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5V
TEwpOworICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gZ2V0Q29u
dGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBs
ZXMpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKICAg
ICB7CiAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGlmICh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCkKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVkRm9ybWF0LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlczJkeDo6
R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksIDAsIEZBTFNF
LCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
fQogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzZXRTaXplKHdpZHRo
LCBoZWlnaHQpOwogICAgICAgICBtRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBtRDNERm9ybWF0
ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7
CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHNldFNpemUoMCwgMCk7CiAgICAgICAg
IG1Gb3JtYXQgPSBHTF9SR0JBNDsKKyAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dO
OworICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCkBAIC0xMzcsMTIgKzIzNSwxMiBA
QCBDb2xvcmJ1ZmZlcjo6fkNvbG9yYnVmZmVyKCkKICAgICB9CiB9CiAKLWJvb2wgQ29sb3JidWZm
ZXI6OmlzQ29sb3JidWZmZXIoKQorYm9vbCBDb2xvcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVk
U2l6ZSgpCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAogewogICAgIGlm
IChtUmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTE1NSw3ICsyNTMsNyBAQCBHTHVpbnQgQ29sb3Ji
dWZmZXI6OmdldFJlZFNpemUoKQogICAgIHJldHVybiAwOwogfQogCi1HTHVpbnQgQ29sb3JidWZm
ZXI6OmdldEdyZWVuU2l6ZSgpCitHTHVpbnQgQ29sb3JidWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNv
bnN0CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMTY4LDcgKzI2Niw3IEBA
IEdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKICAgICByZXR1cm4gMDsKIH0KIAot
R0x1aW50IENvbG9yYnVmZmVyOjpnZXRCbHVlU2l6ZSgpCitHTHVpbnQgQ29sb3JidWZmZXI6Omdl
dEJsdWVTaXplKCkgY29uc3QKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC0x
ODEsNyArMjc5LDcgQEAgR0x1aW50IENvbG9yYnVmZmVyOjpnZXRCbHVlU2l6ZSgpCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUdMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkKK0dMdWludCBD
b2xvcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29uc3QKIHsKICAgICBpZiAobVJlbmRlclRhcmdl
dCkKICAgICB7CkBAIC0xOTksNyArMjk3LDcgQEAgSURpcmVjdDNEU3VyZmFjZTkgKkNvbG9yYnVm
ZmVyOjpnZXRSZW5kZQogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi1EZXB0aGJ1ZmZl
cjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhT
dGVuY2lsKGRlcHRoU3RlbmNpbCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVm
ZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChkZXB0
aFN0ZW5jaWwpCiB7CiAgICAgaWYgKGRlcHRoU3RlbmNpbCkKICAgICB7CkBAIC0yMDksMTggKzMw
NywzNCBAQCBEZXB0aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjCiAgICAgICAg
IGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwogCiAgICAgICAgIHNldFNpemUo
ZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7Ci0gICAgICAgIG1Gb3JtYXQg
PSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJz
IGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVy
YnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyAgICAgICAgbUZvcm1hdCA9IChk
ZXNjcmlwdGlvbi5Gb3JtYXQgPT0gRDNERk1UX0QxNiA/IEdMX0RFUFRIX0NPTVBPTkVOVDE2IDog
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpOworICAgICAgICBtU2FtcGxlcyA9IGVzMmR4OjpHZXRT
YW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOyAK
KyAgICAgICAgbUQzREZvcm1hdCA9IGRlc2NyaXB0aW9uLkZvcm1hdDsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktOT1dOOyAKKyAgICAgICAg
bVNhbXBsZXMgPSAwOwogICAgIH0KIH0KIAotRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3
aWR0aCwgaW50IGhlaWdodCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVy
KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwogCiAgICAgbURlcHRoU3RlbmNpbCA9IE5V
TEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZh
Y2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBG
QUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOworICAgIAorICAgIGludCBzdXBwb3J0ZWRTYW1wbGVz
ID0gZ2V0Q29udGV4dCgpLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGTVRfRDI0Uzgs
IHNhbXBsZXMpOworCisgICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPT0gLTEpCisgICAgeworICAg
ICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uo
d2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4LCBlczJkeDo6R2V0TXVsdGlzYW1wbGVUeXBlRnJv
bVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCAwKTsK
IAogICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCiAgICAgewpAQCAtMjM0LDE4ICszNDgsMjAgQEAgRGVwdGhidWZmZXI6
OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IAogICAgIGlmIChtRGVwdGhTdGVuY2lsKQogICAg
IHsKICAgICAgICAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IEdM
X0RFUFRIX0NPTVBPTkVOVDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJl
IHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZm
ZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorICAgICAgICBtRm9ybWF0ID0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfRDI0Uzg7Cisg
ICAgICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKICAgICAgICAgc2V0U2l6ZSgwLCAwKTsKICAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAv
L2RlZmF1bHQgZm9ybWF0CisgICAgICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKKyAg
ICAgICAgbVNhbXBsZXMgPSAwOwogICAgIH0KIH0KIAotRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZl
cigpCitEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIoKQogewogICAgIGlm
IChtRGVwdGhTdGVuY2lsKQogICAgIHsKQEAgLTI1MywxMiArMzY5LDE3IEBAIERlcHRoYnVmZmVy
Ojp+RGVwdGhidWZmZXIoKQogICAgIH0KIH0KIAotYm9vbCBEZXB0aGJ1ZmZlcjo6aXNEZXB0aGJ1
ZmZlcigpCitib29sIERlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGVwdGhTdGVuY2lsYnVmZmVyOjppc1N0ZW5j
aWxidWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1HTHVpbnQgRGVwdGhi
dWZmZXI6OmdldERlcHRoU2l6ZSgpCitHTHVpbnQgRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0
aFNpemUoKSBjb25zdAogewogICAgIGlmIChtRGVwdGhTdGVuY2lsKQogICAgIHsKQEAgLTI3MSw4
NSArMzkyLDkzIEBAIEdMdWludCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkKICAgICByZXR1
cm4gMDsKIH0KIAotSURpcmVjdDNEU3VyZmFjZTkgKkRlcHRoYnVmZmVyOjpnZXREZXB0aFN0ZW5j
aWwoKQorR0x1aW50IERlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAor
eworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2NyaXB0aW9uOworICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlv
bik7CisKKyAgICAgICAgcmV0dXJuIGVzMmR4OjpHZXRTdGVuY2lsU2l6ZShkZXNjcmlwdGlvbi5G
b3JtYXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitJRGlyZWN0M0RTdXJmYWNlOSAq
RGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIHJldHVybiBtRGVw
dGhTdGVuY2lsOwogfQogCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1
cmZhY2U5ICpkZXB0aFN0ZW5jaWwpIDogbURlcHRoU3RlbmNpbChkZXB0aFN0ZW5jaWwpCitEZXB0
aGJ1ZmZlcjo6RGVwdGhidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBE
ZXB0aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQogewogICAgIGlmIChkZXB0aFN0ZW5jaWwp
CiAgICAgewotICAgICAgICBkZXB0aFN0ZW5jaWwtPkFkZFJlZigpOwotCi0gICAgICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZk
ZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3Jp
cHRpb24uSGVpZ2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJ
ZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1
bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBl
Y3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZQorICAgICAgICBtRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5k
ZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUg
b2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAg
ICAgfQogfQogCi1TdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCkKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxl
cykKIHsKLSAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKLQotICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIEQzREZNVF9EMjRTOCwgRDNETVVM
VElTQU1QTEVfTk9ORSwgMCwgRkFMU0UsICZtRGVwdGhTdGVuY2lsLCAwKTsKLQotICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCisgICAgaWYgKGdldERlcHRoU3RlbmNpbCgpKQogICAgIHsKLSAgICAgICAgZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7Ci0KLSAgICAgICAgcmV0dXJuOworICAgICAgICBtRm9ybWF0ID0gR0xf
REVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUg
cXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZl
ciBmb3JtYXRzIGZvciB1c2UgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAgICAgfQorfQogCi0gICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKK0RlcHRoYnVmZmVyOjp+RGVwdGhidWZmZXIoKQoreworfQogCi0g
ICAgaWYgKG1EZXB0aFN0ZW5jaWwpCitib29sIERlcHRoYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXB0aGJ1ZmZlcjo6aXNTdGVu
Y2lsYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0ZW5jaWxidWZm
ZXI6OlN0ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBEZXB0
aFN0ZW5jaWxidWZmZXIoZGVwdGhTdGVuY2lsKQoreworICAgIGlmIChkZXB0aFN0ZW5jaWwpCiAg
ICAgewotICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBtRm9ybWF0ID0g
R0xfU1RFTkNJTF9JTkRFWDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUg
cXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBm
b3JtYXRzIGZvciB1c2UgaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHNldFNpemUoMCwgMCk7CiAgICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy9kZWZhdWx0IGZv
cm1hdAogICAgIH0KIH0KIAotU3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZmZXIoKQorU3RlbmNp
bGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2Ft
cGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykKIHsKLSAg
ICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICBpZiAoZ2V0RGVwdGhTdGVuY2lsKCkpCiAgICAgewot
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1Gb3JtYXQgPSBHTF9T
VEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVy
aWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1h
dHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9CiB9CiAKLUdMdWludCBTdGVuY2lsYnVmZmVyOjpn
ZXRTdGVuY2lsU2l6ZSgpCitTdGVuY2lsYnVmZmVyOjp+U3RlbmNpbGJ1ZmZlcigpCiB7Ci0gICAg
aWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzY3Jp
cHRpb247Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQot
ICAgICAgICByZXR1cm4gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2NyaXB0aW9uLkZvcm1hdCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU3RlbmNpbGJ1ZmZlcjo6aXNTdGVu
Y2lsYnVmZmVyKCkKK2Jvb2wgU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JRGlyZWN0M0RTdXJm
YWNlOSAqU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK2Jvb2wgU3RlbmNpbGJ1ZmZl
cjo6aXNTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIH0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIu
aAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00LDggKzQsOSBAQAogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCiAKLS8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB2aXJ0dWFsIGdsOjpS
ZW5kZXJidWZmZXIgY2xhc3MgYW5kIGl0cyBkZXJpdmVkCi0vLyBjbGFzc2VzIENvbG9yYnVmZmVy
LCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50cyBHTCByZW5kZXJidWZm
ZXIKKy8vIFJlbmRlcmJ1ZmZlci5oOiBEZWZpbmVzIHRoZSB3cmFwcGVyIGNsYXNzIGdsOjpSZW5k
ZXJidWZmZXIsIGFzIHdlbGwgYXMgdGhlCisvLyBjbGFzcyBoaWVyYXJjaHkgdXNlZCB0byBzdG9y
ZSBpdHMgY29udGVudHM6IFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIENvbG9yYnVmZmVyLAorLy8gRGVw
dGhTdGVuY2lsYnVmZmVyLCBEZXB0aGJ1ZmZlciBhbmQgU3RlbmNpbGJ1ZmZlci4gSW1wbGVtZW50
cyBHTCByZW5kZXJidWZmZXIKIC8vIG9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4g
W09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gNC40LjMgcGFnZSAxMDguCiAKICNpZm5kZWYgTElC
R0xFU1YyX1JFTkRFUkJVRkZFUl9IXwpAQCAtMTYsMjYgKzE3LDMzIEBACiAjaW5jbHVkZSA8ZDNk
OS5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvUmVmQ291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIGdsCiB7Ci1jbGFzcyBSZW5kZXJidWZm
ZXIKKworLy8gQSBjbGFzcyBkZXJpdmVkIGZyb20gUmVuZGVyYnVmZmVyU3RvcmFnZSBpcyBjcmVh
dGVkIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorLy8gaXMgY2FsbGVkLiBUaGUgc3Bl
Y2lmaWMgY29uY3JldGUgdHlwZSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGludGVybmFsIGZvcm1h
dCBpcworLy8gY29sb3VyIGRlcHRoLCBzdGVuY2lsIG9yIHBhY2tlZCBkZXB0aC9zdGVuY2lsLgor
Y2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVy
KCk7CisgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSgpOwogCi0gICAgdmlydHVhbCB+UmVuZGVyYnVm
ZmVyKCk7CisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyU3RvcmFnZSgpID0gMDsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc0NvbG9yYnVmZmVyKCk7Ci0gICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZm
ZXIoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCk7CisgICAgdmlydHVhbCBi
b29sIGlzQ29sb3JidWZmZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXB0aGJ1ZmZl
cigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHZp
cnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0V2lkdGgoKTsKLSAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKTsKLSAgICBHTGVu
dW0gZ2V0Rm9ybWF0KCk7CisgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRGb3Jt
YXQoKSBjb25zdDsKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNv
bnN0OwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwpAQCAtNDMsMTAg
KzUxLDEyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlcgogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgRDNE
Rk9STUFUIG1EM0RGb3JtYXQ7CisgICAgR0xzaXplaSBtU2FtcGxlczsKICAgICB1bnNpZ25lZCBp
bnQgbVNlcmlhbDsKIAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXIpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJT
dG9yYWdlKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CiAKQEAg
LTU0LDIwICs2NCw1MiBAQCBjbGFzcyBSZW5kZXJidWZmZXIKICAgICBpbnQgbUhlaWdodDsKIH07
CiAKLWNsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgorLy8gUmVuZGVyYnVm
ZmVyIGltcGxlbWVudHMgdGhlIEdMIHJlbmRlcmJ1ZmZlciBvYmplY3QuCisvLyBJdCdzIG9ubHkg
YSB3cmFwcGVyIGZvciBhIFJlbmRlcmJ1ZmZlclN0b3JhZ2UsIGJ1dCB0aGUgaW50ZXJuYWwgb2Jq
ZWN0CisvLyBjYW4gY2hhbmdlIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSBpcyBjYWxs
ZWQuCitjbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVi
bGljOgorICAgIFJlbmRlcmJ1ZmZlcihHTHVpbnQgaWQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnN0
b3JhZ2UpOworCisgICAgflJlbmRlcmJ1ZmZlcigpOworCisgICAgYm9vbCBpc0NvbG9yYnVmZmVy
KCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0
ZW5jaWxidWZmZXIoKSBjb25zdDsKKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJU
YXJnZXQoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CisKKyAg
ICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAqbmV3U3RvcmFnZSk7CisgICAgUmVuZGVyYnVm
ZmVyU3RvcmFnZSAqZ2V0U3RvcmFnZSgpIHsgcmV0dXJuIG1TdG9yYWdlOyB9CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKKworICAgIFJl
bmRlcmJ1ZmZlclN0b3JhZ2UgKm1TdG9yYWdlOworfTsKKworY2xhc3MgQ29sb3JidWZmZXIgOiBw
dWJsaWMgUmVuZGVyYnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29s
b3JidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCk7Ci0gICAgQ29sb3JidWZm
ZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKKyAgICBDb2xvcmJ1ZmZl
cihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CiAKICAgICB+Q29sb3JidWZmZXIoKTsKIAotICAgIGJvb2wgaXNDb2xvcmJ1ZmZlcigpOworICAg
IGJvb2wgaXNDb2xvcmJ1ZmZlcigpIGNvbnN0OwogCi0gICAgR0x1aW50IGdldFJlZFNpemUoKTsK
LSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCk7Ci0gICAgR0x1aW50IGdldEJsdWVTaXplKCk7Ci0g
ICAgR0x1aW50IGdldEFscGhhU2l6ZSgpOworICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7
CisgICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRCbHVlU2l6
ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRBbHBoYVNpemUoKSBjb25zdDsKIAogICAgIElEaXJl
Y3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoKTsKIApAQCAtNzgsNDIgKzEyMCw1NSBAQCBj
bGFzcyBDb2xvcmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oQ29sb3JidWZmZXIpOwogfTsKIAotY2xhc3MgRGVwdGhidWZmZXIgOiBwdWJs
aWMgUmVuZGVyYnVmZmVyCitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgUmVuZGVy
YnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRGVwdGhidWZmZXIoSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgRGVwdGhidWZmZXIoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKyAgICBleHBsaWNpdCBEZXB0aFN0ZW5jaWxidWZmZXIoSURpcmVjdDNE
U3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgRGVwdGhTdGVuY2lsYnVmZmVyKGludCB3aWR0
aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIH5EZXB0aGJ1ZmZlcigpOwor
ICAgIH5EZXB0aFN0ZW5jaWxidWZmZXIoKTsKIAotICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OwogCi0gICAgR0x1aW50IGdldERlcHRoU2l6ZSgpOwor
ICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0U3RlbmNpbFNp
emUoKSBjb25zdDsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwoKTsK
IAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZXB0aGJ1ZmZlcik7
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoU3RlbmNpbGJ1ZmZlcik7CiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7CiB9OwogCi1jbGFzcyBTdGVuY2lsYnVm
ZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgorY2xhc3MgRGVwdGhidWZmZXIgOiBwdWJsaWMgRGVw
dGhTdGVuY2lsYnVmZmVyCiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGVuY2lsYnVmZmVy
KElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOwotICAgIFN0ZW5jaWxidWZmZXIoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBleHBsaWNpdCBEZXB0aGJ1ZmZlcihJRGlyZWN0M0RT
dXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aGJ1ZmZlcihpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAKLSAgICB+U3RlbmNpbGJ1ZmZlcigpOworICAgIH5E
ZXB0aGJ1ZmZlcigpOworCisgICAgYm9vbCBpc0RlcHRoYnVmZmVyKCkgY29uc3Q7CisgICAgYm9v
bCBpc1N0ZW5jaWxidWZmZXIoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihEZXB0aGJ1ZmZlcik7Cit9OwogCi0gICAgYm9vbCBpc1N0ZW5jaWxidWZm
ZXIoKTsKK2NsYXNzIFN0ZW5jaWxidWZmZXIgOiBwdWJsaWMgRGVwdGhTdGVuY2lsYnVmZmVyCit7
CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGVuY2lsYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5
ICpkZXB0aFN0ZW5jaWwpOworICAgIFN0ZW5jaWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBHTHNpemVpIHNhbXBsZXMpOwogCi0gICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCk7CisgICAg
flN0ZW5jaWxidWZmZXIoKTsKIAotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5j
aWwoKTsKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKSBjb25zdDsKKyAgICBib29sIGlzU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFN0ZW5jaWxidWZmZXIpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICptRGVwdGhTdGVuY2ls
OwogfTsKIH0KIApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJl
c291cmNlTWFuYWdlci5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZXNvdXJjZU1hbmFnZXIgY2xh
c3MsIHdoaWNoIHRyYWNrcyBhbmQgCisvLyByZXRyaWV2ZXMgb2JqZWN0cyB3aGljaCBtYXkgYmUg
c2hhcmVkIGJ5IG11bHRpcGxlIENvbnRleHRzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291
cmNlTWFuYWdlci5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVGV4
dHVyZS5oIgorCituYW1lc3BhY2UgZ2wKK3sKK1Jlc291cmNlTWFuYWdlcjo6UmVzb3VyY2VNYW5h
Z2VyKCkKK3sKKyAgICBtUmVmQ291bnQgPSAxOworfQorCitSZXNvdXJjZU1hbmFnZXI6On5SZXNv
dXJjZU1hbmFnZXIoKQoreworICAgIHdoaWxlICghbUJ1ZmZlck1hcC5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgZGVsZXRlQnVmZmVyKG1CdWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0K
KworICAgIHdoaWxlICghbVByb2dyYW1NYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0
ZVByb2dyYW0obVByb2dyYW1NYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxl
ICghbVNoYWRlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2hhZGVyKG1TaGFk
ZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbVJlbmRlcmJ1ZmZl
ck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKG1SZW5kZXJi
dWZmZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbVRleHR1cmVN
YXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVn
aW4oKS0+Zmlyc3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmFkZFJlZigp
Cit7CisgICAgbVJlZkNvdW50Kys7Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpyZWxlYXNl
KCkKK3sKKyAgICBpZiAoLS1tUmVmQ291bnQgPT0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgIH0KK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgYnVmZmVyIG5hbWUKK0dMdWlu
dCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgdW5zaWduZWQgaW50IGhh
bmRsZSA9IDE7CisKKyAgICB3aGlsZSAobUJ1ZmZlck1hcC5maW5kKGhhbmRsZSkgIT0gbUJ1ZmZl
ck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKworICAgIG1CdWZm
ZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1
cm5zIGFuIHVudXNlZCBzaGFkZXIvcHJvZ3JhbSBuYW1lCitHTHVpbnQgUmVzb3VyY2VNYW5hZ2Vy
OjpjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9
IDE7CisKKyAgICB3aGlsZSAobVNoYWRlck1hcC5maW5kKGhhbmRsZSkgIT0gbVNoYWRlck1hcC5l
bmQoKSB8fCBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSkgIT0gbVByb2dyYW1NYXAuZW5kKCkpICAg
Ly8gU2hhcmVkIG5hbWUgc3BhY2UKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0KKwor
ICAgIGlmICh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBtU2hhZGVy
TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAgfQorICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgbVNo
YWRlck1hcFtoYW5kbGVdID0gbmV3IEZyYWdtZW50U2hhZGVyKHRoaXMsIGhhbmRsZSk7CisgICAg
fQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8v
IFJldHVybnMgYW4gdW51c2VkIHByb2dyYW0vc2hhZGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHVuc2lnbmVkIGludCBoYW5kbGUgPSAxOwor
CisgICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQo
KSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpKSAgIC8vIFNo
YXJlZCBuYW1lIHNwYWNlCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBt
UHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFByb2dyYW0odGhpcywgaGFuZGxlKTsKKworICAgIHJl
dHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHRleHR1cmUgbmFtZQorR0x1
aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgdW5zaWduZWQgaW50
IGhhbmRsZSA9IDE7CisKKyAgICB3aGlsZSAobVRleHR1cmVNYXAuZmluZChoYW5kbGUpICE9IG1U
ZXh0dXJlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAg
bVRleHR1cmVNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisv
LyBSZXR1cm5zIGFuIHVudXNlZCByZW5kZXJidWZmZXIgbmFtZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0g
MTsKKworICAgIHdoaWxlIChtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtUmVuZGVy
YnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisgICAg
bVJlbmRlcmJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9
CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sK
KyAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1CdWZmZXJNYXAuZmluZChi
dWZmZXIpOworCisgICAgaWYgKGJ1ZmZlck9iamVjdCAhPSBtQnVmZmVyTWFwLmVuZCgpKQorICAg
IHsKKyAgICAgICAgaWYgKGJ1ZmZlck9iamVjdC0+c2Vjb25kKSBidWZmZXJPYmplY3QtPnNlY29u
ZC0+cmVsZWFzZSgpOworICAgICAgICBtQnVmZmVyTWFwLmVyYXNlKGJ1ZmZlck9iamVjdCk7Cisg
ICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2hhZGVyKEdMdWludCBzaGFk
ZXIpCit7CisgICAgU2hhZGVyTWFwOjppdGVyYXRvciBzaGFkZXJPYmplY3QgPSBtU2hhZGVyTWFw
LmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChzaGFkZXJPYmplY3QgIT0gbVNoYWRlck1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJPYmplY3QtPnNlY29uZC0+Z2V0UmVmQ291bnQo
KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNv
bmQ7CisgICAgICAgICAgICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9iamVjdCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNl
Y29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjpkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIFByb2dy
YW1NYXA6Oml0ZXJhdG9yIHByb2dyYW1PYmplY3QgPSBtUHJvZ3JhbU1hcC5maW5kKHByb2dyYW0p
OworCisgICAgaWYgKHByb2dyYW1PYmplY3QgIT0gbVByb2dyYW1NYXAuZW5kKCkpCisgICAgewor
ICAgICAgICBpZiAocHJvZ3JhbU9iamVjdC0+c2Vjb25kLT5nZXRSZWZDb3VudCgpID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtT2JqZWN0LT5zZWNvbmQ7CisgICAg
ICAgICAgICBtUHJvZ3JhbU1hcC5lcmFzZShwcm9ncmFtT2JqZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsgCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZWNvbmQt
PmZsYWdGb3JEZWxldGlvbigpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc291cmNl
TWFuYWdlcjo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBUZXh0dXJlTWFw
OjppdGVyYXRvciB0ZXh0dXJlT2JqZWN0ID0gbVRleHR1cmVNYXAuZmluZCh0ZXh0dXJlKTsKKwor
ICAgIGlmICh0ZXh0dXJlT2JqZWN0ICE9IG1UZXh0dXJlTWFwLmVuZCgpKQorICAgIHsKKyAgICAg
ICAgaWYgKHRleHR1cmVPYmplY3QtPnNlY29uZCkgdGV4dHVyZU9iamVjdC0+c2Vjb25kLT5yZWxl
YXNlKCk7CisgICAgICAgIG1UZXh0dXJlTWFwLmVyYXNlKHRleHR1cmVPYmplY3QpOworICAgIH0K
K30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVy
T2JqZWN0ID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKHJlbmRlcmJ1ZmZlcik7CisKKyAgICBpZiAo
cmVuZGVyYnVmZmVyT2JqZWN0ICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0LT5zZWNvbmQpIHJlbmRlcmJ1ZmZlck9iamVjdC0+
c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1SZW5kZXJidWZmZXJNYXAuZXJhc2UocmVuZGVy
YnVmZmVyT2JqZWN0KTsKKyAgICB9Cit9CisKK0J1ZmZlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRC
dWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1
ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGJ1ZmZlciA9PSBtQnVm
ZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBidWZmZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1No
YWRlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRTaGFkZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sK
KyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJNYXAuZmluZChoYW5kbGUp
OworCisgICAgaWYgKHNoYWRlciA9PSBtU2hhZGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzaGFk
ZXItPnNlY29uZDsKKyAgICB9Cit9CisKK1RleHR1cmUgKlJlc291cmNlTWFuYWdlcjo6Z2V0VGV4
dHVyZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGlmIChoYW5kbGUgPT0gMCkgcmV0dXJu
IE5VTEw7CisKKyAgICBUZXh0dXJlTWFwOjppdGVyYXRvciB0ZXh0dXJlID0gbVRleHR1cmVNYXAu
ZmluZChoYW5kbGUpOworCisgICAgaWYgKHRleHR1cmUgPT0gbVRleHR1cmVNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRleHR1cmUtPnNlY29uZDsKKyAgICB9Cit9CisKK1Byb2dyYW0gKlJlc291cmNl
TWFuYWdlcjo6Z2V0UHJvZ3JhbSh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFByb2dyYW1N
YXA6Oml0ZXJhdG9yIHByb2dyYW0gPSBtUHJvZ3JhbU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBp
ZiAocHJvZ3JhbSA9PSBtUHJvZ3JhbU1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbS0+c2Vj
b25kOworICAgIH0KK30KKworUmVuZGVyYnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIFJlbmRlcmJ1ZmZlck1hcDo6aXRl
cmF0b3IgcmVuZGVyYnVmZmVyID0gbVJlbmRlcmJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAg
ICBpZiAocmVuZGVyYnVmZmVyID09IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmJ1ZmZlci0+c2Vjb25kOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6
OnNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKK3sK
KyAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBidWZmZXI7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcikKK3sK
KyAgICBpZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQorICAgIHsKKyAgICAg
ICAgQnVmZmVyICpidWZmZXJPYmplY3QgPSBuZXcgQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgIG1C
dWZmZXJNYXBbYnVmZmVyXSA9IGJ1ZmZlck9iamVjdDsKKyAgICAgICAgYnVmZmVyT2JqZWN0LT5h
ZGRSZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1RleHR1cmVB
bGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIGlmICgh
Z2V0VGV4dHVyZSh0ZXh0dXJlKSAmJiB0ZXh0dXJlICE9IDApCisgICAgeworICAgICAgICBUZXh0
dXJlICp0ZXh0dXJlT2JqZWN0OworCisgICAgICAgIGlmICh0eXBlID09IFNBTVBMRVJfMkQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVyZTJEKHRleHR1
cmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gU0FNUExFUl9DVUJFKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRleHR1cmVDdWJlTWFw
KHRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gdGV4dHVyZU9iamVjdDsKKyAgICAgICAgdGV4dHVy
ZU9iamVjdC0+YWRkUmVmKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hl
Y2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWludCByZW5kZXJidWZmZXIpCit7CisgICAgaWYg
KHJlbmRlcmJ1ZmZlciAhPSAwICYmICFnZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKKyAg
ICB7CisgICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbmV3IFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIsIG5ldyBDb2xvcmJ1ZmZlcigwLCAwLCBHTF9SR0JBNCwgMCkp
OworICAgICAgICBtUmVuZGVyYnVmZmVyTWFwW3JlbmRlcmJ1ZmZlcl0gPSByZW5kZXJidWZmZXJP
YmplY3Q7CisgICAgICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+YWRkUmVmKCk7CisgICAgfQorfQor
Cit9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHJldmlzaW9uIDAp
CisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZXNvdXJjZU1hbmFnZXIu
aCA6IERlZmluZXMgdGhlIFJlc291cmNlTWFuYWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIG9iamVj
dHMKKy8vIHNoYXJlZCBieSBtdWx0aXBsZSBHTCBjb250ZXh0cy4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVTT1VSQ0VNQU5BR0VSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJf
SF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNs
dWRlIDxtYXA+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ug
Z2wKK3sKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFNoYWRlcjsKK2NsYXNzIFByb2dyYW07CitjbGFz
cyBUZXh0dXJlOworY2xhc3MgUmVuZGVyYnVmZmVyOworCitlbnVtIFNhbXBsZXJUeXBlCit7Cisg
ICAgU0FNUExFUl8yRCwKKyAgICBTQU1QTEVSX0NVQkUsCisKKyAgICBTQU1QTEVSX1RZUEVfQ09V
TlQKK307CisKK2NsYXNzIFJlc291cmNlTWFuYWdlcgoreworICBwdWJsaWM6CisgICAgUmVzb3Vy
Y2VNYW5hZ2VyKCk7CisgICAgflJlc291cmNlTWFuYWdlcigpOworCisgICAgdm9pZCBhZGRSZWYo
KTsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIEdMdWludCBjcmVhdGVCdWZmZXIoKTsKKyAg
ICBHTHVpbnQgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKKyAgICBHTHVpbnQgY3JlYXRlUHJv
Z3JhbSgpOworICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CisgICAgR0x1aW50IGNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7Cisg
ICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CisgICAgdm9pZCBkZWxldGVQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKKyAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1
cmUpOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
CisgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgU2hhZGVyICpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSk7CisgICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFu
ZGxlKTsKKyAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpOworICAgIFJlbmRl
cmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIAorICAgIHZvaWQg
c2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVy
KTsKKworICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVkIGludCBidWZmZXIp
OworICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgU2FtcGxl
clR5cGUgdHlwZSk7CisgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24oR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVzb3VyY2VNYW5hZ2VyKTsKKworICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKKworICAg
IHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7CisgICAgQnVmZmVy
TWFwIG1CdWZmZXJNYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgU2hhZGVyKj4g
U2hhZGVyTWFwOworICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOworICAgIFByb2dyYW1NYXAgbVByb2dy
YW1NYXA7CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVN
YXA7CisgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8
R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CisgICAgUmVuZGVyYnVmZmVy
TWFwIG1SZW5kZXJidWZmZXJNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVT
T1VSQ0VNQU5BR0VSX0hfCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lvbiA2NjYx
MSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNyArMjEsNyBAQCBuYW1lc3BhY2UgZ2wKIHZvaWQgKlNoYWRlcjo6bUZyYWdtZW50Q29tcGls
ZXIgPSBOVUxMOwogdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwogCi1TaGFk
ZXI6OlNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IG1IYW5kbGUoaGFu
ZGxlKSwgbUNvbnRleHQoY29udGV4dCkKK1NoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAq
bWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBtSGFuZGxlKGhhbmRsZSksIG1SZXNvdXJjZU1hbmFn
ZXIobWFuYWdlcikKIHsKICAgICBtU291cmNlID0gTlVMTDsKICAgICBtSGxzbCA9IE5VTEw7CkBA
IC0zNSwyMSArMzUsMjIgQEAgU2hhZGVyOjpTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50
IAogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICB7CiAgICAgICAgICAgICBUQnVpbHRJblJl
c291cmNlIHJlc291cmNlczsKLSAgICAgICAgICAgIHJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJz
ID0gTUFYX1ZFUlRFWF9BVFRSSUJTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heFZlcnRleFVu
aWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7Ci0gICAgICAgICAgICBy
ZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlOR19WRUNUT1JTOwotICAgICAg
ICAgICAgcmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsKLSAgICAg
ICAgICAgIHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMg
PSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1h
eERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKKyAgICAgICAgICAgIFNoSW5pdEJ1aWx0
SW5SZXNvdXJjZSgmcmVzb3VyY2VzKTsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhB
dHRyaWJzID0gTUFYX1ZFUlRFWF9BVFRSSUJTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZl
cnRleFVuaWZvcm1WZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgICAg
ICAgICByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlOR19WRUNUT1JTOwor
ICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsK
KyAgICAgICAgICAgIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMgPSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOworICAgICAgICAgICAgcmVzb3Vy
Y2VzLk1heERyYXdCdWZmZXJzID0gTUFYX0RSQVdfQlVGRkVSUzsKIAogICAgICAgICAgICAgbUZy
YWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNo
U3BlY0dMRVMyLCAmcmVzb3VyY2VzKTsKICAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNo
Q29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3BlY0dMRVMyLCAmcmVzb3VyY2Vz
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1BdHRhY2hDb3VudCA9IDA7CisgICAgbVJlZkNv
dW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CiB9CiAKQEAgLTE4NywyNCArMTg4
LDI0IEBAIGNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCiAgICAgcmV0dXJuIG1IbHNsOwog
fQogCi12b2lkIFNoYWRlcjo6YXR0YWNoKCkKK3ZvaWQgU2hhZGVyOjphZGRSZWYoKQogewotICAg
IG1BdHRhY2hDb3VudCsrOworICAgIG1SZWZDb3VudCsrOwogfQogCi12b2lkIFNoYWRlcjo6ZGV0
YWNoKCkKK3ZvaWQgU2hhZGVyOjpyZWxlYXNlKCkKIHsKLSAgICBtQXR0YWNoQ291bnQtLTsKKyAg
ICBtUmVmQ291bnQtLTsKIAotICAgIGlmIChtQXR0YWNoQ291bnQgPT0gMCAmJiBtRGVsZXRlU3Rh
dHVzKQorICAgIGlmIChtUmVmQ291bnQgPT0gMCAmJiBtRGVsZXRlU3RhdHVzKQogICAgIHsKLSAg
ICAgICAgbUNvbnRleHQtPmRlbGV0ZVNoYWRlcihtSGFuZGxlKTsKKyAgICAgICAgbVJlc291cmNl
TWFuYWdlci0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOwogICAgIH0KIH0KIAotYm9vbCBTaGFkZXI6
OmlzQXR0YWNoZWQoKSBjb25zdAordW5zaWduZWQgaW50IFNoYWRlcjo6Z2V0UmVmQ291bnQoKSBj
b25zdAogewotICAgIHJldHVybiBtQXR0YWNoQ291bnQgPiAwOworICAgIHJldHVybiBtUmVmQ291
bnQ7CiB9CiAKIGJvb2wgU2hhZGVyOjppc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0CkBAIC0y
NjIsNiArMjYzLDggQEAgdm9pZCBTaGFkZXI6OnBhcnNlVmFyeWluZ3MoKQogCiAgICAgICAgIG1V
c2VzRnJhZ0Nvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPT1JEIikgIT0gTlVM
TDsKICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJP
TlRfRkFDSU5HIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgPSBzdHJzdHIobUhs
c2wsICJHTF9VU0VTX1BPSU5UX1NJWkUiKSAhPSBOVUxMOworICAgICAgICBtVXNlc1BvaW50Q29v
cmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX1BPSU5UX0NPT1JEIikgIT0gTlVMTDsKICAgICB9
CiB9CiAKQEAgLTQxNSw3ICs0MTgsNyBAQCBib29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29u
c3QgVmFyeWluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WZXJ0ZXhTaGFkZXI6OlZlcnRleFNo
YWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKSA6IFNoYWRlcihjb250ZXh0LCBo
YW5kbGUpCitWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFn
ZXIsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKIHsKIH0KIApAQCAt
NDc5LDcgKzQ4Miw3IEBAIHZvaWQgVmVydGV4U2hhZGVyOjpwYXJzZUF0dHJpYnV0ZXMoKQogICAg
IH0KIH0KIAotRnJhZ21lbnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQs
IEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNvbnRleHQsIGhhbmRsZSkKK0ZyYWdtZW50U2hhZGVy
OjpGcmFnbWVudFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUp
IDogU2hhZGVyKG1hbmFnZXIsIGhhbmRsZSkKIHsKIH0KIApJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi9TaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHZl
Y3Rvcj4KIAotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKQEAgLTQ1LDcgKzQ1LDcg
QEAgY2xhc3MgU2hhZGVyCiAgICAgZnJpZW5kIFByb2dyYW07CiAKICAgcHVibGljOgotICAgIFNo
YWRlcihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKyAgICBTaGFkZXIoUmVzb3Vy
Y2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAogICAgIHZpcnR1YWwgflNoYWRl
cigpOwogCkBAIC02Myw5ICs2Myw5IEBAIGNsYXNzIFNoYWRlcgogICAgIGJvb2wgaXNDb21waWxl
ZCgpOwogICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKIAotICAgIHZvaWQgYXR0YWNoKCk7Ci0g
ICAgdm9pZCBkZXRhY2goKTsKLSAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdDsKKyAgICB2b2lk
IGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworICAgIHVuc2lnbmVkIGludCBnZXRSZWZD
b3VudCgpIGNvbnN0OwogICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKICAg
ICB2b2lkIGZsYWdGb3JEZWxldGlvbigpOwogCkBAIC04Miw4ICs4Miw4IEBAIGNsYXNzIFNoYWRl
cgogICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0
IFZhcnlpbmcgJnkpOwogCiAgICAgY29uc3QgR0x1aW50IG1IYW5kbGU7Ci0gICAgaW50IG1BdHRh
Y2hDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMg
YXR0YWNoZWQgdG8KLSAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0
ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCisg
ICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVj
dHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KKyAgICBib29sIG1EZWxldGVTdGF0dXM7ICAg
ICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQg
d2hlbiBubyBsb25nZXIgaW4gdXNlCiAKICAgICBjaGFyICptU291cmNlOwogICAgIGNoYXIgKm1I
bHNsOwpAQCAtOTMsOCArOTMsMTAgQEAgY2xhc3MgU2hhZGVyCiAKICAgICBib29sIG1Vc2VzRnJh
Z0Nvb3JkOwogICAgIGJvb2wgbVVzZXNGcm9udEZhY2luZzsKKyAgICBib29sIG1Vc2VzUG9pbnRT
aXplOworICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwogCi0gICAgQ29udGV4dCAqbUNvbnRleHQ7
CisgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogCiAgICAgc3RhdGljIHZv
aWQgKm1GcmFnbWVudENvbXBpbGVyOwogICAgIHN0YXRpYyB2b2lkICptVmVydGV4Q29tcGlsZXI7
CkBAIC0xMjEsNyArMTIzLDcgQEAgY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgog
ICAgIGZyaWVuZCBQcm9ncmFtOwogCiAgIHB1YmxpYzoKLSAgICBWZXJ0ZXhTaGFkZXIoQ29udGV4
dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7CisgICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFu
YWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CiAKICAgICB+VmVydGV4U2hhZGVyKCk7CiAK
QEAgLTE0MCw3ICsxNDIsNyBAQCBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiBj
bGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKICAgcHVibGljOgotICAgIEZy
YWdtZW50U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOworICAgIEZyYWdt
ZW50U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSk7CiAKICAg
ICB+RnJhZ21lbnRTaGFkZXIoKTsKIApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCShyZXZp
c2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAgbmFtZXNwYWNlIGdsCiB7CiAKIFRleHR1cmU6OkltYWdl
OjpJbWFnZSgpCi0gIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHkoZmFsc2UpLCBzdXJmYWNl
KE5VTEwpCisgIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGlydHkoZmFsc2UpLCBzdXJmYWNlKE5V
TEwpLCBmb3JtYXQoR0xfTk9ORSkKIHsKIH0KIApAQCAtMzIsMTMgKzMyLDE2IEBAIFRleHR1cmU6
OkltYWdlOjp+SW1hZ2UoKQogICBpZiAoc3VyZmFjZSkgc3VyZmFjZS0+UmVsZWFzZSgpOwogfQog
Ci1UZXh0dXJlOjpUZXh0dXJlKENvbnRleHQgKmNvbnRleHQpIDogbUNvbnRleHQoY29udGV4dCkK
K1RleHR1cmU6OlRleHR1cmUoR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAg
IG1NaW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI7CiAgICAgbU1hZ0ZpbHRlciA9
IEdMX0xJTkVBUjsKICAgICBtV3JhcFMgPSBHTF9SRVBFQVQ7CiAgICAgbVdyYXBUID0gR0xfUkVQ
RUFUOwogCisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0gMDsKKwogICAgIG1EaXJ0eU1l
dGFEYXRhID0gdHJ1ZTsKICAgICBtRGlydHkgPSB0cnVlOwogICAgIG1Jc1JlbmRlcmFibGUgPSBm
YWxzZTsKQEAgLTUxLDcgKzU0LDggQEAgVGV4dHVyZTo6flRleHR1cmUoKQogCiBCbGl0ICpUZXh0
dXJlOjpnZXRCbGl0dGVyKCkKIHsKLSAgICByZXR1cm4gbUNvbnRleHQtPmdldEJsaXR0ZXIoKTsK
KyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0
LT5nZXRCbGl0dGVyKCk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRl
ciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQpAQCAtMTczLDcgKzE3NywxNSBA
QCBHTHVpbnQgVGV4dHVyZTo6Z2V0SGVpZ2h0KCkgY29uc3QKIC8vIFNlbGVjdHMgYW4gaW50ZXJu
YWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1hZ2UKIEQzREZPUk1BVCBUZXh0
dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OworICAgIGlmIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VCB8fAorICAgICAgICBmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQp
CisgICAgeworICAgICAgICByZXR1cm4gRDNERk1UX0RYVDE7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CisgICAgfQogfQogCiBpbnQgVGV4
dHVyZTo6aW1hZ2VQaXRjaChjb25zdCBJbWFnZSAmaW1nKSBjb25zdApAQCAtMTg4LDEyNiArMjAw
LDI4MiBAQCB2b2lkIFRleHR1cmU6OmxvYWRJbWFnZURhdGEoR0xpbnQgeG9mZnNlCiB7CiAgICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCk7CiAKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNl
IEdMX0FMUEhBOgorICAgICAgICBsb2FkQWxwaGFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwor
ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgIGxvYWRM
dW1pbmFuY2VJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICBicmVhazsKKworICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUlt
YWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdM
X1JHQjoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZFJHQlVCeXRlSW1hZ2VEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAgIGxvYWRSR0I1NjVJbWFnZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX1JH
QkE6CisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKKyAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVJbWFnZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgICAgICBsb2FkUkdCQTQ0NDRJbWFnZURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICAgICBsb2FkUkdCQTU1NTFJbWFnZURhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9CR1JBX0VYVDoKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZEJHUkFJbWFnZURhdGEoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBp
dGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTo6bG9hZEFscGhhSW1hZ2VE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworICAgIAogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UxNiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzb3VyY2UpOwotICAgICAgICB1bnNpZ25lZCBj
aGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwor
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSAr
IHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IDA7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3Vy
Y2VbeF07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTo6bG9hZEx1bWluYW5j
ZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHI7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGc7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGI7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGE7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICAgICAgICBhID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIHIg
PSAwOwotICAgICAgICAgICAgICAgIGcgPSAwOwotICAgICAgICAgICAgICAgIGIgPSAwOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZyA9IHNvdXJj
ZVt4XTsKLSAgICAgICAgICAgICAgICBiID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGEg
PSAweEZGOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICAgIHIgPSBzb3VyY2VbMip4KzBdOwotICAg
ICAgICAgICAgICAgIGcgPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGIgPSBzb3Vy
Y2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbMip4KzFdOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwordm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Cisg
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAg
ICAgciA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgICAgICAgICBnID0gc291cmNl
W3ggKiAzICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDMgKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgYSA9IDB4RkY7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07
CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKK3ZvaWQgVGV4dHVyZTo6
bG9hZFJHQlVCeXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhID0gMHhGRjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAo
KHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDA3RTApID4+IDMpIHwgKChyZ2JhICYgMHgw
N0UwKSA+PiA5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoKHJnYmEgJiAweEY4MDAp
ID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAz
ICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsK
KyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQorICAgIH0KK30KIAotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cit2b2lkIFRleHR1cmU6OmxvYWRSR0I1NjVJbWFnZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1
bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAg
ciA9IHNvdXJjZVt4ICogNCArIDBdOwotICAgICAgICAgICAgICAgICAgICBnID0gc291cmNlW3gg
KiA0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeCAqIDQgKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgYSA9IHNvdXJjZVt4ICogNCArIDNdOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsK
KyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEg
JiAweDA3RTApID4+IDkpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYg
MHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOworICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNl
MTZbeF07Cit2b2lkIFRleHR1cmU6OmxvYWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBhID0gKChyZ2JhICYgMHgw
MDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBiID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgo
cmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKChyZ2Jh
ICYgMHhGMDAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjAwMCkgPj4gMTIpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7CisgICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkg
KiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3gg
KiA0ICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDQgKyAw
XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4ICogNCArIDNdOworICAg
ICAgICB9CisgICAgfQorfQogCi0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNV81XzE6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2UxNlt4XTsKK3ZvaWQgVGV4dHVyZTo6bG9h
ZFJHQkE0NDQ0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgYSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYiA9ICgocmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAw
M0UpID4+IDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgocmdiYSAmIDB4MDdDMCkg
Pj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ciA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRw
dXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3Vy
Y2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwRjApIDw8
IDApIHwgKChyZ2JhICYgMHgwMEYwKSA+PiA0KTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOworICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGMDAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjAwMCkgPj4gMTIpOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2Jh
ICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CiAKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQordm9pZCBUZXh0dXJlOjpsb2FkUkdC
QTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBiOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gZzsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHI7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSBhOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
KyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkg
KyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgo
cmdiYSAmIDB4MDAzRSkgPDwgMikgfCAoKHJnYmEgJiAweDAwM0UpID4+IDMpOworICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4
MDdDMCkgPj4gOCk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4
MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKICAgICAgICAgfQogICAgIH0K
IH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJlOjpsb2FkQkdSQUltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3QKIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQp
OworICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpjcmVhdGVTdXJmYWNlKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBJbWFnZSAqaW1nKQoreworICAgIElEaXJl
Y3QzRFRleHR1cmU5ICpuZXdUZXh0dXJlID0gTlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bmV3U3VyZmFjZSA9IE5VTEw7CiAKICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCkK
ICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZU9mZnNj
cmVlblBsYWluU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBzZWxlY3RGb3JtYXQoZm9ybWF0KSwgRDNE
UE9PTF9TWVNURU1NRU0sICZuZXdTdXJmYWNlLCBOVUxMKTsKKyAgICAgICAgaW50IGxldmVsVG9G
ZXRjaCA9IDA7CisgICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gd2lkdGg7CisgICAgICAg
IEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgaWYgKElzQ29tcHJlc3Nl
ZChmb3JtYXQpICYmICh3aWR0aCAlIDQgIT0gMCB8fCBoZWlnaHQgJSA0ICE9IDApKQorICAgICAg
ICB7CisgICAgICAgICAgICBib29sIGlzTXVsdDQgPSBmYWxzZTsKKyAgICAgICAgICAgIGludCB1
cHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHdoaWxlICghaXNNdWx0NCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0V2lkdGggPDw9IDE7CisgICAgICAgICAgICAg
ICAgcmVxdWVzdEhlaWdodCA8PD0gMTsKKyAgICAgICAgICAgICAgICB1cHNhbXBsZUNvdW50Kys7
CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RXaWR0aCAlIDQgPT0gMCAmJiByZXF1ZXN0SGVp
Z2h0ICUgNCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaXNN
dWx0NCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGV2ZWxUb0ZldGNoID0gdXBzYW1wbGVDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZ2V0RGV2aWNlKCktPkNyZWF0ZVRleHR1cmUocmVxdWVzdFdpZHRoLCBy
ZXF1ZXN0SGVpZ2h0LCBsZXZlbFRvRmV0Y2ggKyAxLCBOVUxMLCBzZWxlY3RGb3JtYXQoZm9ybWF0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RQT09MX1NZU1RFTU1FTSwgJm5ld1RleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RF
UlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CiAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KKworICAgICAg
ICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7
CisgICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKICAgICB9CiAKICAgICBpZiAoaW1nLT5z
dXJmYWNlKSBpbWctPnN1cmZhY2UtPlJlbGVhc2UoKTsKQEAgLTMxNiwxOCArNDg0LDIzIEBAIHZv
aWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0wKICAgICBpbWctPndpZHRoID0g
d2lkdGg7CiAgICAgaW1nLT5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgaW1nLT5mb3JtYXQgPSBmb3Jt
YXQ7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBjcmVhdGVTdXJmYWNlKHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKIAotICAgIGlmIChwaXhlbHMgIT0gTlVMTCAmJiBu
ZXdTdXJmYWNlICE9IE5VTEwpCisgICAgaWYgKHBpeGVscyAhPSBOVUxMICYmIGltZy0+c3VyZmFj
ZSAhPSBOVUxMKQogICAgIHsKICAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDAp
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tl
ZCwgTlVMTCwgMCk7CiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvYWRJ
bWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICAgICAgbmV3
U3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tS
ZWN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKQEAgLTMzNiw5
ICs1MDksMzYgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTAogICAg
IG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0dXJlOjpzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCiB7Ci0gICAgaWYgKHdp
ZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsgeW9mZnNldCA+IGltZy0+aGVp
Z2h0KSByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgY3JlYXRlU3VyZmFjZSh3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7CisKKyAgICBpZiAocGl4ZWxzICE9IE5VTEwgJiYg
aW1nLT5zdXJmYWNlICE9IE5VTEwpCisgICAgeworICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2Nr
ZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9j
a2VkLCBOVUxMLCAwKTsKKworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVt
Y3B5KGxvY2tlZC5wQml0cywgcGl4ZWxzLCBpbWFnZVNpemUpOworICAgICAgICAgICAgaW1nLT5z
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBpbWctPmRpcnR5ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKK3sKKyAgICBpZiAo
d2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4gaW1nLT5o
ZWlnaHQpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKICAgICBI
UkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZCwgTlVMTCwgMCk7
CkBAIC0zNTIsNiArNTUyLDQ3IEBAIHZvaWQgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQgeG9mZnNl
dCwgR0wKICAgICB9CiAKICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit7Cisg
ICAgaWYgKHdpZHRoICsgeG9mZnNldCA+IGltZy0+d2lkdGggfHwgaGVpZ2h0ICsgeW9mZnNldCA+
IGltZy0+aGVpZ2h0KQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IGdldEZvcm1h
dCgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUkVDVCB1cGRhdGVSZWdpb247CisgICAgdXBk
YXRlUmVnaW9uLmxlZnQgPSB4b2Zmc2V0OworICAgIHVwZGF0ZVJlZ2lvbi5yaWdodCA9IHhvZmZz
ZXQgKyB3aWR0aDsKKyAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9mZnNldCArIGhlaWdodDsK
KyAgICB1cGRhdGVSZWdpb24udG9wID0geW9mZnNldDsKKworICAgIEQzRExPQ0tFRF9SRUNUIGxv
Y2tlZDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tl
ZCwgJnVwZGF0ZVJlZ2lvbiwgMCk7CisKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBpbnB1
dFBpdGNoID0gQ29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgZm9ybWF0KTsKKyAgICAgICAg
aW50IHJvd3MgPSBpbWFnZVNpemUgLyBpbnB1dFBpdGNoOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJvd3M7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KCh2b2lkKiko
KEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilw
aXhlbHMgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOworICAgICAgICB9CisgICAgICAg
IGltZy0+c3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIH0KKworICAgIGltZy0+ZGlydHkgPSB0
cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1
cmU6OmdldFRleHR1cmUoKQpAQCAtNDQyLDcgKzY4Myw3IEBAIGludCBUZXh0dXJlOjpsZXZlbENv
dW50KCkgY29uc3QKICAgICByZXR1cm4gbUJhc2VUZXh0dXJlID8gbUJhc2VUZXh0dXJlLT5HZXRM
ZXZlbENvdW50KCkgOiAwOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChDb250ZXh0ICpjb250
ZXh0KSA6IFRleHR1cmUoY29udGV4dCkKK1RleHR1cmUyRDo6VGV4dHVyZTJEKEdMdWludCBpZCkg
OiBUZXh0dXJlKGlkKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7CkBAIC00NjQsNiArNzA1LDExIEBAIEdMZW51bSBUZXh0dXJlMkQ6OmdldFRh
cmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7CiB9CiAKK0dMZW51bSBUZXh0
dXJlMkQ6OmdldEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdLmZv
cm1hdDsKK30KKwogLy8gV2hpbGUgT3BlbkdMIGRvZXNuJ3QgY2hlY2sgdGV4dHVyZSBjb25zaXN0
ZW5jeSB1bnRpbCBkcmF3LXRpbWUsIEQzRDkgcmVxdWlyZXMgYSBjb21wbGV0ZSB0ZXh0dXJlCiAv
LyBmb3IgcmVuZGVyLXRvLXRleHR1cmUgKHN1Y2ggYXMgQ29weVRleEltYWdlKS4gV2UgaGF2ZSBu
byB3YXkgb2Yga2VlcGluZyBpbmRpdmlkdWFsIGluY29uc2lzdGVudCBsZXZlbHMuCiAvLyBDYWxs
IHRoaXMgd2hlbiBhIHBhcnRpY3VsYXIgbGV2ZWwgb2YgdGhlIHRleHR1cmUgbXVzdCBiZSBkZWZp
bmVkIHdpdGggYSBzcGVjaWZpYyBmb3JtYXQsIHdpZHRoIGFuZCBoZWlnaHQuCkBAIC01MjIsNiAr
NzY4LDEzIEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0wKICAgICBU
ZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKIH0KIAordm9pZCBUZXh0dXJlMkQ6
OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSh3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJh
eVtsZXZlbF0pOworfQorCiB2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCiB7CiAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVsXS5zdXJmYWNlICE9IE5VTEwpOwpA
QCAtNTU5LDE3ICs4MTIsMzEgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2
ZWwsIAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFy
cmF5W2xldmVsXSk7Ci0gICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZt
SW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQogfQogCi12b2lkIFRleHR1cmUy
RDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNv
dXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQor
eworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2xl
dmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkK
IHsKICAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCkpCiAgICAgewogICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKICAgICAg
ICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwogICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgfQogCiAgICAgaWYgKHdpZHRoICE9IDAg
JiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCiAgICAgewpAQCAtNTkxLDcg
Kzg1OCw3IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEcKICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiB9CiAKLXZvaWQgVGV4
dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBS
ZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2Up
CiB7CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS53aWR0aCB8
fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCkKICAgICB7CkBA
IC02ODksNiArOTU2LDExIEBAIGJvb2wgVGV4dHVyZTJEOjppc0NvbXBsZXRlKCkgY29uc3QKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3JtYXQoKSk7Cit9CisKIC8vIENvbnN0
cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFn
ZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRl
eHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC04NzEsMTYgKzExNDMsMTcgQEAgdm9pZCBU
ZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiAgICAgfQogfQogCi1Db2xvcmJ1ZmZlciAqVGV4
dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorUmVuZGVyYnVmZmVyICpUZXh0
dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKHRhcmdldCAh
PSBHTF9URVhUVVJFXzJEKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7CiAgICAgfQogCiAgICAg
aWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCiAgICAgewotICAgICAgICBtQ29sb3JidWZm
ZXJQcm94eSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpOworICAg
ICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFRleHR1
cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCkpOworICAgICAgICBtQ29sb3JidWZmZXJQ
cm94eS0+YWRkUmVmKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OwpA
QCAtODk4LDcgKzExNzEsNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5k
ZXJUCiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotVGV4dHVyZUN1YmVNYXA6OlRleHR1
cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQorVGV4dHVyZUN1
YmVNYXA6OlRleHR1cmVDdWJlTWFwKEdMdWludCBpZCkgOiBUZXh0dXJlKGlkKQogewogICAgIG1U
ZXh0dXJlID0gTlVMTDsKIApAQCAtOTI3LDYgKzEyMDAsMTEgQEAgR0xlbnVtIFRleHR1cmVDdWJl
TWFwOjpnZXRUYXJnZXQoKSBjb25zdAogICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwog
fQogCitHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdDsKK30KKwogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAgc2V0SW1hZ2UoMCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKQEAgLTk1Nyw2ICsxMjM1LDEzIEBAIHZvaWQgVGV4dHVyZUN1
YmVNYXA6OnNldEltYWdlTmVnWihHTGludCAKICAgICBzZXRJbWFnZSg1LCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOwogfQogCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xl
bnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoKTsK
KworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSld
W2xldmVsXSk7Cit9CisKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoR0xlbnVtIGZh
Y2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBpbnQgZmFjZSA9IGZhY2VJbmRleChm
YWNlVGFyZ2V0KTsKQEAgLTk5NCw4ICsxMjc5LDE4IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bW1pdFJlY3QoR0xlbnVtIGYKIAogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIFRleHR1cmU6OnN1
YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVs
XSk7Ci0gICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1h
Z2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRS
ZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9
Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gZmFj
ZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKSkKKyAgICB7CisgICAgICAg
IGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIEdMIHRleHR1cmUgb2JqZWN0IGNvbXBsZXRlbmVz
cy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCkBAIC0xMDY0LDYg
KzEzNTksMTEgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wbGV0ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRGb3JtYXQoKSk7Cit9CisKIC8vIENv
bnN0cnVjdHMgYSBEaXJlY3QzRCA5IHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBp
bWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkg
KlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTEyNzgsNyArMTU3OCw3IEBA
IGJvb2wgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lVGV4dHVyZShHTGkKICAgICByZXR1cm4gIXRl
eHR1cmVPa2F5OwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIGZh
Y2UsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkKIHsKICAgICB1bnNpZ25l
ZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KGZhY2UpOwogCkBAIC0xMjg3LDYgKzE1ODcsMTAg
QEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSBmYQogICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUp
OwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7Cisg
ICAgfQogCiAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAKQEAgLTEzNDAsNyArMTY0NCw3
IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0Q3UKICAgICByZXR1cm4g
KFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5VTEw7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVN
YXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlT
dWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBS
ZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCiB7CiAgICAgR0xzaXplaSBzaXplID0gbUltYWdl
QXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0ud2lkdGg7CiAKQEAgLTEzNTYsNyArMTY2MCw3
IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0KICAgICB9CiAgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgZ2V0UmVuZGVyVGFyZ2V0KGZhY2UpOworICAgICAgICBuZWVk
UmVuZGVyVGFyZ2V0KCk7CiAgICAgfQogCiAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQpA
QCAtMTQ0MCwxOCArMTc0NCwxOSBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1h
cHMoKQogICAgIH0KIH0KIAotQ29sb3JidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0KQorUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0Q29s
b3JidWZmZXIoR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgKENvbG9yYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwogICAgIH0KIAogICAgIHVuc2ln
bmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CiAKICAgICBpZiAobUZhY2VQcm94aWVz
W2ZhY2VdID09IE5VTEwpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcg
VGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KTsKKyAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgVGV4dHVyZUNvbG9yYnVmZmVy
UHJveHkodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1GYWNlUHJveGllc1tmYWNlXS0+YWRkUmVm
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXTsKQEAgLTE0NzUsNiAr
MTc4MCwxNiBAQCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6VGV4dHVyCiAgICAg
QVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSk7CiB9CiAKK3ZvaWQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmFk
ZFJlZigpIGNvbnN0Cit7CisgICAgbVRleHR1cmUtPmFkZFJlZigpOworfQorCit2b2lkIFRleHR1
cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpyZWxlYXNlKCkgY29uc3QKK3sKKyAgICBtVGV4
dHVyZS0+cmVsZWFzZSgpOworfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTo6VGV4dHVy
ZUNvbG9yYnVmZmVyUHJveHk6OmdldFJlbmRlclRhcmdldCgpCiB7CiAgICAgaWYgKG1SZW5kZXJU
YXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKQEAgLTE0ODQsMTQgKzE3OTksMTkgQEAg
SURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmU6OlRleHR1cmVDb2xvcgogICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0OwogfQogCi1pbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6Omdl
dFdpZHRoKCkKK2ludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0V2lkdGgo
KSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZS0+Z2V0V2lkdGgoKTsKIH0KIAotaW50IFRl
eHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKQoraW50IFRleHR1cmU6
OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRIZWlnaHQoKSBjb25zdAogewogICAgIHJldHVy
biBtVGV4dHVyZS0+Z2V0SGVpZ2h0KCk7CiB9CiAKK0dMZW51bSBUZXh0dXJlOjpUZXh0dXJlQ29s
b3JidWZmZXJQcm94eTo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUt
PmdldEZvcm1hdCgpOworfQorCiB9CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24g
NjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsNiBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNzIENvbnRleHQ7CiBjbGFz
cyBCbGl0OwogCiBlbnVtCkBAIC0zNCwxMCArMzMsMTAgQEAgZW51bQogICAgIE1BWF9URVhUVVJF
X0xFVkVMUyA9IDEyICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKIH07CiAKLWNsYXNz
IFRleHR1cmUKK2NsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIHsKICAgcHVi
bGljOgotICAgIGV4cGxpY2l0IFRleHR1cmUoQ29udGV4dCAqY29udGV4dCk7CisgICAgZXhwbGlj
aXQgVGV4dHVyZShHTHVpbnQgaWQpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCkBAIC01
NiwxNSArNTUsMTkgQEAgY2xhc3MgVGV4dHVyZQogICAgIEdMdWludCBnZXRXaWR0aCgpIGNvbnN0
OwogICAgIEdMdWludCBnZXRIZWlnaHQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgR0xlbnVtIGdl
dEZvcm1hdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3QgPSAwOwogCiAgICAg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBDb2xvcmJ1
ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgUmVu
ZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwogCiAgICAgYm9vbCBpc0RpcnR5KCkgY29u
c3Q7CiAKKyAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0
YXRpY19jYXN0PEdMdWludD4oLTEpOyAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNy
ZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciBy
ZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCisKICAgcHJvdGVjdGVkOgogICAg
IGNsYXNzIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OwogICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJl
Q29sb3JidWZmZXJQcm94eTsKQEAgLTc0LDEwICs3NywxNCBAQCBjbGFzcyBUZXh0dXJlCiAgICAg
ICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJn
ZXQpOwogICAgICAgICAgICAgLy8gdGFyZ2V0IGlzIGEgMkQtbGlrZSB0ZXh0dXJlIHRhcmdldCAo
R0xfVEVYVFVSRV8yRCBvciBvbmUgb2YgdGhlIGN1YmUgZmFjZSB0YXJnZXRzKQogCisgICAgICAg
IHZpcnR1YWwgdm9pZCBhZGRSZWYoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2UoKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKIAotICAgICAgICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpOwotICAgICAgICB2
aXJ0dWFsIGludCBnZXRIZWlnaHQoKTsKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OwogCiAgICAgICBwcml2YXRlOgogICAgICAg
ICBUZXh0dXJlICptVGV4dHVyZTsKQEAgLTEwMiwxMyArMTA5LDEwIEBAIGNsYXNzIFRleHR1cmUK
ICAgICBzdGF0aWMgRDNERk9STUFUIHNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0KTsKICAgICBp
bnQgaW1hZ2VQaXRjaChjb25zdCBJbWFnZSYgaW1nKSBjb25zdDsKIAotICAgIEdMZW51bSBtTWlu
RmlsdGVyOwotICAgIEdMZW51bSBtTWFnRmlsdGVyOwotICAgIEdMZW51bSBtV3JhcFM7Ci0gICAg
R0xlbnVtIG1XcmFwVDsKLQogICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7Ci0gICAgdm9pZCBzdWJJbWFnZShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICBib29sIHN1YkltYWdlKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKKyAgICBib29sIHN1YkltYWdlQ29t
cHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgSW1hZ2UgKmltZyk7CiAKICAgICB2b2lkIG5lZWRSZW5kZXJUYXJnZXQoKTsKIApA
QCAtMTI4LDQ1ICsxMzIsNzIgQEAgY2xhc3MgVGV4dHVyZQogCiAgICAgQmxpdCAqZ2V0QmxpdHRl
cigpOwogCisgICAgaW50IGxldmVsQ291bnQoKSBjb25zdDsKKwogICAgIHVuc2lnbmVkIGludCBt
V2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1IZWlnaHQ7Ci0KLSAgICBpbnQgbGV2ZWxDb3VudCgp
IGNvbnN0OworICAgIEdMZW51bSBtTWluRmlsdGVyOworICAgIEdMZW51bSBtTWFnRmlsdGVyOwor
ICAgIEdMZW51bSBtV3JhcFM7CisgICAgR0xlbnVtIG1XcmFwVDsKIAogICBwcml2YXRlOgogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKIAotICAgIENvbnRleHQgKm1Db250
ZXh0OworICAgIHZvaWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworCisgICAgdm9pZCBsb2FkQWxwaGFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlSW1h
Z2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUltYWdlRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAg
ICB2b2lkIGxvYWRSR0JVQnl0ZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0I1NjVJbWFnZURh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0
OworICAgIHZvaWQgbG9hZFJHQkFVQnl0ZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQTQ0
NDRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBs
b2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICptQmFzZVRleHR1cmU7
IC8vIFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVkIGNsYXNzIGlzIGFzc3VtZWQg
dG8gb3duIGEgc3Ryb25nIHBvaW50ZXIuCi0gICAgYm9vbCBtRGlydHlNZXRhRGF0YTsKLSAgICBi
b29sIG1Jc1JlbmRlcmFibGU7CiAKICAgICBib29sIG1EaXJ0eTsKKyAgICBib29sIG1EaXJ0eU1l
dGFEYXRhOworICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKIAotICAgIHZvaWQgbG9hZEltYWdlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlU3VyZmFjZShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgSW1hZ2UgKmltZyk7
CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogewogICBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgVGV4dHVyZTJEKENvbnRleHQgKmNvbnRleHQpOworICAgIGV4cGxpY2l0IFRl
eHR1cmUyRChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmUyRCgpOwogCiAgICAgR0xlbnVtIGdl
dFRhcmdldCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdDsKIAogICAgIHZv
aWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVz
c2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
OwogICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAg
IHZvaWQgY29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIg
KnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsKKyAgICB2b2lkIGNvcHlT
dWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgKnNvdXJjZSk7CiAKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29s
IGlzQ29tcHJlc3NlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
cygpOwogCi0gICAgdmlydHVhbCBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRh
cmdldCk7CisgICAgdmlydHVhbCBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0
YXJnZXQpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmUyRCk7CkBAIC0xNzQsMzAgKzIwNSwyOSBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4
dHVyZQogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJlKCk7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGly
ZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogCiAgICAgdmly
dHVhbCBib29sIGRpcnR5SW1hZ2VEYXRhKCkgY29uc3Q7CiAKKyAgICBib29sIHJlZGVmaW5lVGV4
dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CiAgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAK
ICAgICBJbWFnZSBtSW1hZ2VBcnJheVtNQVhfVEVYVFVSRV9MRVZFTFNdOwogCiAgICAgSURpcmVj
dDNEVGV4dHVyZTkgKm1UZXh0dXJlOwogCi0gICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkgKm1D
b2xvcmJ1ZmZlclByb3h5OwotCi0gICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwot
Ci0gICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7CiB9OwogCiBjbGFz
cyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiB7CiAgIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBUZXh0dXJlQ3ViZU1hcChDb250ZXh0ICpjb250ZXh0KTsKKyAgICBleHBsaWNpdCBUZXh0
dXJlQ3ViZU1hcChHTHVpbnQgaWQpOwogCiAgICAgflRleHR1cmVDdWJlTWFwKCk7CiAKICAgICBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9p
ZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CkBAIC0yMDYsMTUgKzIzNiwx
OSBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgdm9pZCBzZXRJ
bWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBzZXRJbWFnZU5lZ1oo
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMpOworCiAgICAgdm9pZCBzdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpOwotICAgIHZvaWQgY29weUltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOwotICAgIHZvaWQgY29weVN1
YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJl
bmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0g
ZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7Cisg
ICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsKIAogICAgIGJvb2wgaXND
b21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIENvbG9yYnVmZmVy
ICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwpAQCAtMjIyLDYgKzI1Niw3IEBA
IGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRl
clRhcmdldChHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBkaXJ0eUltYWdlRGF0
YSgpIGNvbnN0OwogCkBAIC0yNDEsOSArMjc2LDcgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBw
dWJsaWMgVGV4dHVyZQogCiAgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICptVGV4dHVyZTsKIAot
ICAgIFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5ICptRmFjZVByb3hpZXNbNl07Ci0KLSAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Cisg
ICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07CiB9OwogfQogCkluZGV4OiBBTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvbGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgaWYgKHRhcmdldCAh
PSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAm
JiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTE4OSw3
ICsxODksMTUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRhcmdldCA9PSBHTF9GUkFNRUJVRkZFUikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUmVhZEZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFIHx8IHRhcmdldCA9PSBHTF9GUkFN
RUJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kRHJh
d0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01NTksNyArNTY3LDcgQEAgR0xlbnVt
IF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYm
IHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtNTY4
LDcgKzU3NiwxNSBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpOworICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICBpZiAo
dGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZnJhbWVidWZmZXItPmNvbXBsZXRlbmVz
cygpOwogICAgICAgICB9CkBAIC03MjAsMjIgKzczNiwxMDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xD
b21wcmVzc2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWds
OjpJc1RleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZl
bCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZl
bCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVp
Z2h0IDwgMCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4g
MCAmJiAhZ2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUgPCAw
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxl
dmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1Bv
dzIoaGVpZ2h0KSkgfHwgYm9yZGVyICE9IDAgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Cisg
ICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8
IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CisgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICBpZiAod2lkdGggIT0g
aGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZHRoID4g
KGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChib3JkZXIgIT0gMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7IC8vIHVsdGltYXRlbHkgd2UgZG9uJ3Qgc3VwcG9ydCBjb21wcmVz
c2VkIHRleHR1cmVzCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlz
IGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRl
Q29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisgICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgfQogICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkBAIC03NjMsMTcgKzg2NCw5NSBAQCB2b2lk
IF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJECiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgKGxldmVs
ID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIo
aGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKKyAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlv
ZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IAorICAgICAgICAgICAgKGxl
dmVsID4gMCAmJiAhZ2w6OmlzUG93Mih3aWR0aCkpIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1Bv
dzIoaGVpZ2h0KSkgfHwgaW1hZ2VTaXplIDwgMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHhv
ZmZzZXQgIT0gMCB8fCB5b2Zmc2V0ICE9IDApCisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0
ID09IDAgfHwgZGF0YSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAv
LyBUaGUgdGV4dHVyZSBiZWluZyBvcGVyYXRlZCBvbiBpcyBub3QgYSBjb21wcmVzc2VkIHRleHR1
cmUuCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0
J3MgYXMgdGhvdWdoIHRoZSBmb3JtYXQgc3dpdGNoIGhhcyBmYWlsZWQuCisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6
ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAlIDQgIT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRoaXMgcG9pbnQsIGJlY2F1
c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBleGlzdCB1bmxlc3Mg
RFhUMSB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPmlzQ29tcHJlc3Nl
ZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKCkp
IHx8IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0
ZXh0dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1
cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworCisg
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPmlzQ29tcHJlc3NlZCgp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKCkpIHx8
IAorICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0
dXJlLT5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwg
ZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpAQCAtODM0LDYgKzEwMTMs
OCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9SR0I6CiAgICAgICAg
ICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDogIC8vIENvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaGVyZSwg
YnV0IGlmIHRoZXkgYXJlIHVuc3VwcG9ydGVkIGFsdG9nZXRoZXIsCisgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogLy8gYSBkaWZmZXJlbnQgZXJyb3IgaXMg
Z2VuZXJhdGVkIHRoYW4gb3RoZXJ3aXNlLiBUaGF0IGlzIGhhbmRsZWQgYmVsb3cuCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODQ4LDggKzEwMjksMzEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRG
cmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGludGVybmFs
Zm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHwgCisgICAgICAgICAg
ICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzQ29t
cHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1
ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKCktPmdldFNhbXBsZXMoKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpDb2xvcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAtODU4LDYgKzEwNjIsMTEgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICAgICAgfQpAQCAtODcwLDYg
KzEwNzksMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNz
ZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZQpAQCAtOTE2LDggKzExMzAsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1h
Z2UyRChHTGVudQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5n
ZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0Q29s
b3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC05MjcsNiArMTE1MSwxMSBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3Vi
SW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4
dHVyZVRhcmdldCh0YXJnZXQpKQpAQCAtOTM4LDYgKzExNjcsMTEgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb3B5VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdl
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC0xNTU5LDcgKzE3OTMs
OCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyCiAKICAgICB0cnkK
ICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgfHwgcmVuZGVyYnVm
ZmVydGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKCh0YXJnZXQgIT0gR0xf
RlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFy
Z2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB8fCByZW5kZXJi
dWZmZXJ0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtMTU2OCw5ICsxODAz
LDIwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgIEdMdWludCBmcmFt
ZWJ1ZmZlckhhbmRsZSA9IDA7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJB
TUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFt
ZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
SGFuZGxlKCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRG
cmFtZWJ1ZmZlckhhbmRsZSgpID09IDAgfHwgIWZyYW1lYnVmZmVyKQorICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CkBAIC0xNjA0LDcgKzE4NTAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0g
R0xfRlJBTUVCVUZGRVIpCisgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYg
dGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURf
RlJBTUVCVUZGRVJfQU5HTEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0xNjM2LDYgKzE4ODIsMTEgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRleHRhcmdl
dCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6CkBAIC0xNjY3LDkgKzE5MTgsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVy
KCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAg
ICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7CisgICAgICAgICAgICBpZiAo
dGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsK
KyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFt
ZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0Zy
YW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0
LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCB8fCAhZnJhbWVidWZm
ZXIpCisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZm
ZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KQEAgLTE3NzAsNiArMjAzMiwxMSBAQCB2b2lk
IF9fc3RkY2FsbCBnbEdlbmVyYXRlTWlwbWFwKEdMZW51bSB0CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICB0ZXh0dXJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTIyMjUsMTQgKzI0OTIsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAg
aWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJV
RkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQor
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7CisgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0g
Y29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKQEAgLTIyNDAsMTYgKzI1MjIsMTYgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogICAgICAgICAgICAgc3dpdGNoIChh
dHRhY2htZW50KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SX0FU
VEFDSE1FTlQwOiAgICAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQt
PmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAgICAg
IGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRDb2xvcmJ1
ZmZlckhhbmRsZSgpOyAKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFu
ZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKCk7IAogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAK
LSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVy
KCktPmdldERlcHRoYnVmZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwor
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6ICAgCi0gICAgICAgICAgICAgICAg
YXR0YWNobWVudFR5cGUgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVm
ZmVyVHlwZSgpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBjb250ZXh0LT5n
ZXRGcmFtZWJ1ZmZlcigpLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXJIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ZGVmYXVsdDogcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBA
IC0yNTA4LDcgKzI3OTAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFOgogICAgICAg
ICAgICAgICAgIGlmIChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29s
b3JidWZmZXIqPihyZW5kZXJidWZmZXIpLT5nZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXIt
PmdldFN0b3JhZ2UoKSktPmdldFJlZFNpemUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKQEAgLTI1MTgsNyArMjgwMCw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGUKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVm
ZmVyKS0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdl
dEdyZWVuU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgewpAQCAtMjUyOCw3ICsyODEwLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZQogICAgICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZF
Ul9CTFVFX1NJWkU6CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1
ZmZlcigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEJsdWVTaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3Ji
dWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldEJsdWVTaXplKCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CkBA
IC0yNTM4LDcgKzI4MjAsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CiAgICAg
ICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpD
b2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldEFscGhhU2l6ZSgpOworICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVm
ZmVyLT5nZXRTdG9yYWdlKCkpLT5nZXRBbHBoYVNpemUoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKQEAgLTI1NDgsNyArMjgzMCw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGUKICAgICAgICAgICAg
ICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRToKICAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyYnVmZmVyLT5pc0RlcHRoYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkRlcHRoYnVmZmVyKj4ocmVu
ZGVyYnVmZmVyKS0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZmZXIqPihyZW5kZXJidWZmZXItPmdldFN0b3JhZ2Uo
KSktPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjU1OCwxMyArMjg0MCwyNSBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVO
REVSQlVGRkVSX1NURU5DSUxfU0laRToKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVy
LT5pc1N0ZW5jaWxidWZmZXIoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
ciktPmdldFN0ZW5jaWxTaXplKCk7CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxnbDo6U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlci0+Z2V0U3RvcmFnZSgpKS0+
Z2V0U3RlbmNpbFNpemUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FOR0xFOgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAh
PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldFNhbXBsZXMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtMjk5Myw3ICsz
Mjg3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbgogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0gY29udGV4dC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgICAgICAgICAgY29uc3QgZ2w6OkF0dHJp
YnV0ZVN0YXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKQEAgLTMw
MTMsNyArMzMwNyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliZnYoR0x1aW4K
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1Ob3JtYWxp
emVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXI7
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1
ZmZlci5pZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdM
X0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7ICsraSkKQEAgLTMwNDYsNyArMzM0MCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVy
dGV4QXR0cmliaXYoR0x1aW4KICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGVTdGF0
ZSBhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKyAg
ICAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCiAgICAgICAgICAgICB7CkBAIC0zMDY2LDcgKzMzNjAsNyBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldFZlcnRleEF0dHJpYml2KEdMdWluCiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRy
aWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubUJvdW5k
QnVmZmVyOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZm
ZXIuaWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9D
VVJSRU5UX1ZFUlRFWF9BVFRSSUI6CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA0OyArK2kpCkBAIC0zNDgxLDYgKzM3NzUsMTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4
ZWxzKEdMaW50IHgsIEdMaQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBnbDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6
CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAgICB7CkBAIC0zNTIxLDEwICsz
ODI2LDEwIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKHYKICAgICB9
CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
dm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBH
THNpemVpIGhlaWdodCA9ICVkKSIsCi0gICAgICAgICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgVFJBQ0UoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXpl
aSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lk
dGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgdHJ5CiAgICAgewpAQCAt
MzU0MywxMiArMzg0OCwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0xlCiAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgogICAgICAgICAgIGNhc2UgR0xfUkdCNTY1
OgogICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6CisgICAgICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAgICAg
ICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IHdpZHRoID4gZ2w6
Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSB8fCBoZWlnaHQgPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9T
SVpFKQorICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lkdGggPiBnbDo6
TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJ
WkUgfHwgc2FtcGxlcyA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtMzU1Nyw3ICszODY1LDEzIEBAIHZvaWQg
X19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhh
bmRsZSgpID09IDApCisgICAgICAgICAgICBpZiAoc2FtcGxlcyA+IGNvbnRleHQtPmdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdM
dWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKKyAgICAgICAg
ICAgIGlmIChoYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMzU2NSwx
NSArMzg3OSwyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlCiAg
ICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkRlcHRoYnVmZmVyKHdpZHRoLCBoZWlnaHQpKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6
RGVwdGhidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE0OgogICAgICAgICAgICAgICBjYXNlIEdM
X1JHQjVfQTE6CiAgICAgICAgICAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OkNvbG9yYnVmZmVyKHdpZHRoLCBoZWln
aHQsIGludGVybmFsZm9ybWF0KSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGdsOjpDb2xvcmJ1ZmZlcih3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFJlbmRlcmJ1ZmZlcihuZXcgZ2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCkp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3IGds
OjpTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKG5ldyBnbDo6RGVw
dGhTdGVuY2lsYnVmZmVyKHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAgLTM1ODYsNiArMzkwNSwxMSBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlCiAgICAgfQogfQogCit2b2lkIF9fc3RkY2Fs
bCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworfQorCiB2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZUNvdmVyYWdlKEdMY2xhbXBm
IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQogewogICAgIFRSQUNFKCIoR0xjbGFtcGYgdmFsdWUg
PSAlZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBpbnZlcnQpOwpAQCAtMzk1OCw2
ICs0MjgyLDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2Vk
IHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAg
ICB9CkBAIC0zOTcxLDYgKzQzMDcsMTkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8
fAorICAgICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAtNDE0Niw2ICs0NDk1LDEx
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJn
ZXQodGFyZ2V0KSkKQEAgLTQxNTcsNiArNDUxMSwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAg
aWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZQpAQCAtNDk2NSw3ICs1MzI0LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKEdMdQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xfVFJVRSks
IHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXpl
ZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5OTgsNiArNTM1Nyw1NCBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZpZXdwb3J0KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlckFOR0xFKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEs
IEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGlu
dCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVs
ZCBtYXNrLCBHTGVudW0gZmlsdGVyKQoreworICAgIFRSQUNFKCIoR0xpbnQgc3JjWDAgPSAlZCwg
R0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQgc3JjWDEgPSAlZCwgR0xpbnQgc3JjWTEgPSAlZCwgIgor
ICAgICAgICAgICJHTGludCBkc3RYMCA9ICVkLCBHTGludCBkc3RZMCA9ICVkLCBHTGludCBkc3RY
MSA9ICVkLCBHTGludCBkc3RZMSA9ICVkLCAiCisgICAgICAgICAgIkdMYml0ZmllbGQgbWFzayA9
IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAweCVYKSIsCisgICAgICAgICAgc3JjWDAsIHNyY1kwLCBz
cmNYMSwgc3JjWDEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBzd2l0Y2ggKGZpbHRlcikKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfTkVBUkVTVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0g
c3JjWTAgIT0gZHN0WTEgLSBkc3RZMCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJTY2Fs
aW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSA9PSBj
b250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNlIGFuZCBkZXN0aW5hdGlv
biBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIp
OworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNY
MCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2sp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIHZvaWQg
X19zdGRjYWxsIGdsVGV4SW1hZ2UzRE9FUyhHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKIHsKQEAgLTUw
MjcsNiArNTQzNCw3IEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUK
ICAgICBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uIGdsRXh0ZW5zaW9uc1tdID0KICAgICB7CiAgICAg
ICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKKyAgICAgICAgeyJnbEJsaXRGcmFtZWJ1ZmZlckFO
R0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xCbGl0RnJh
bWVidWZmZXJBTkdMRX0sCiAgICAgfTsKIAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNp
emVvZihnbEV4dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxMSArMTQ0LDEzIEBA
IEVYUE9SVFMKICAgICBnbFZpZXdwb3J0ICAgICAgICAgICAgICAgICAgICAgIEAxNDIKIAogICAg
IDsgRXh0ZW5zaW9ucwotICAgIGdsVGV4SW1hZ2UzRE9FUwkJCQkJQDE0MworICAgIGdsVGV4SW1h
Z2UzRE9FUyAgICAgICAgICAgICAgICAgQDE0MworICAgIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUg
ICAgICAgICAgQDE0OQorICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUg
QDE1MAogICAgIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwotICAgIGdsQ3JlYXRlQ29udGV4dAkJ
CQkJQDE0NCBOT05BTUUKLSAgICBnbERlc3Ryb3lDb250ZXh0CQkJCUAxNDUgTk9OQU1FCi0gICAg
Z2xNYWtlQ3VycmVudAkJCQkJQDE0NiBOT05BTUUKLSAgICBnbEdldEN1cnJlbnRDb250ZXh0CQkJ
CUAxNDcgTk9OQU1FCisgICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5P
TkFNRQorICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05BTUUKKyAg
ICBnbE1ha2VDdXJyZW50ICAgICAgICAgICAgICAgICAgIEAxNDYgTk9OQU1FCisgICAgZ2xHZXRD
dXJyZW50Q29udGV4dCAgICAgICAgICAgICBAMTQ3IE5PTkFNRQogICAgIGdsR2V0UHJvY0FkZHJl
c3MgICAgICAgICAgICAgICAgQDE0OCBOT05BTUUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjE3LDEwICsyMTcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxSZWZDb3VudE9iamVjdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlc291cmNl
TWFuYWdlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuXFNoYWRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjk5LDEwICsz
MDcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLlxSZWZDb3VudE9iamVjdC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLlxSZW5kZXJidWZmZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVzb3VyY2VNYW5hZ2VyLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFNoYWRlci5o
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCShyZXZpc2lvbiA2NjYx
MSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2
ICsxMSw3IEBACiAKICNkZWZpbmUgR0xfQVBJQ0FMTAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5j
cHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDQ5IEBAIEdMc2l6ZWkgQ29tcHV0ZVBpdGNo
KEdMc2l6ZWkgd2lkdGgsIEdMZW4KICAgICByZXR1cm4gKHJhd1BpdGNoICsgYWxpZ25tZW50IC0g
MSkgJiB+KGFsaWdubWVudCAtIDEpOwogfQogCitHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkUGl0
Y2goR0xzaXplaSB3aWR0aCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkK
KyAgICB7CisgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEFTU0VSVCh3
aWR0aCAlIDQgPT0gMCk7CisKKyAgICByZXR1cm4gOCAqIHdpZHRoIC8gNDsKK30KKworR0xzaXpl
aSBDb21wdXRlQ29tcHJlc3NlZFNpemUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gOCAqIChHTHNpemVpKWNlaWwoKGZs
b2F0KXdpZHRoIC8gNC4wZikgKiAoR0xzaXplaSljZWlsKChmbG9hdCloZWlnaHQgLyA0LjBmKTsK
K30KKworYm9vbCBJc0NvbXByZXNzZWQoR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBpZihmb3JtYXQg
PT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAorICAgICAgIGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCiAvLyBSZXR1cm5zIHRoZSBzaXplLCBpbiBieXRlcywgb2YgYSBzaW5nbGUgdGV4ZWwg
aW4gYW4gSW1hZ2UKIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQogewpAQCAtMTk2LDYgKzIzOSw3IEBAIGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBm
b3JtYXQsIEdMZW4KICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNp
emVvZih1bnNpZ25lZCBjaGFyKSAqIDI7CiAgICAgICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAg
ICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiAzOwogICAgICAgICAgIGNhc2UgR0xf
UkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogNDsKKyAgICAg
ICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFy
KSAqIDQ7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKQEAgLTIyOCw2ICsyNzIsNyBAQCBib29sIENoZWNrVGV4dHVyZUZvcm1hdFR5
cGUoR0xlbnVtIGZvcm1hCiAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7CiAgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CiAgICAgICAg
ICAgY2FzZSBHTF9SR0I6CiAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKICAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKQEAgLTU5OSwxMiArNjQ0LDMxIEBAIEQzREZPUk1BVCBDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KEdMZW4KICAgICBzd2l0Y2ggKGZvcm1hdCkKICAgICB7CiAgICAgICBj
YXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOiAgICAgICAgICAgICAgcmV0dXJu
IEQzREZNVF9BOFI4RzhCODsKKyAgICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CiAgICAgICBjYXNl
IEdMX1JHQjU2NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsKKyAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7CiAgICAg
ICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVY
ODogICAgICAgcmV0dXJuIEQzREZNVF9EMjRTODsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6ICAgICAgIAorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQz
REZNVF9EMjRTODsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBE
M0RGTVRfQThSOEc4Qjg7CiAgICAgfQogfQogCitHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlz
YW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBE
M0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gdHlwZTsKK30KKworRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNh
bXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCit7CisgICAgaWYgKHNhbXBsZXMg
PD0gMSkKKyAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsKK30KKwogfQpJbmRleDog
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJH
TEVTdjIvdXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKIAogI2Rl
ZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIv
Z2wyZXh0Lmg+CiAjaW5jbHVkZSA8ZDNkOS5oPgogCiBuYW1lc3BhY2UgZ2wKQEAgLTI4LDYgKzI5
LDkgQEAgaW50IEFsbG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKgogCiBpbnQgQ29t
cHV0ZVBpeGVsU2l6ZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiBHTHNpemVpIENvbXB1
dGVQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
YWxpZ25tZW50KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRQaXRjaChHTHNpemVpIHdpZHRo
LCBHTGVudW0gZm9ybWF0KTsKK0dMc2l6ZWkgQ29tcHV0ZUNvbXByZXNzZWRTaXplKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KTsKK2Jvb2wgSXNDb21wcmVzc2Vk
KEdMZW51bSBmb3JtYXQpOwogYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpOwogYm9vbCBJc1RleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiBib29sIENoZWNrVGV4
dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOwpAQCAtNTYsNiArNjAs
OCBAQCB1bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0CiBib29sIENvbnZl
cnRQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNv
dW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQUklNSVRJVkVUWVBFICpkM2RQcmlt
aXRpdmVUeXBlLCBpbnQgKmQzZFByaW1pdGl2ZUNvdW50KTsKIEQzREZPUk1BVCBDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOworRDNETVVMVElTQU1QTEVfVFlQRSBHZXRN
dWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpOworR0xzaXplaSBHZXRT
YW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwogCiB9
CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NjYxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDktMDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSb2xs
IEFOR0xFIHVuZGVyIHdlYmtpdCB0byByNDAyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTAwNAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKToKKworMjAxMC0wOC0zMSAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJvbGwgQU5HTEUgdW5k
ZXIgd2Via2l0IHRvIHI0MDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1MDA0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QpOiBVcGRhdGUgdGhlIGNvZGUgdG8gdXNlIG5ld2VyIEFOR0xFIGlu
dGVyZmFjZS4KKwogMjAxMC0wOC0zMSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJl
dmlzaW9uIDY2NjExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2ltcG9y
dCAiQmxvY2tFeGNlcHRpb25zLmgiCiAKLSNpbmNsdWRlICJBTkdMRS9SZXNvdXJjZUxpbWl0cy5o
IgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKQEAgLTE4NiwyMyArMTg1LDIzIEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogICAgIFRCdWlsdEluUmVzb3VyY2Ug
QU5HTEVSZXNvdXJjZXM7CiAKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzID0g
MDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMu
bWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9y
cyA9IDA7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgQU5HTEVSZXNv
dXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMu
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMubWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMu
bWF4VGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heFRleHR1cmVJ
bWFnZVVuaXRzKTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
ID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMp
OworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMgPSAwOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CiAKICAgICAvLyBBbHdh
eXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5tYXhEcmF3QnVm
ZmVycyA9IDE7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIAog
ICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKICAgICAK
</data>
<flag name="commit-queue"
          id="55190"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66237</attachid>
            <date>2010-09-01 10:55:54 -0700</date>
            <delta_ts>2010-09-02 10:16:14 -0700</delta_ts>
            <desc>revised patch: fix an issue in the changelog</desc>
            <filename>r402.patch</filename>
            <type>text/plain</type>
            <size>366237</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IEFOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY2NjExKQorKysgQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDYxIEBACisyMDEwLTA5LTAxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbCBBTkdMRSB1
bmRlciB3ZWJraXQgdG8gcjQwMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDUwMDQKKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTEVTMi9nbDJleHQuaDoKKyAgICAgICAgKiBpbmNs
dWRlL0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbmNsdWRl
L0dMU0xBTkcvU2hhZGVyTGFuZy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9CYXNlVHlwZXMu
aDoKKyAgICAgICAgKGdldFByZWNpc2lvblN0cmluZyk6CisgICAgICAgIChnZXRCYXNpY1N0cmlu
Zyk6CisgICAgICAgIChJc1NhbXBsZXIpOgorICAgICAgICAoZ2V0UXVhbGlmaWVyU3RyaW5nKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHA6CisgICAgICAgIChCdWlsdElu
Q29uc3RhbnRzKToKKyAgICAgICAgKElkZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9Jbml0aWFsaXplLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVE
bGwuY3BwOgorICAgICAgICAoSW5pdFByb2Nlc3MpOgorICAgICAgICAoRGV0YWNoUHJvY2Vzcyk6
CisgICAgICAgIChJbml0VGhyZWFkKToKKyAgICAgICAgKERldGFjaFRocmVhZCk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1l
ZGlhdGUuY3BwOgorICAgICAgICAoR2V0SGlnaGVyUHJlY2lzaW9uKToKKyAgICAgICAgKFRJbnRl
cm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgpOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6c2V0QWdn
cmVnYXRlT3BlcmF0b3IpOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkQ29tbWEpOgorICAg
ICAgICAoVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAoVEludGVybUJpbmFy
eTo6cHJvbW90ZSk6CisgICAgICAgIChDb21wYXJlU3RydWN0KToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5jcHA6CisgICAgICAgIChUT3V0cHV0R0xTTDo6d3JpdGVGdW5jdGlv
blBhcmFtZXRlcnMpOgorICAgICAgICAoVE91dHB1dEdMU0w6OnZpc2l0VW5hcnkpOgorICAgICAg
ICAoVE91dHB1dEdMU0w6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5jcHA6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVyKToKKyAgICAgICAg
KHNoOjpPdXRwdXRITFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6
dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2
ZUxvb3ApOgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwOgorICAgICAgICAoVFBhcnNlQ29udGV4
dDo6Y29uc3RydWN0b3JFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnNhbXBs
ZXJFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayk6
CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24pOgorICAgICAgICAoVFBhcnNl
Q29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0cnVjdG9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KToK
KyAgICAgICAgKEZyZWVQYXJzZUNvbnRleHRJbmRleCk6CisgICAgICAgIChHZXRHbG9iYWxQYXJz
ZUNvbnRleHQpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuaDoKKyAgICAgICAg
KFRQb29sQWxsb2NhdG9yOjp0SGVhZGVyOjp0SGVhZGVyKToKKyAgICAgICAgKHBvb2xfYWxsb2Nh
dG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChwb29sX2FsbG9jYXRvcjo6ZGVhbGxvY2F0ZSk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAgICAoU2hJbml0aWFs
aXplKToKKyAgICAgICAgKFNoRmluYWxpemUpOgorICAgICAgICAoU2hJbml0QnVpbHRJblJlc291
cmNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAo
VFR5cGU6OmdldFN0cnVjdFNpemUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoVFZhcmlhYmxlOjpzZXRRdWFsaWZpZXIpOgorICAgICAgICAqIHNyYy9j
b21waWxlci9UeXBlcy5oOgorICAgICAgICAoVFR5cGU6OlRUeXBlKToKKyAgICAgICAgKFRUeXBl
OjpnZXRCYXNpY1R5cGUpOgorICAgICAgICAoVFR5cGU6OnNldEJhc2ljVHlwZSk6CisgICAgICAg
IChUVHlwZTo6Z2V0UHJlY2lzaW9uKToKKyAgICAgICAgKFRUeXBlOjpzZXRQcmVjaXNpb24pOgor
ICAgICAgICAoVFR5cGU6OmdldFF1YWxpZmllcik6CisgICAgICAgIChUVHlwZTo6c2V0UXVhbGlm
aWVyKToKKyAgICAgICAgKFRUeXBlOjpnZXROb21pbmFsU2l6ZSk6CisgICAgICAgIChUVHlwZTo6
c2V0Tm9taW5hbFNpemUpOgorICAgICAgICAoVFR5cGU6OmlzTWF0cml4KToKKyAgICAgICAgKFRU
eXBlOjpzZXRNYXRyaXgpOgorICAgICAgICAoVFR5cGU6OmlzQXJyYXkpOgorICAgICAgICAoVFR5
cGU6OmdldEFycmF5U2l6ZSk6CisgICAgICAgIChUVHlwZTo6c2V0QXJyYXlTaXplKToKKyAgICAg
ICAgKFRUeXBlOjpnZXRNYXhBcnJheVNpemUpOgorICAgICAgICAoVFR5cGU6OnNldE1heEFycmF5
U2l6ZSk6CisgICAgICAgIChUVHlwZTo6Y2xlYXJBcnJheW5lc3MpOgorICAgICAgICAoVFR5cGU6
OnNldEFycmF5SW5mb3JtYXRpb25UeXBlKToKKyAgICAgICAgKFRUeXBlOjpnZXRBcnJheUluZm9y
bWF0aW9uVHlwZSk6CisgICAgICAgIChUVHlwZTo6aXNWZWN0b3IpOgorICAgICAgICAoVFR5cGU6
OmlzU2NhbGFyKToKKyAgICAgICAgKFRUeXBlOjpzZXRTdHJ1Y3QpOgorICAgICAgICAoVFR5cGU6
OmdldFR5cGVOYW1lKToKKyAgICAgICAgKFRUeXBlOjpzZXRUeXBlTmFtZSk6CisgICAgICAgIChU
VHlwZTo6aXNGaWVsZCk6CisgICAgICAgIChUVHlwZTo6Z2V0RmllbGROYW1lKToKKyAgICAgICAg
KFRUeXBlOjpzZXRGaWVsZE5hbWUpOgorICAgICAgICAoVFR5cGU6OmdldEJhc2ljU3RyaW5nKToK
KyAgICAgICAgKFRUeXBlOjpnZXRQcmVjaXNpb25TdHJpbmcpOgorICAgICAgICAoVFR5cGU6Omdl
dFF1YWxpZmllclN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcubDoKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZy55OgorICAgICAgICAqIHNyYy9jb21waWxlci9p
bnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1Ob2RlOjpnZXRMaW5lKToKKyAgICAgICAg
KFRJbnRlcm1Ob2RlOjpzZXRMaW5lKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0QXNUeXBl
ZCk6CisgICAgICAgIChUSW50ZXJtVHlwZWQ6OnNldFR5cGUpOgorICAgICAgICAoVEludGVybVR5
cGVkOjpnZXRUeXBlKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6Z2V0VHlwZVBvaW50ZXIpOgor
ICAgICAgICAoVEludGVybVR5cGVkOjpnZXRCYXNpY1R5cGUpOgorICAgICAgICAoVEludGVybVR5
cGVkOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRQcmVjaXNpb24p
OgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXROb21pbmFsU2l6ZSk6CisgICAgICAgIChUSW50
ZXJtVHlwZWQ6OmlzTWF0cml4KToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6aXNBcnJheSk6Cisg
ICAgICAgIChUSW50ZXJtVHlwZWQ6OmlzVmVjdG9yKToKKyAgICAgICAgKFRJbnRlcm1UeXBlZDo6
aXNTY2FsYXIpOgorICAgICAgICAoVEludGVybVR5cGVkOjpnZXRCYXNpY1N0cmluZyk6CisgICAg
ICAgIChUSW50ZXJtVHlwZWQ6OmdldFF1YWxpZmllclN0cmluZyk6CisgICAgICAgIChUSW50ZXJt
U3ltYm9sOjpnZXRJZCk6CisgICAgICAgIChUSW50ZXJtU3ltYm9sOjpnZXRTeW1ib2wpOgorICAg
ICAgICAoVEludGVybU9wZXJhdG9yOjpzZXRPcCk6CisgICAgICAgIChUSW50ZXJtQmluYXJ5Ojpz
ZXRMZWZ0KToKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldFJpZ2h0KToKKyAgICAgICAgKFRJ
bnRlcm1CaW5hcnk6OmdldExlZnQpOgorICAgICAgICAoVEludGVybUJpbmFyeTo6Z2V0UmlnaHQp
OgorICAgICAgICAoVEludGVybVVuYXJ5OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKFRJbnRlcm1V
bmFyeTo6Z2V0T3BlcmFuZCk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpnZXRBc0FnZ3Jl
Z2F0ZSk6CisgICAgICAgIChUSW50ZXJtQWdncmVnYXRlOjpnZXRTZXF1ZW5jZSk6CisgICAgICAg
IChUSW50ZXJtQWdncmVnYXRlOjpzZXROYW1lKToKKyAgICAgICAgKFRJbnRlcm1BZ2dyZWdhdGU6
OmdldE5hbWUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0VXNlckRlZmluZWQpOgor
ICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6aXNVc2VyRGVmaW5lZCk6CisgICAgICAgIChUSW50
ZXJtQWdncmVnYXRlOjpnZXRRdWFsaWZpZXIpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6
c2V0T3B0aW1pemUpOgorICAgICAgICAoVEludGVybUFnZ3JlZ2F0ZTo6c2V0RGVidWcpOgorICAg
ICAgICAoVEludGVybVNlbGVjdGlvbjo6Z2V0Q29uZGl0aW9uKToKKyAgICAgICAgKFRJbnRlcm1T
ZWxlY3Rpb246OmdldFRydWVCbG9jayk6CisgICAgICAgIChUSW50ZXJtU2VsZWN0aW9uOjpnZXRG
YWxzZUJsb2NrKToKKyAgICAgICAgKFRJbnRlcm1TZWxlY3Rpb246OmdldEFzU2VsZWN0aW9uTm9k
ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3BhcnNlQ29uc3QuY3BwOgorICAgICAgICAoVENv
bnN0VHJhdmVyc2VyOjpUQ29uc3RUcmF2ZXJzZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvYXRvbS5jOgorICAgICAgICAoSW5pdEF0b21UYWJsZSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9hdG9tLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9jb21waWxlLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuYzoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmM6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYzoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvcGFyc2VyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
cmVwcm9jZXNzLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVy
LmM6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmg6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaDoKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMuYzoKKyAgICAgICAgKE5ld1N5bWJvbCk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zeW1ib2xzLmg6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYzoKKyAgICAgICAgKFJlY29yZFRv
a2VuKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5oOgorICAg
ICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OkRp
c3BsYXkpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojppbml0aWFsaXplKToKKyAgICAgICAgKGVn
bDo6RGlzcGxheTo6dGVybWluYXRlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRlRGV2
aWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSk6CisgICAg
ICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5
OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRDb21w
cmVzc2VkVGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOgor
ICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5jcHA6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OlN1cmZhY2UpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSk6CisgICAgICAgIChlZ2w6OlN1cmZh
Y2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmFw
cGx5RmxpcFN0YXRlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZVJlY29yZGVkU3Rh
dGUpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSk6CisgICAg
ICAgIChlZ2w6OlN1cmZhY2U6OnN3YXApOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5o
OgorICAgICAgICAqIHNyYy9saWJFR0wvbGliRUdMLmNwcDoKKyAgICAgICAgKiBzcmMvbGliRUdM
L2xpYkVHTC52Y3Byb2o6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcDoKKyAgICAg
ICAgKGdsOjpCbGl0OjpzZXRWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OkJsaXQ6OnNldFBp
eGVsU2hhZGVyKToKKyAgICAgICAgKGdsOjpCbGl0OjpzZXRGb3JtYXRDb252ZXJ0U2hhZGVycyk6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwOgorICAgICAgICAoZ2w6OkJ1ZmZl
cjo6QnVmZmVyKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0J1ZmZlci5oOgorICAgICAgICAq
IHNyYy9saWJHTEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29udGV4dDo6Q29udGV4
dCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJrQWxsU3RhdGVEaXJ0
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnNldFZlcnRl
eEF0dHJpYlN0YXRlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlVGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpD
b250ZXh0OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRlbGV0ZVNoYWRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRCdWZmZXIpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6OmdldFNoYWRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UHJvZ3Jh
bSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRSZWFkRnJh
bWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmluZEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5k
VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXApOgor
ICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJp
bmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnVzZVByb2dyYW0pOgorICAg
ICAgICAoZ2w6OkNvbnRleHQ6OnNldEZyYW1lYnVmZmVyWmVybyk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRU
ZXh0dXJlMkQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKToKKyAg
ICAgICAgKGdsOjpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjphcHBseVJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBw
bHlTdGF0ZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlJbmRleEJ1ZmZlcik6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Y2xl
YXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmZpbmlzaCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6Zmx1c2gpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzU2hhZGVyTW9kZWwzKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmRldGFjaEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoVGV4dHVyZSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGV0YWNoRnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmRldGFjaFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
SW5jb21wbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25T
dHJpbmcpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0Lmg6CisgICAgICAgIChnbDo6QXR0cmlidXRlU3RhdGU6
OkF0dHJpYnV0ZVN0YXRlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNw
cDoKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjps
b29rdXBSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1
ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKToKKyAgICAg
ICAgKGdsOjpGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJh
bWVidWZmZXI6OmRldGFjaFRleHR1cmUpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpkZXRh
Y2hSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQpOgor
ICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwpOgorICAgICAgICAoZ2w6
OkZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCk6CisgICAgICAgIChnbDo6RnJhbWVi
dWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwpOgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVy
OjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmdldERlcHRoYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlcik6CisgICAg
ICAgIChnbDo6RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUpOgorICAgICAgICAoZ2w6OkZyYW1l
YnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKToKKyAgICAgICAgKGdsOjpGcmFtZWJ1ZmZl
cjo6aGFzU3RlbmNpbCk6CisgICAgICAgIChnbDo6RnJhbWVidWZmZXI6OmlzTXVsdGlzYW1wbGUp
OgorICAgICAgICAoZ2w6OkZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAoZ2w6
OkRlZmF1bHRGcmFtZWJ1ZmZlcjo6RGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpG
cmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcyk6CisgICAgICAgIChnbDo6RGVmYXVsdEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaDoK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwOgorICAgICAgICAoZ2w6OlByb2dy
YW06OlByb2dyYW0pOgorICAgICAgICAoZ2w6OlByb2dyYW06On5Qcm9ncmFtKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRldGFj
aFNoYWRlcik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6bGlua1ZhcnlpbmdzKToKKyAgICAgICAg
KGdsOjpQcm9ncmFtOjpsaW5rKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAg
ICAgICAoZ2w6OlByb2dyYW06OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmFkZFJl
Zik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0UmVmQ291bnQpOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OmdldER4Vmlld3BvcnRMb2NhdGlvbik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0OjpSZWZDb3VudE9iamVjdCk6CisgICAg
ICAgIChnbDo6UmVmQ291bnRPYmplY3Q6On5SZWZDb3VudE9iamVjdCk6CisgICAgICAgIChnbDo6
UmVmQ291bnRPYmplY3Q6OmFkZFJlZik6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3Q6OnJl
bGVhc2UpOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldCk6
CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oOiBBZGRlZC4KKyAgICAg
ICAgKGdsOjpSZWZDb3VudE9iamVjdDo6aWQpOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0
QmluZGluZ1BvaW50ZXI6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIpOgorICAgICAgICAo
Z2w6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6On5SZWZDb3VudE9iamVjdEJpbmRpbmdQ
b2ludGVyKToKKyAgICAgICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpnZXQp
OgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmlkKToKKyAgICAg
ICAgKGdsOjpSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpvcGVyYXRvciAhICk6CisgICAg
ICAgIChnbDo6QmluZGluZ1BvaW50ZXI6OnNldCk6CisgICAgICAgIChnbDo6QmluZGluZ1BvaW50
ZXI6OmdldCk6CisgICAgICAgIChnbDo6QmluZGluZ1BvaW50ZXI6Om9wZXJhdG9yIC0+ICk6Cisg
ICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAoZ2w6OlJl
bmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6On5S
ZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcik6
CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyOjppc0RlcHRoYnVmZmVyKToKKyAgICAgICAgKGds
OjpSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0RGVw
dGhTdGVuY2lsKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFdpZHRoKToKKyAgICAg
ICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVm
ZmVyOjpnZXRGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlcjo6Z2V0RDNERm9ybWF0
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFNlcmlhbCk6CisgICAgICAgIChnbDo6
UmVuZGVyYnVmZmVyOjpzZXRTdG9yYWdlKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjpSZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3Rv
cmFnZTo6aXNDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6
aXNEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNTdGVu
Y2lsYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRSZW5kZXJU
YXJnZXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldERlcHRoU3RlbmNp
bCk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgpOgorICAgICAg
ICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEhlaWdodCk6CisgICAgICAgIChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6c2V0U2l6ZSk6CisgICAgICAgIChnbDo6UmVuZGVyYnVmZmVyU3Rv
cmFnZTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRE
M0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNhbXBsZXMp
OgorICAgICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFNlcmlhbCk6CisgICAgICAg
IChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwpOgorICAgICAgICAoZ2w6OkNv
bG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29sb3JidWZmZXI6OmlzQ29s
b3JidWZmZXIpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRSZWRTaXplKToKKyAgICAg
ICAgKGdsOjpDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKToKKyAgICAgICAgKGdsOjpDb2xvcmJ1
ZmZlcjo6Z2V0Qmx1ZVNpemUpOgorICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpnZXRBbHBoYVNp
emUpOgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVy
KToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5jaWxidWZmZXI6On5EZXB0aFN0ZW5jaWxidWZmZXIp
OgorICAgICAgICAoZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6CisgICAg
ICAgIChnbDo6RGVwdGhTdGVuY2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIpOgorICAgICAgICAo
Z2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKToKKyAgICAgICAgKGdsOjpEZXB0
aFN0ZW5jaWxidWZmZXI6OmdldFN0ZW5jaWxTaXplKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5j
aWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCk6CisgICAgICAgIChnbDo6RGVwdGhidWZmZXI6OkRl
cHRoYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6fkRlcHRoYnVmZmVyKToKKyAg
ICAgICAgKGdsOjpEZXB0aGJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVw
dGhidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RlbmNpbGJ1ZmZlcjo6
U3RlbmNpbGJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RlbmNpbGJ1ZmZlcjo6flN0ZW5jaWxidWZm
ZXIpOgorICAgICAgICAoZ2w6OlN0ZW5jaWxidWZmZXI6OmlzRGVwdGhidWZmZXIpOgorICAgICAg
ICAoZ2w6OlN0ZW5jaWxidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgICogc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXI6OmdldFN0
b3JhZ2UpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcDogQWRk
ZWQuCisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpSZXNvdXJjZU1hbmFnZXIpOgorICAg
ICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6flJlc291cmNlTWFuYWdlcik6CisgICAgICAgIChn
bDo6UmVzb3VyY2VNYW5hZ2VyOjphZGRSZWYpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdl
cjo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVCdWZmZXIp
OgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAg
KGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoZ2w6OlJlc291
cmNlTWFuYWdlcjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2Vy
OjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6ZGVs
ZXRlQnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNoYWRlcik6
CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAg
KGdsOjpSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlJlc291
cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1h
bmFnZXI6OmdldEJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRTaGFk
ZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Z2V0VGV4dHVyZSk6CisgICAgICAg
IChnbDo6UmVzb3VyY2VNYW5hZ2VyOjpnZXRQcm9ncmFtKToKKyAgICAgICAgKGdsOjpSZXNvdXJj
ZU1hbmFnZXI6OmdldFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChnbDo6UmVzb3VyY2VNYW5hZ2Vy
OjpzZXRSZW5kZXJidWZmZXIpOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKGdsOjpSZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4
dHVyZUFsbG9jYXRpb24pOgorICAgICAgICAoZ2w6OlJlc291cmNlTWFuYWdlcjo6Y2hlY2tSZW5k
ZXJidWZmZXJBbGxvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAg
ICAgIChnbDo6U2hhZGVyOjpTaGFkZXIpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6YWRkUmVmKToK
KyAgICAgICAgKGdsOjpTaGFkZXI6OnJlbGVhc2UpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6Z2V0
UmVmQ291bnQpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6cGFyc2VWYXJ5aW5ncyk6CisgICAgICAg
IChnbDo6VmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoZ2w6OkZyYWdtZW50
U2hhZGVyOjpGcmFnbWVudFNoYWRlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
aDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OkltYWdlOjpJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6Z2V0QmxpdHRlcik6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
c2VsZWN0Rm9ybWF0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkQWxwaGFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmxvYWRMdW1pbmFuY2VJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6Omxv
YWRMdW1pbmFuY2VBbHBoYUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJH
QlVCeXRlSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCNTY1SW1hZ2VE
YXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCQVVCeXRlSW1hZ2VEYXRhKToKKyAg
ICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCQTQ0NDRJbWFnZURhdGEpOgorICAgICAgICAoZ2w6
OlRleHR1cmU6OmxvYWRSR0JBNTU1MUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
bG9hZEJHUkFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNyZWF0ZVN1cmZhY2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
OjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldEZvcm1h
dCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAg
ICAoZ2w6OlRleHR1cmUyRDo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c3Vi
SW1hZ2VDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlJbWFnZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1
cmUyRDo6aXNDb21wcmVzc2VkKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdldENvbG9yYnVm
ZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXApOgorICAg
ICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpnZXRGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1
cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpzdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4
dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6
OmdldENvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZm
ZXJQcm94eTo6YWRkUmVmKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZm
ZXJQcm94eTo6cmVsZWFzZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVm
ZmVyUHJveHk6OmdldFdpZHRoKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29sb3Ji
dWZmZXJQcm94eTo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlQ29s
b3JidWZmZXJQcm94eTo6Z2V0Rm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1RleHR1
cmUuaDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHA6CisgICAgICAgICog
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGli
R0xFU3YyLnZjcHJvajoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL21haW4uaDoKKyAgICAgICAg
KiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHA6CisgICAgICAgIChnbDo6Q29tcHV0ZUNvbXBy
ZXNzZWRQaXRjaCk6CisgICAgICAgIChnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKToKKyAgICAg
ICAgKGdsOjpJc0NvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OkNvbXB1dGVQaXhlbFNpemUpOgor
ICAgICAgICAoZ2w6OkNoZWNrVGV4dHVyZUZvcm1hdFR5cGUpOgorICAgICAgICAoZXMyZHg6OkNv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQpOgorICAgICAgICAoZXMyZHg6OkdldFNhbXBsZXNGcm9t
TXVsdGlzYW1wbGVUeXBlKToKKyAgICAgICAgKGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9t
U2FtcGxlcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaDoKKwogMjAxMC0w
OC0xNyAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4KSW5kZXg6IEFOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NjY2MTEpCisrKyBBTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAJCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBV
bmZvbGRTZWxlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi87IH07
CiAJCUZCMzlENzIzMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlENzIwMTIwMTAzMjAwMDA4OEU2
OSAvKiBnbHNsYW5nLmNwcCAqLzsgfTsKIAkJRkIzOUQ3MjQxMjAxMDMyMDAwMDg4RTY5IC8qIGds
c2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZCMzlENzIyMTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07Ci0J
CUZCMzlENzZEMTIwMTEwRkMwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkUxMjAwRjNFNjAwMDg4
RTY5IC8qIFJlc291cmNlTGltaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQlGQjM5RDc2RTEyMDExMEZDMDAwODhFNjkgLyogU2hhZGVyTGFuZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkIzOUQyQkYx
MjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApA
QCAtMTc3LDcgKzE3Niw2IEBACiAJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRT
ZWxlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2Vs
ZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkUxMjAwRjM1QTAw
MDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRo
ID0gVW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjZG
MTIwMEYzNUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMkJFMTIw
MEYzRTYwMDA4OEU2OSAvKiBSZXNvdXJjZUxpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gUmVzb3VyY2VMaW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkIzOUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkIzOUQ3MjAxMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZ2xzbGFuZy5jcHA7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9BTkdMRS9nbHNsYW5nLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJRkIzOUQ3MjExMjAxMDMyMDAwMDg4RTY5IC8qIGdsc2xhbmdfdGFiLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGdsc2xhbmdfdGFiLmg7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9BTkdMRS9nbHNsYW5nX3RhYi5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwpAQCAtNDEzLDcgKzQxMSw2IEBACiAJCUZCMzlEMkJEMTIwMEYzRTYwMDA4OEU2OSAv
KiBHTFNMQU5HICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQlGQjM5RDJCRTEyMDBGM0U2MDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCAqLywKIAkJCQlG
QjM5RDJCRjEyMDBGM0U2MDAwODhFNjkgLyogU2hhZGVyTGFuZy5oICovLAogCQkJKTsKIAkJCW5h
bWUgPSBHTFNMQU5HOwpAQCAtNDI3LDcgKzQyNCw2IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
LQkJCQlGQjM5RDc2RDEyMDExMEZDMDAwODhFNjkgLyogUmVzb3VyY2VMaW1pdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZCMzlENzZFMTIwMTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKQEAgLTQ2MSw3ICs0NTcsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSBGQjM5RDA3MzEyMDBFRDkyMDAwODhFNjkgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJBTkdMRSIgKi87CiAJCQljb21wYXRpYmls
aXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNo
OwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJ
CQkJRW5nbGlzaCwKSW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAkocmV2aXNpb24gNjY2MTEpCisrKyBB
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIy
LDEyIEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWX0VYVCAgICAgICAgICAgICAgICAgICAgICAweDgzNjgKICNlbmRp
ZgogCisvKiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICovCisjaWZuZGVmIEdMX0VY
VF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDgzRjAKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAweDgzRjEK
KyNlbmRpZgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNpb24gdG9rZW5zCiAg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zNTEsNiArMzU3LDI1IEBAIHR5cGVkZWYgdm9pZCogR0xl
Z2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEFOR0xFIGV4dGVu
c2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAqLworI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdM
X1JFQURfRlJBTUVCVUZGRVJfQU5HTEUgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9BTkdMRSAgICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEUgMHg4Q0E2IC8vIGFsaWFzIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcK
KyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFIDB4OENBQQorI2VuZGlm
CisKKy8qIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisjaWZuZGVmIEdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1Q
TEVTX0FOR0xFICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0FOR0xFICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFY
X1NBTVBMRVNfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU3CisjZW5kaWYK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBFbmQgb2YgZXh0ZW5zaW9uIHRva2Vucywgc3RhcnQg
b2YgY29ycmVzcG9uZGluZyBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKQEAgLTYyMyw2ICs2NDgsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xN
VUxUSURSQQogI2RlZmluZSBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBfMTBfUkVWIDEKICNl
bmRpZgogCisvKiBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICovCisjaWZuZGVmIEdM
X0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyNkZWZpbmUgR0xfRVhUX3RleHR1cmVfY29t
cHJlc3Npb25fZHh0MSAxCisjZW5kaWYKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0
ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzY2LDYgKzc5NiwzNCBA
QCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFNUQVJUVElMCiB0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElOR1FDT01QUk9DKSAoR0xiaXRmaWVsZCBwcmVzZXJ2
ZU1hc2spOwogI2VuZGlmCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogQU5HTEUgZXh0ZW5zaW9u
IGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9ibGl0ICovCisjaWZuZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKKyNkZWZpbmUgR0xf
QU5HTEVfZnJhbWVidWZmZXJfYmxpdCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUgKEdMaW50IHNy
Y1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZp
bHRlcik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQkxJVEZSQU1F
QlVGRkVSQU5HTEVQUk9DKSAoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdM
aW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCisK
Ky8qIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisjaWZuZGVmIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSAoR0xlbnVt
IHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVBTkdMRVBS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2Vu
ZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBBTkdMRS9pbmNsdWRl
L0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9pbmNsdWRlL0dM
U0xBTkcvUmVzb3VyY2VMaW1pdHMuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9pbmNsdWRl
L0dMU0xBTkcvUmVzb3VyY2VMaW1pdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMSArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaWZuZGVmIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURf
Ci0jZGVmaW5lIF9SRVNPVVJDRV9MSU1JVFNfSU5DTFVERURfCi0KLXN0cnVjdCBUQnVpbHRJblJl
c291cmNlCi17Ci0JaW50IG1heFZlcnRleEF0dHJpYnM7Ci0JaW50IG1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzOwotCWludCBtYXhWYXJ5aW5nVmVjdG9yczsKLQlpbnQgbWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHM7Ci0JaW50IG1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHM7Ci0JaW50IG1heFRl
eHR1cmVJbWFnZVVuaXRzOwotCWludCBtYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOwotCWludCBt
YXhEcmF3QnVmZmVyczsKLX07Ci0jZW5kaWYgLy8gX1JFU09VUkNFX0xJTUlUU19JTkNMVURFRF8K
SW5kZXg6IEFOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
QU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gNjY2MTEpCisrKyBB
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDgg
KzYsNiBAQAogI2lmbmRlZiBfQ09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXwogI2RlZmluZSBf
Q09NUElMRVJfSU5URVJGQUNFX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiUmVzb3VyY2VMaW1pdHMu
aCIKLQogLy8KIC8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGludGVyZmFjZSBi
ZXR3ZWVuIGFuIE9HTCBkcml2ZXIKIC8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFnZSBjb21waWxl
ci4KQEAgLTE5LDEwICsxNywxMiBAQCBleHRlcm4gIkMiIHsKIC8vCiAvLyBEcml2ZXIgbXVzdCBj
YWxsIHRoaXMgZmlyc3QsIG9uY2UsIGJlZm9yZSBkb2luZyBhbnkgb3RoZXIKIC8vIGNvbXBpbGVy
IG9wZXJhdGlvbnMuCisvLyBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFs
dWUgaXMgbm9uemVybywgZWxzZSB6ZXJvLgogLy8KIGludCBTaEluaXRpYWxpemUoKTsKIC8vCiAv
LyBEcml2ZXIgc2hvdWxkIGNhbGwgdGhpcyBhdCBzaHV0ZG93bi4KKy8vIElmIHRoZSBmdW5jdGlv
biBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1ZSBpcyBub256ZXJvLCBlbHNlIHplcm8uCiAvLwog
aW50IFNoRmluYWxpemUoKTsKIC8vCkBAIC00NCw2ICs0NCwzMiBAQCB0eXBlZGVmIGVudW0gewog
fSBFU2hTcGVjOwogCiAvLworLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIHJl
c291cmNlcyAoY29uc3RhbnRzIGFuZCBleHRlbnNpb25zKS4KKy8vIFRoZSBuYW1lcyBmb3IgdGhl
c2UgcmVzb3VyY2VzIGhhcyBiZWVuIG9idGFpbmVkIGJ5IHN0cmlwcGluZyBnbF8vR0xfLgorLy8K
K3R5cGVkZWYgc3RydWN0Cit7CisgICAgLy8gQ29uc3RhbnRzLgorICAgIGludCBNYXhWZXJ0ZXhB
dHRyaWJzOworICAgIGludCBNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yczsKKyAgICBpbnQgTWF4VmFy
eWluZ1ZlY3RvcnM7CisgICAgaW50IE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzOworICAgIGlu
dCBNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOworICAgIGludCBNYXhUZXh0dXJlSW1hZ2VV
bml0czsKKyAgICBpbnQgTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yczsKKyAgICBpbnQgTWF4RHJh
d0J1ZmZlcnM7CisKKyAgICAvLyBFeHRlbnNpb25zLgorICAgIC8vIFNldCB0byAxIHRvIGVuYWJs
ZSB0aGUgZXh0ZW5zaW9uLCBlbHNlIDAuCisgICAgaW50IE9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
czsKK30gVEJ1aWx0SW5SZXNvdXJjZTsKKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVz
b3VyY2VzIHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCisvLwordm9pZCBTaEluaXRCdWls
dEluUmVzb3VyY2UoVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzKTsKKworLy8KIC8vIE9wdGlt
aXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLgogLy8KIHR5cGVkZWYgZW51bSB7CkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3Jj
L2NvbXBpbGVyL0Jhc2VUeXBlcy5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21w
aWxlci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQCBlbnVtIFRQ
cmVjaXNpb24KICAgICBFYnBIaWdoLAogfTsKIAotX19pbmxpbmUgY29uc3QgY2hhciogZ2V0UHJl
Y2lzaW9uU3RyaW5nKFRQcmVjaXNpb24gcCkKK2lubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNp
b25TdHJpbmcoVFByZWNpc2lvbiBwKQogewogICAgIHN3aXRjaChwKQogICAgIHsKQEAgLTQ3LDcg
KzQ3LDIyIEBAIGVudW0gVEJhc2ljVHlwZQogICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8g
c2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PwogfTsKIAotX19pbmxpbmUgYm9vbCBJc1NhbXBsZXIoVEJh
c2ljVHlwZSB0eXBlKQoraW5saW5lIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKFRCYXNpY1R5
cGUgdCkKK3sKKyAgICBzd2l0Y2ggKHQpCisgICAgeworICAgIGNhc2UgRWJ0Vm9pZDogICAgICAg
ICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAg
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNh
bXBsZXIyRCI7ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAg
cmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRWJ0U3RydWN0OiAg
ICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsgICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OiAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBJc1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQogewogICAgIHJldHVybiB0eXBl
ID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsKIH0K
QEAgLTEwMCw3ICsxMTUsNyBAQCBlbnVtIFRRdWFsaWZpZXIKIC8vCiAvLyBUaGlzIGlzIGp1c3Qg
Zm9yIGRlYnVnIHByaW50IG91dCwgY2FycmllZCBhbG9uZyB3aXRoIHRoZSBkZWZpbml0aW9ucyBh
Ym92ZS4KIC8vCi1fX2lubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFF1YWxp
ZmllciBxKQoraW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVy
IHEpCiB7CiAgICAgc3dpdGNoKHEpCiAgICAgewpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNSArNDcyLDE1IEBAIHN0YXRpYyBUU3RyaW5nIEJ1
aWx0SW5Db25zdGFudHMoY29uc3QgVEIKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKLSAgICBz
IDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4QXR0cmlicyA9ICIgPDwgcmVzb3VyY2VzLm1heFZl
cnRleEF0dHJpYnMgPDwgIjsiOwotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzIDw8ICI7
IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VmVydGV4QXR0cmlicyA9ICIgPDwgcmVzb3Vy
Y2VzLk1heFZlcnRleEF0dHJpYnMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9ICIgPDwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0
b3JzIDw8ICI7IjsKIAotICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhWYXJ5aW5nVmVjdG9ycyA9
ICIgPDwgcmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25z
dCBpbnQgZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKLSAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4VGV4dHVy
ZUltYWdlVW5pdHMgPSAiIDw8IHJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA8PCAiOyI7
Ci0gICAgcyA8PCAiY29uc3QgaW50IGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAiIDw8
IHJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIDw8ICI7IjsKLSAgICBzIDw8ICJj
b25zdCBpbnQgZ2xfTWF4RHJhd0J1ZmZlcnMgPSAiIDw8IHJlc291cmNlcy5tYXhEcmF3QnVmZmVy
cyA8PCAiOyI7CisgICAgcyA8PCAiY29uc3QgaW50IGdsX01heFZhcnlpbmdWZWN0b3JzID0gIiA8
PCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0IGlu
dCBnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAgICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0IGludCBnbF9NYXhUZXh0dXJlSW1h
Z2VVbml0cyA9ICIgPDwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzIDw8ICI7IjsKKyAg
ICBzIDw8ICJjb25zdCBpbnQgZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9ICIgPDwgcmVz
b3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPDwgIjsiOworICAgIHMgPDwgImNvbnN0
IGludCBnbF9NYXhEcmF3QnVmZmVycyA9ICIgPDwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzIDw8
ICI7IjsKIAogICAgIHJldHVybiBzLnN0cigpOwogfQpAQCAtNTkxLDIzICs1OTEsMjMgQEAgdm9p
ZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdlIGxhbmd1YQogICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7CiAKICAgICAvLyBNYXAgbGFu
Z3VhZ2Utc3BlY2lmaWMgb3BlcmF0b3JzLgotICAgIHN3aXRjaChsYW5ndWFnZSkgew0KLSAgICBj
YXNlIEVTaExhbmdWZXJ0ZXg6DQotICAgICAgICBicmVhazsNCi0gICAgY2FzZSBFU2hMYW5nRnJh
Z21lbnQ6DQotICAgICAgICAvL3N5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAg
IEVPcERQZHgpOyAgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uDQotICAg
ICAgICAvL3N5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgIEVPcERQZHkpOyAg
ICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uDQotICAgICAgICAvL3N5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7ICAvLyBPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uDQotICAgICAgICBicmVhazsNCi0gICAgZGVmYXVs
dDogYnJlYWs7DQotICAgIH0NCisgICAgc3dpdGNoKGxhbmd1YWdlKSB7CisgICAgY2FzZSBFU2hM
YW5nVmVydGV4OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVTaExhbmdGcmFnbWVudDoKKyAg
ICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR4IiwgICBFT3BEUGR4KTsg
ICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgorICAgICAgICAvL3N5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHkiLCAgIEVPcERQZHkpOyAgICAvLyBPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCisgICAgICAgIC8vc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiZndpZHRoIiwgRU9wRndpZHRoKTsgIC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBleHRlbnNpb24KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
fQogCiAgICAgLy8gRmluYWxseSBhZGQgcmVzb3VyY2Utc3BlY2lmaWMgdmFyaWFibGVzLgogICAg
IHN3aXRjaChsYW5ndWFnZSkgewogICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OiB7CiAgICAgICAg
ICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAg
IFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0LCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2Vz
Lm1heERyYXdCdWZmZXJzKTsKKyAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6ZShyZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwogICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCAgICBmcmFnRGF0YSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIF9JTklUSUFMSVpFX0lOQ0xVREVE
XwogI2RlZmluZSBfSU5JVElBTElaRV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvUmVz
b3VyY2VMaW1pdHMuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL0NvbW1vbi5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIK
SW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5jcHAJKHJldmlzaW9uIDY2NjExKQor
KysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02LDcyICs2LDg4IEBACiAKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCiAK
LSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVHbG9iYWxzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgogCiBPU19UTFNJbmRleCBU
aHJlYWRJbml0aWFsaXplSW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKIAogYm9vbCBJbml0
UHJvY2VzcygpCiB7CiAgICAgaWYgKFRocmVhZEluaXRpYWxpemVJbmRleCAhPSBPU19JTlZBTElE
X1RMU19JTkRFWCkgewotCQkvLwotCQkvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50LgotCQkvLwor
ICAgICAgICAvLworICAgICAgICAvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50LgorICAgICAgICAv
LwogICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgfQogCiAgICAgVGhyZWFkSW5pdGlhbGl6
ZUluZGV4ID0gT1NfQWxsb2NUTFNJbmRleCgpOwogCiAgICAgaWYgKFRocmVhZEluaXRpYWxpemVJ
bmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewogICAgICAgICBhc3NlcnQoMCAmJiAiSW5p
dFByb2Nlc3MoKTogRmFpbGVkIHRvIGFsbG9jYXRlIFRMUyBhcmVhIGZvciBpbml0IGZsYWciKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICB9CiAKIAogICAgIGlmICghSW5pdGlhbGl6
ZVBvb2xJbmRleCgpKSB7CiAgICAgICAgIGFzc2VydCgwICYmICJJbml0UHJvY2VzcygpOiBGYWls
ZWQgdG8gaW5pdGFsaXplIGdsb2JhbCBwb29sIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9
CisgICAgfQogCiAgICAgaWYgKCFJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKSkgewogICAg
ICAgICBhc3NlcnQoMCAmJiAiSW5pdFByb2Nlc3MoKTogRmFpbGVkIHRvIGluaXRhbGl6ZSBwYXJz
ZSBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgfQogCi0JSW5pdFRo
cmVhZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJbml0VGhyZWFkKCk7CiB9CiAK
K2Jvb2wgRGV0YWNoUHJvY2VzcygpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKworICAg
IGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgc3VjY2VzcyA9IERldGFjaFRocmVhZCgpOworCisgICAg
aWYgKCFGcmVlUGFyc2VDb250ZXh0SW5kZXgoKSkKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwor
CisgICAgRnJlZVBvb2xJbmRleCgpOworCisgICAgT1NfRnJlZVRMU0luZGV4KFRocmVhZEluaXRp
YWxpemVJbmRleCk7CisgICAgVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNf
SU5ERVg7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KIAogYm9vbCBJbml0VGhyZWFkKCkKIHsK
LQkvLworICAgIC8vCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyByZS1lbnRyYW50Ci0JLy8KKyAg
ICAvLwogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpIHsKLQkJYXNzZXJ0KDAgJiYgIkluaXRUaHJlYWQoKTogUHJvY2VzcyBoYXNuJ3QgYmVlbiBp
bml0YWxpc2VkLiIpOworICAgICAgICBhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBQcm9jZXNz
IGhhc24ndCBiZWVuIGluaXRhbGlzZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9Cisg
ICAgfQogCiAgICAgaWYgKE9TX0dldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCkgIT0g
MCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLQlJbml0aWFsaXplR2xvYmFsUG9vbHMoKTsKKyAg
ICBJbml0aWFsaXplR2xvYmFsUG9vbHMoKTsKIAotCWlmICghSW5pdGlhbGl6ZUdsb2JhbFBhcnNl
Q29udGV4dCgpKQorICAgIGlmICghSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIU9TX1NldFRMU1ZhbHVlKFRocmVhZEluaXRp
YWxpemVJbmRleCwgKHZvaWQgKikxKSkgewotCQlhc3NlcnQoMCAmJiAiSW5pdFRocmVhZCgpOiBV
bmFibGUgdG8gc2V0IGluaXQgZmxhZy4iKTsKKyAgICAgICAgYXNzZXJ0KDAgJiYgIkluaXRUaHJl
YWQoKTogVW5hYmxlIHRvIHNldCBpbml0IGZsYWcuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
LQl9CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLQogYm9vbCBEZXRhY2hUaHJlYWQo
KQogewogICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CkBAIC03OSw0MiArOTUsMjEgQEAgYm9vbCBE
ZXRhY2hUaHJlYWQoKQogICAgIGlmIChUaHJlYWRJbml0aWFsaXplSW5kZXggPT0gT1NfSU5WQUxJ
RF9UTFNfSU5ERVgpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0JLy8KLQkvLyBGdW5jdGlvbiBp
cyByZS1lbnRyYW50IGFuZCB0aGlzIHRocmVhZCBtYXkgbm90IGhhdmUgYmVlbiBpbml0YWxpc2Vk
LgotCS8vCisgICAgLy8KKyAgICAvLyBGdW5jdGlvbiBpcyByZS1lbnRyYW50IGFuZCB0aGlzIHRo
cmVhZCBtYXkgbm90IGhhdmUgYmVlbiBpbml0YWxpc2VkLgorICAgIC8vCiAgICAgaWYgKE9TX0dl
dFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCkgIT0gMCkgewogICAgICAgICBpZiAoIU9T
X1NldFRMU1ZhbHVlKFRocmVhZEluaXRpYWxpemVJbmRleCwgKHZvaWQgKikwKSkgewotCQkJYXNz
ZXJ0KDAgJiYgIkRldGFjaFRocmVhZCgpOiBVbmFibGUgdG8gY2xlYXIgaW5pdCBmbGFnLiIpOwor
ICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIkRldGFjaFRocmVhZCgpOiBVbmFibGUgdG8gY2xlYXIg
aW5pdCBmbGFnLiIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotCQl9CisgICAgICAg
IH0KIAotCQlGcmVlR2xvYmFsUG9vbHMoKTsKLQotCQlpZiAoIUZyZWVQYXJzZUNvbnRleHQoKSkK
KyAgICAgICAgaWYgKCFGcmVlUGFyc2VDb250ZXh0KCkpCiAgICAgICAgICAgICBzdWNjZXNzID0g
ZmFsc2U7Ci0JfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgRGV0YWNoUHJvY2Vz
cygpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLQotICAgIGlmIChUaHJlYWRJbml0aWFs
aXplSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgU2hGaW5hbGl6ZSgpOwotCi0gICAgc3VjY2VzcyA9IERldGFjaFRocmVhZCgpOwotCi0J
RnJlZVBvb2xJbmRleCgpOwogCi0JaWYgKCFGcmVlUGFyc2VDb250ZXh0SW5kZXgoKSkKLSAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgT1NfRnJlZVRMU0luZGV4KFRocmVhZEluaXRpYWxp
emVJbmRleCk7Ci0gICAgVGhyZWFkSW5pdGlhbGl6ZUluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5E
RVg7CisgICAgICAgIEZyZWVHbG9iYWxQb29scygpOworICAgIH0KIAogICAgIHJldHVybiBzdWNj
ZXNzOwogfQorCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZURsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplRGxsLmgJKHJldmlzaW9uIDY2
NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemVEbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNiwxNCArNiwxMSBAQAogI2lmbmRlZiBfX0lOSVRJQUxJWkVETExfSAogI2RlZmluZSBf
X0lOSVRJQUxJWkVETExfSAogCi0KLSNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKLQot
CiBib29sIEluaXRQcm9jZXNzKCk7Citib29sIERldGFjaFByb2Nlc3MoKTsKKwogYm9vbCBJbml0
VGhyZWFkKCk7CiBib29sIERldGFjaFRocmVhZCgpOwotYm9vbCBEZXRhY2hQcm9jZXNzKCk7CiAK
ICNlbmRpZiAvLyBfX0lOSVRJQUxJWkVETExfSAogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3Jj
L2NvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiwx
MiArNiwxMSBAQAogCiAjaWZuZGVmIF9fSU5JVElBTElaRV9QQVJTRV9DT05URVhUX0lOQ0xVREVE
XwogI2RlZmluZSBfX0lOSVRJQUxJWkVfUEFSU0VfQ09OVEVYVF9JTkNMVURFRF8KLSNpbmNsdWRl
ICJjb21waWxlci9vc2luY2x1ZGUuaCIKIAogYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5k
ZXgoKTsKLWJvb2wgSW5pdGlhbGl6ZUdsb2JhbFBhcnNlQ29udGV4dCgpOwotYm9vbCBGcmVlUGFy
c2VDb250ZXh0KCk7CiBib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpOwogCitib29sIEluaXRp
YWxpemVHbG9iYWxQYXJzZUNvbnRleHQoKTsKK2Jvb2wgRnJlZVBhcnNlQ29udGV4dCgpOwogCiAj
ZW5kaWYgLy8gX19JTklUSUFMSVpFX1BBUlNFX0NPTlRFWFRfSU5DTFVERURfCkluZGV4OiBBTkdM
RS9zcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMv
Y29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMv
Y29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsNyBA
QAogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxh
bGdvcml0aG0+CiAKICNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL1F1YWxpZmllckFsaXZlLmgiCkBAIC0xNyw5ICsxOCwxMCBAQAogCiBi
b29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRV
bmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7CiAK
LVRQcmVjaXNpb24gR2V0SGlnaGVzdFByZWNpc2lvbiggVFByZWNpc2lvbiBsZWZ0LCBUUHJlY2lz
aW9uIHJpZ2h0ICl7CitzdGF0aWMgVFByZWNpc2lvbiBHZXRIaWdoZXJQcmVjaXNpb24oIFRQcmVj
aXNpb24gbGVmdCwgVFByZWNpc2lvbiByaWdodCApewogICAgIHJldHVybiBsZWZ0ID4gcmlnaHQg
PyBsZWZ0IDogcmlnaHQ7CiB9CisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCiAvLyBGaXJzdCBz
ZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBoZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVz
ZW50YXRpb24uCkBAIC0xMTEsMTIgKzExMyw2IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkQmluYXJ5TWEKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbGVmdFRlbXBDb25zdGFu
dCA9IGxlZnQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
ICpyaWdodFRlbXBDb25zdGFudCA9IHJpZ2h0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAg
IGlmIChsZWZ0VGVtcENvbnN0YW50KQotICAgICAgICBsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0KLSAgICBpZiAocmlnaHRUZW1wQ29uc3RhbnQpCi0gICAg
ICAgIHJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCiAg
ICAgLy8KICAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgogICAgIC8vCkBAIC0z
MDcsNyArMzAzLDcgQEAgVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6c2V0QWdncgog
ICAgIC8vCiAgICAgLy8gU2V0IHRoZSBvcGVyYXRvci4KICAgICAvLwotICAgIGFnZ05vZGUtPnNl
dE9wZXJhdG9yKG9wKTsKKyAgICBhZ2dOb2RlLT5zZXRPcChvcCk7CiAgICAgaWYgKGxpbmUgIT0g
MCkKICAgICAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsKIApAQCAtNTE5LDkgKzUxNSw5IEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29tbWEoVEkKICAgICAgICAgcmV0dXJu
IHJpZ2h0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29tbWFBZ2dyZWdh
dGUgPSBncm93QWdncmVnYXRlKGxlZnQsIHJpZ2h0LCBsaW5lKTsKLSAgICAgICAgY29tbWFBZ2dy
ZWdhdGUtPmdldEFzQWdncmVnYXRlKCktPnNldE9wZXJhdG9yKEVPcENvbW1hKTsKKyAgICAgICAg
Y29tbWFBZ2dyZWdhdGUtPmdldEFzQWdncmVnYXRlKCktPnNldE9wKEVPcENvbW1hKTsKICAgICAg
ICAgY29tbWFBZ2dyZWdhdGUtPnNldFR5cGUocmlnaHQtPmdldFR5cGUoKSk7Ci0gICAgICAgIGNv
bW1hQWdncmVnYXRlLT5nZXRUeXBlUG9pbnRlcigpLT5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9y
YXJ5KTsKKyAgICAgICAgY29tbWFBZ2dyZWdhdGUtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxp
ZmllcihFdnFUZW1wb3JhcnkpOwogICAgICAgICByZXR1cm4gY29tbWFBZ2dyZWdhdGU7CiAgICAg
fQogfQpAQCAtNjQ0LDcgKzY0MCw3IEBAIGJvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3Mo
VEludGVybU4KICAgICAvLwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ1Jvb3QgPSByb290LT5n
ZXRBc0FnZ3JlZ2F0ZSgpOwogICAgIGlmIChhZ2dSb290ICYmIGFnZ1Jvb3QtPmdldE9wKCkgPT0g
RU9wTnVsbCkKLSAgICAgICAgYWdnUm9vdC0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAg
ICAgICBhZ2dSb290LT5zZXRPcChFT3BTZXF1ZW5jZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTc2NCwxNiArNzYwLDkgQEAgYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5r
JikKIC8vCiBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpbmZvU2luaykK
IHsKLSAgICBpbnQgc2l6ZSA9IGxlZnQtPmdldE5vbWluYWxTaXplKCk7Ci0gICAgaWYgKHJpZ2h0
LT5nZXROb21pbmFsU2l6ZSgpID4gc2l6ZSkKLSAgICAgICAgc2l6ZSA9IHJpZ2h0LT5nZXROb21p
bmFsU2l6ZSgpOwotCi0gICAgVEJhc2ljVHlwZSB0eXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7
Ci0KLSAgICAvLwotICAgIC8vIEFycmF5cyBoYXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCi0gICAg
Ly8KLSAgICBpZiAoKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSAmJiAobGVm
dC0+Z2V0VHlwZSgpICE9IHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgIC8vIEdMU0wgRVMgMi4wIGRv
ZXMgbm90IHN1cHBvcnQgaW1wbGljaXQgdHlwZSBjYXN0aW5nLgorICAgIC8vIFNvIHRoZSBiYXNp
YyB0eXBlIHNob3VsZCBhbHdheXMgbWF0Y2guCisgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgp
ICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8KQEAgLTc4MiwxNiArNzcxLDI3IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5m
b1NpbmsmIGkKICAgICAvLwogICAgIHNldFR5cGUobGVmdC0+Z2V0VHlwZSgpKTsKIAotICAgIFRQ
cmVjaXNpb24gaGlnaGVzdFByZWNpc2lvbiA9IEdldEhpZ2hlc3RQcmVjaXNpb24obGVmdC0+Z2V0
UHJlY2lzaW9uKCksIHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7Ci0gICAgZ2V0VHlwZVBvaW50ZXIo
KS0+Y2hhbmdlUHJlY2lzaW9uKGhpZ2hlc3RQcmVjaXNpb24pOworICAgIC8vIFRoZSByZXN1bHQg
Z2V0cyBwcm9tb3RlZCB0byB0aGUgaGlnaGVzdCBwcmVjaXNpb24uCisgICAgVFByZWNpc2lvbiBo
aWdoZXJQcmVjaXNpb24gPSBHZXRIaWdoZXJQcmVjaXNpb24obGVmdC0+Z2V0UHJlY2lzaW9uKCks
IHJpZ2h0LT5nZXRQcmVjaXNpb24oKSk7CisgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UHJlY2lz
aW9uKGhpZ2hlclByZWNpc2lvbik7CisKKyAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRz
IGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKKyAgICAvLyBvcGVyYW5kcyBhcmUg
Y29uc3QuCisgICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0
LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgICAgICBnZXRUeXBlUG9pbnRlcigp
LT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICB9CiAKICAgICAvLwogICAgIC8vIEFy
cmF5IG9wZXJhdGlvbnMuCiAgICAgLy8KLSAgICBpZiAobGVmdC0+aXNBcnJheSgpKSB7CisgICAg
aWYgKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIEFycmF5cyB0eXBlcyBoYXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCisgICAgICAg
IC8vCisgICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0KICAgICAg
ICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAgICAg
ICAgICAvLwpAQCAtODEyLDE3ICs4MTIsMTYgQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3Rl
KFRJbmZvU2luayYgaQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KLQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpKTsKKwogICAgIC8vCi0gICAgLy8gQWxsIHNjYWxhcnMuICBDb2RlIGFmdGVy
IHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2Fs
YXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQog
ICAgIC8vCiAgICAgaWYgKHNpemUgPT0gMSkgewotCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLQog
ICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwKICAg
ICAgICAgICAgIC8vCkBAIC04NDAsMzMgKzgzOSwzNiBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnBy
b21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsQW5kOgogICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CisgICAgICAgICAgICAg
ICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUgYm9vbC4KICAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBFdmVy
eXRoaW5nIGVsc2Ugc2hvdWxkIGhhdmUgbWF0Y2hpbmcgdHlwZXMKLSAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5
cGUoKSAhPSByaWdodC0+Z2V0QmFzaWNUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgbGVm
dC0+aXNNYXRyaXgoKSAgICAgIT0gcmlnaHQtPmlzTWF0cml4KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vCisgICAgLy8gSWYgd2UgcmVhY2gg
aGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Igb3IgbWF0cml4Lgor
ICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2ZWN0b3IsIG9yIG1h
dHJpeC4KICAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/CiAgICAgLy8KLSAgICBpZiAo
IGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gc2l6ZSAmJiAgbGVmdC0+Z2V0Tm9taW5hbFNpemUo
KSAhPSAxIHx8Ci0gICAgICAgIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IHNpemUgJiYgcmln
aHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZSBub21pbmFsIHNpemUgb2Ygb3BlcmFuZHMgZG8gbm90IG1hdGNoOgor
ICAgICAgICAvLyBPbmUgb2YgdGhlbSBtdXN0IGJlIHNjYWxhci4KKyAgICAgICAgaWYgKGxlZnQt
PmdldE5vbWluYWxTaXplKCkgIT0gMSAmJiByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBPcGVyYXRvciBjYW5ub3QgYmUg
b2YgdHlwZSBwdXJlIGFzc2lnbm1lbnQuCisgICAgICAgIGlmIChvcCA9PSBFT3BBc3NpZ24gfHwg
b3AgPT0gRU9wSW5pdGlhbGl6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
ICAgICAvLwogICAgIC8vIENhbiB0aGVzZSB0d28gb3BlcmFuZHMgYmUgY29tYmluZWQ/CiAgICAg
Ly8KKyAgICBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IGxlZnQtPmdldEJhc2ljVHlwZSgpOwogICAg
IHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BNdWw6CiAgICAgICAgICAgICBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKQEAgLTg3NCwxMiArODc2LDEy
IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKICAgICAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHNpemUsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5pc01hdHJp
eCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkgewogICAgICAgICAgICAgICAgIGlmIChyaWdodC0+
aXNWZWN0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVj
dG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVj
aXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBz
aXplLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7CiAgICAgICAgICAgICAgICAgfQpAQCAtODkw
LDcgKzg5Miw3IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAg
ICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZSh0eXBlLCBoaWdoZXN0UHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2Up
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIk1pc3Npbmcg
ZWxzZXMiLCBnZXRMaW5lKCkpOwpAQCAtOTE5LDE4ICs5MjEsMTYgQEAgYm9vbCBUSW50ZXJtQmlu
YXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICAgICAgICAgICAgICBpZiAoISBsZWZ0
LT5pc1ZlY3RvcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOwotICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKHR5cGUsIGhpZ2hlc3RQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiTWlzc2luZyBl
bHNlcyIsIGdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBFT3BBc3NpZ246CiAg
ICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZToKLSAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21p
bmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAogICAgICAgICBjYXNlIEVP
cEFkZDoKICAgICAgICAgY2FzZSBFT3BTdWI6CiAgICAgICAgIGNhc2UgRU9wRGl2OgpAQCAtOTM4
LDEwICs5MzgsOSBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAg
ICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgogICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKICAg
ICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8Ci0g
ICAgICAgICAgICAgICAgbGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAot
ICAgICAgICAgICAgICAgIGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5
cGUoKSkKKyAgICAgICAgICAgICAgICBsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHNldFR5cGUo
VFR5cGUodHlwZSwgaGlnaGVzdFByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBsZWZ0LT5p
c01hdHJpeCgpIHx8IHJpZ2h0LT5pc01hdHJpeCgpKSk7CisgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQt
PmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC05NTEsOCArOTUwLDcgQEAgYm9vbCBUSW50ZXJt
QmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKICAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpIHx8Ci0gICAgICAgICAgICAgICAg
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSB8fAotICAgICAgICAgICAgICAg
IGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAg
ICAgICAgICBsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk2MCwzMCArOTU4LDEzIEBA
IGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICAvLwotICAgIC8vIE9u
ZSBtb3JlIGNoZWNrIGZvciBhc3NpZ25tZW50LiAgVGhlIFJlc3VsdGluZyB0eXBlIGhhcyB0byBt
YXRjaCB0aGUgbGVmdCBvcGVyYW5kLgotICAgIC8vCi0gICAgc3dpdGNoIChvcCkgewotICAgICAg
ICBjYXNlIEVPcEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgotICAgICAgICBj
YXNlIEVPcEFkZEFzc2lnbjoKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgIGNh
c2UgRU9wTXVsQXNzaWduOgotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjoKLSAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkgIT0gbGVmdC0+Z2V0VHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQ29t
cGFyZVN0cnVjdChjb25zdCBUVHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdo
dFVuaW9uQXJyYXksIENvbnN0YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KQogewotICAgIFRUeXBl
TGlzdCogZmllbGRzID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOworICAgIGNvbnN0IFRUeXBl
TGlzdCogZmllbGRzID0gbGVmdE5vZGVUeXBlLmdldFN0cnVjdCgpOwogCiAgICAgc2l6ZV90IHN0
cnVjdFNpemUgPSBmaWVsZHMtPnNpemUoKTsKICAgICBpbnQgaW5kZXggPSAwOwpJbmRleDogQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2
b2lkIFRPdXRwdXRHTFNMOjp3cml0ZUZ1bmN0aW9uUGFyYW1ldGVyCiAgICAgICAgICAgICBvdXQg
PDwgYXJyYXlCcmFja2V0cyh0eXBlKTsKIAogICAgICAgICAvLyBQdXQgYSBjb21tYSBpZiB0aGlz
IGlzIG5vdCB0aGUgbGFzdCBhcmd1bWVudC4KLSAgICAgICAgaWYgKGl0ZXIgIT0gLS1hcmdzLmVu
ZCgpKQorICAgICAgICBpZiAoaXRlciAhPSBhcmdzLmVuZCgpIC0gMSkKICAgICAgICAgICAgIG91
dCA8PCAiLCAiOwogICAgIH0KIH0KQEAgLTMwNCw4ICszMDQsNiBAQCBib29sIFRPdXRwdXRHTFNM
Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpCiAKIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0VW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKIHsKLSAgICBUSW5mb1NpbmtCYXNlJiBv
dXQgPSBvYmpTaW5rKCk7Ci0KICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCiAgICAgewogICAg
ICAgICBjYXNlIEVPcE5lZ2F0aXZlOiB3cml0ZVRyaXBsZXQodmlzaXQsICIoLSIsIE5VTEwsICIp
Iik7IGJyZWFrOwpAQCAtNjUwLDggKzY0OCw2IEBAIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0TG9v
cChWaXNpdCB2aXNpdCwKIAogYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlz
aXQsIFRJbnRlcm1CcmFuY2gqIG5vZGUpCiB7Ci0gICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gb2Jq
U2luaygpOwotCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3AoKSkKICAgICB7CiAgICAgICAg
IGNhc2UgRU9wS2lsbDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZGlzY2FyZCIsIE5VTEwsIE5VTEwp
OyBicmVhazsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9uIDY2NjEx
KQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODEsNyArMTgxLDcgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogCiAgICAgICAgIGlm
IChtVXNlc0ZyYWdDb29yZCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3Jt
IGZsb2F0NCBkeF9XaW5kb3c7XG4iCisgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0
IGR4X1ZpZXdwb3J0O1xuIgogICAgICAgICAgICAgICAgICAgICJ1bmlmb3JtIGZsb2F0MiBkeF9E
ZXB0aDtcbiI7CiAgICAgICAgIH0KIApAQCAtNzkxLDExICs3OTEsMTEgQEAgYm9vbCBPdXRwdXRI
TFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0TGVmdCgpLT5pc01hdHJpeCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgY2FzZSAyICogMjogbVVzZXNFcXVhbE1hdDIgPSB0cnVl
OyBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMyAqIDM6IG1Vc2VzRXF1YWxNYXQzID0g
dHJ1ZTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIDQgKiA0OiBtVXNlc0VxdWFsTWF0
NCA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0VxdWFsTWF0
MiA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBtVXNlc0VxdWFsTWF0
MyA9IHRydWU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBtVXNlc0VxdWFsTWF0
NCA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04MDQsNyArODA0LDcgQEAg
Ym9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNpY1R5cGUoKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0U2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmdldExlZnQoKS0+Z2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNFcXVhbFZlYzIg
PSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG1Vc2VzRXF1YWxW
ZWMzID0gdHJ1ZTsgYnJlYWs7CkBAIC04MTMsNyArODEzLDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXRTaXplKCkpCisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0TGVmdCgpLT5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBtVXNl
c0VxdWFsSVZlYzIgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG1Vc2VzRXF1YWxJVmVjMyA9IHRydWU7IGJyZWFrOwpAQCAtODIyLDcgKzgyMiw3IEBAIGJvb2wg
T3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDoKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldFNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRMZWZ0KCktPmdldE5v
bWluYWxTaXplKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IG1Vc2VzRXF1YWxCVmVjMiA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogbVVzZXNFcXVhbEJWZWMzID0gdHJ1ZTsgYnJlYWs7CkBAIC0xMjg4LDcg
KzEyODgsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAg
ICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiAh
PSAiLCAiKSIpOyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wTW9kOgogICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0tPmdldEFz
VHlwZWQoKS0+Z2V0U2l6ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJz
dCBhcmd1bWVudAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpICAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMg
aW4gdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2Ug
MTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjogbVVzZXNN
b2QyID0gdHJ1ZTsgYnJlYWs7CkBAIC0xMzE3LDcgKzEzMTcsNyBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJjcm9zcygiLCAiLCAiLCAiKSIpOyAgICAgICAgIGJyZWFrOwog
ICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDoKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldFNpemUoKSkgICAvLyBO
dW1iZXIgb2YgY29tcG9uZW50cyBpbiB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6
ZSgpKSAgIC8vIE51bWJlciBvZiBjb21wb25lbnRzIGluIHRoZSBmaXJzdCBhcmd1bWVudAogICAg
ICAgICAgICAgewogICAgICAgICAgICAgY2FzZSAxOiBtVXNlc0ZhY2Vmb3J3YXJkMSA9IHRydWU7
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAyOiBtVXNlc0ZhY2Vmb3J3YXJkMiA9IHRydWU7IGJy
ZWFrOwpAQCAtMTU1Myw3ICsxNTUzLDcgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3Np
dmVMb29wKFRJbgogCiAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQp
CiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0g
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBzeW1i
b2w7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGNvbnN0YW50LT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpWzBdLmdldElDb25zdCgpOwpAQCAtMTU3NSw3ICsxNTc1LDcgQEAg
Ym9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbgogCiAgICAgICAgICAgICBp
ZiAoY29uc3RhbnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldFNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYm
IGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAg
ICAgICAgICAgbGltaXQgPSBjb25zdGFudC0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVswXS5nZXRJ
Q29uc3QoKTsKQEAgLTE1OTcsNyArMTU5Nyw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhj
ZXNzaXZlTG9vcChUSW4KIAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIGNvbnN0YW50LT5nZXRTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICBpZiAoY29uc3Rh
bnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUo
KSA9PSAxKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVl
ID0gY29uc3RhbnQtPmdldFVuaW9uQXJyYXlQb2ludGVyKClbMF0uZ2V0SUNvbnN0KCk7CiAKQEAg
LTE4NDgsOCArMTg0OCw4IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFQKIAogICAgIFRUeXBlIGN0b3JUeXBlID0gdHlwZTsKICAgICBjdG9yVHlwZS5jbGVhckFycmF5
bmVzcygpOwotICAgIGN0b3JUeXBlLmNoYW5nZVByZWNpc2lvbihFYnBIaWdoKTsKLSAgICBjdG9y
VHlwZS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICBjdG9yVHlwZS5zZXRQcmVj
aXNpb24oRWJwSGlnaCk7CisgICAgY3RvclR5cGUuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7
CiAKICAgICBUU3RyaW5nIGN0b3JOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKSA/IGRlY29yYXRlKG5h
bWUpIDogbmFtZTsKIApJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCShyZXZpc2lv
biA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4Niw3ICs0ODYsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9y
RXJyb3JDaGVjCiAgICAgfQogICAgIAogICAgIGlmIChjb25zdFR5cGUpCi0gICAgICAgIHR5cGUt
PmNoYW5nZVF1YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcihF
dnFDb25zdCk7CiAKICAgICBpZiAodHlwZS0+aXNBcnJheSgpICYmIHR5cGUtPmdldEFycmF5U2l6
ZSgpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAi
YXJyYXkgY29uc3RydWN0b3IgbmVlZHMgb25lIGFyZ3VtZW50IHBlciBhcnJheSBlbGVtZW50Iiwg
ImNvbnN0cnVjdG9yIiwgIiIpOwpAQCAtNTg2LDE0ICs1ODYsMTQgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhpbgogewogICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0
cnVjdCkgewogICAgICAgICBpZiAoY29udGFpbnNTYW1wbGVyKCpwVHlwZS51c2VyRGVmKSkgewot
ICAgICAgICAgICAgZXJyb3IobGluZSwgcmVhc29uLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcocFR5
cGUudHlwZSksICIoc3RydWN0dXJlIGNvbnRhaW5zIGEgc2FtcGxlcikiKTsKKyAgICAgICAgICAg
IGVycm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIoc3RydWN0
dXJlIGNvbnRhaW5zIGEgc2FtcGxlcikiKTsKICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0g
ZWxzZSBpZiAoSXNTYW1wbGVyKHBUeXBlLnR5cGUpKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsIHJl
YXNvbiwgVFR5cGU6OmdldEJhc2ljU3RyaW5nKHBUeXBlLnR5cGUpLCAiIik7CisgICAgICAgIGVy
cm9yKGxpbmUsIHJlYXNvbiwgZ2V0QmFzaWNTdHJpbmcocFR5cGUudHlwZSksICIiKTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC04NzksOSArODc5LDkgQEAgYm9vbCBUUGFyc2VD
b250ZXh0OjpwYXJhbUVycm9yQ2hlY2soaW50IAogICAgIH0KIAogICAgIGlmIChxdWFsaWZpZXIg
PT0gRXZxQ29uc3QpCi0gICAgICAgIHR5cGUtPmNoYW5nZVF1YWxpZmllcihFdnFDb25zdFJlYWRP
bmx5KTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0UmVhZE9ubHkpOwogICAg
IGVsc2UKLSAgICAgICAgdHlwZS0+Y2hhbmdlUXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKKyAg
ICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHBhcmFtUXVhbGlmaWVyKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTkxMywyMSArOTEzLDI0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5z
aW9uRXJyb3JDaGVjaygKIC8vCiBjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRG
dW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQogewotICAg
IGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFuZ2xl
ZE5hbWUoKSwgYnVpbHRJbik7CisgICAgLy8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0
byBjaGVjayB3aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCisgICAgLy8gaGlkZGVu
IGJ5IGEgdmFyaWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCisgICAgY29uc3QgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOwor
ICAgIGlmIChzeW1ib2wgPT0gMCkgeworICAgICAgICBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5k
KGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgIH0KIAotICAgIGlmIChzeW1i
b2wgPT0gMCkgeyAgICAgICAgCisgICAgaWYgKHN5bWJvbCA9PSAwKSB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJubyBtYXRjaGluZyBvdmVybG9hZGVkIGZ1bmN0aW9uIGZvdW5kIiwgY2FsbC0+Z2V0
TmFtZSgpLmNfc3RyKCksICIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYg
KCEgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpIHsKKyAgICBpZiAoIXN5bWJvbC0+aXNGdW5jdGlvbigp
KSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJmdW5jdGlvbiBuYW1lIGV4cGVjdGVkIiwgY2FsbC0+
Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAot
ICAgIGNvbnN0IFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBURnVuY3Rp
b24qPihzeW1ib2wpOwotICAgIAotICAgIHJldHVybiBmdW5jdGlvbjsKKworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBURnVuY3Rpb24qPihzeW1ib2wpOwogfQogCiAvLwpAQCAtOTczLDEz
ICs5NzYsMTMgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoVAogICAg
IGlmIChxdWFsaWZpZXIgPT0gRXZxQ29uc3QpIHsKICAgICAgICAgaWYgKHF1YWxpZmllciAhPSBp
bml0aWFsaXplci0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpKSB7CiAgICAgICAgICAgICBlcnJv
cihsaW5lLCAiIGFzc2lnbmluZyBub24tY29uc3RhbnQgdG8iLCAiPSIsICInJXMnIiwgdmFyaWFi
bGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICAgICAg
dmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAodHlwZSAhPSBp
bml0aWFsaXplci0+Z2V0VHlwZSgpKSB7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiIG5vbi1t
YXRjaGluZyB0eXBlcyBmb3IgY29uc3QgaW5pdGlhbGl6ZXIgIiwgCiAgICAgICAgICAgICAgICAg
dmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXJTdHJpbmcoKSwgIiIpOwotICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlh
bGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IApAQCAtOTk4LDcgKzEwMDEsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihUCiAgICAgICAgICAgICB2YXJpYWJs
ZS0+c2hhcmVDb25zdFBvaW50ZXIoY29uc3RBcnJheSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBlcnJvcihsaW5lLCAiIGNhbm5vdCBhc3NpZ24gdG8iLCAiPSIsICInJXMnIiwgdmFy
aWFibGUtPmdldFR5cGUoKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwotICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKS5jaGFuZ2VRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNDksNyAr
MTA1Miw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RydWMKIAogICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKICAg
ICAKLSAgICBUVHlwZUxpc3Q6Oml0ZXJhdG9yIG1lbWJlclR5cGVzOworICAgIFRUeXBlTGlzdDo6
Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0
cnVjdCkKICAgICAgICAgbWVtYmVyVHlwZXMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+YmVnaW4oKTsK
ICAgICAKQEAgLTEzNDcsNyArMTM1MCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RBcnIKIC8vCiBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3Ry
dWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgVFNvdXJjZUxvYyBs
aW5lKQogewotICAgIFRUeXBlTGlzdCogZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVj
dCgpOworICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOwogICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2RlOwogICAgIGludCBpbnN0YW5jZVNp
emUgPSAwOwogICAgIHVuc2lnbmVkIGludCBpbmRleCA9IDA7CkBAIC0xNDEwLDYgKzE0MTMsMjAg
QEAgYm9vbCBJbml0aWFsaXplUGFyc2VDb250ZXh0SW5kZXgoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgpCit7CisgICAgT1NfVExTSW5kZXggdGxz
aUluZGV4ID0gR2xvYmFsUGFyc2VDb250ZXh0SW5kZXg7CisKKyAgICBpZiAoR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKyAgICAgICAgYXNzZXJ0KDAg
JiYgIkZyZWVQYXJzZUNvbnRleHRJbmRleCgpOiBQYXJzZSBDb250ZXh0IGluZGV4IG5vdCBpbml0
YWxpc2VkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBHbG9iYWxQYXJz
ZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOworCisgICAgcmV0dXJuIE9TX0Zy
ZWVUTFNJbmRleCh0bHNpSW5kZXgpOworfQorCiBib29sIEluaXRpYWxpemVHbG9iYWxQYXJzZUNv
bnRleHQoKQogewogICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElE
X1RMU19JTkRFWCkgewpAQCAtMTQzNSwxNyArMTQ1Miw2IEBAIGJvb2wgSW5pdGlhbGl6ZUdsb2Jh
bFBhcnNlQ29udGV4dCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVRQYXJzZUNvbnRleHRQb2lu
dGVyJiBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKQotewotICAgIC8vCi0gICAgLy8gTWluaW1hbCBl
cnJvciBjaGVja2luZyBmb3Igc3BlZWQKLSAgICAvLwotCi0gICAgVFRocmVhZFBhcnNlQ29udGV4
dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFkUGFyc2VDb250ZXh0ICo+KE9T
X0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7Ci0KLSAgICByZXR1cm4gbHBQ
YXJzZUNvbnRleHQtPmxwR2xvYmFsUGFyc2VDb250ZXh0OwotfQotCiBib29sIEZyZWVQYXJzZUNv
bnRleHQoKQogewogICAgIGlmIChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElE
X1RMU19JTkRFWCkgewpAQCAtMTQ2MCwxNiArMTQ2NiwxNCBAQCBib29sIEZyZWVQYXJzZUNvbnRl
eHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZyZWVQYXJzZUNvbnRleHRJbmRleCgp
CitUUGFyc2VDb250ZXh0UG9pbnRlciYgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkKIHsKLSAgICBP
U19UTFNJbmRleCB0bHNpSW5kZXggPSBHbG9iYWxQYXJzZUNvbnRleHRJbmRleDsKLQotICAgIGlm
IChHbG9iYWxQYXJzZUNvbnRleHRJbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAg
ICAgICBhc3NlcnQoMCAmJiAiRnJlZVBhcnNlQ29udGV4dEluZGV4KCk6IFBhcnNlIENvbnRleHQg
aW5kZXggbm90IGluaXRhbGlzZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICAvLworICAgIC8vIE1pbmltYWwgZXJyb3IgY2hlY2tpbmcgZm9yIHNwZWVkCisgICAgLy8KIAot
ICAgIEdsb2JhbFBhcnNlQ29udGV4dEluZGV4ID0gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisgICAg
VFRocmVhZFBhcnNlQ29udGV4dCAqbHBQYXJzZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxUVGhyZWFk
UGFyc2VDb250ZXh0ICo+KE9TX0dldFRMU1ZhbHVlKEdsb2JhbFBhcnNlQ29udGV4dEluZGV4KSk7
CiAKLSAgICByZXR1cm4gT1NfRnJlZVRMU0luZGV4KHRsc2lJbmRleCk7CisgICAgcmV0dXJuIGxw
UGFyc2VDb250ZXh0LT5scEdsb2JhbFBhcnNlQ29udGV4dDsKIH0KKwpJbmRleDogQU5HTEUvc3Jj
L2NvbXBpbGVyL1Bvb2xBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9Q
b29sQWxsb2MuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFs
bG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMSArMTU3LDEyIEBAIHByb3RlY3RlZDoKICAg
ICAKICAgICBzdHJ1Y3QgdEhlYWRlciB7CiAgICAgICAgIHRIZWFkZXIodEhlYWRlciogbmV4dFBh
Z2UsIHNpemVfdCBwYWdlQ291bnQpIDoKKyAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwK
KyAgICAgICAgICAgIHBhZ2VDb3VudChwYWdlQ291bnQpCiAjaWZkZWYgR1VBUkRfQkxPQ0tTCi0g
ICAgICAgICAgICBsYXN0QWxsb2NhdGlvbigwKSwKKyAgICAgICAgICAsIGxhc3RBbGxvY2F0aW9u
KDApCiAjZW5kaWYKLSAgICAgICAgICAgIG5leHRQYWdlKG5leHRQYWdlKSwKLSAgICAgICAgICAg
IHBhZ2VDb3VudChwYWdlQ291bnQpIHsgfQorICAgICAgICAgICAgeyB9CiAKICAgICAgICAgfnRI
ZWFkZXIoKSB7CiAjaWZkZWYgR1VBUkRfQkxPQ0tTCkBAIC0yNjMsMTkgKzI2NCwyNiBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgT3RoZXI+CiAgICAgcG9vbF9hbGxvY2F0b3IoY29uc3Qg
cG9vbF9hbGxvY2F0b3I8T3RoZXI+JiBwKSA6IGFsbG9jYXRvcihwLmdldEFsbG9jYXRvcigpKSB7
IH0KIAorI2lmIGRlZmluZWQoX19TVU5QUk9fQ0MpICYmICFkZWZpbmVkKF9SV1NURF9BTExPQ0FU
T1IpCisgICAgLy8gbGliQ1N0ZCBvbiBzb21lIHBsYXRmb3JtcyBoYXZlIGEgZGlmZmVyZW50IGFs
bG9jYXRlL2RlYWxsb2NhdGUgaW50ZXJmYWNlLgorICAgIC8vIENhbGxlciBwcmUtYmFrZXMgc2l6
ZW9mKFQpIGludG8gJ24nIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUKKyAgICAv
LyBhbGxvY2F0ZWQsIG5vdCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgIHZvaWQqIGFsbG9j
YXRlKHNpemVfdHlwZSBuKSB7IAorICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2Nh
dGUobik7CisgICAgfQorICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdHlwZSBuLCBjb25zdCB2b2lk
KikgeworICAgICAgICByZXR1cm4gZ2V0QWxsb2NhdG9yKCkuYWxsb2NhdGUobik7CisgICAgfQor
ICAgIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiwgc2l6ZV90eXBlKSB7fQorI2Vsc2UKICAgICBwb2lu
dGVyIGFsbG9jYXRlKHNpemVfdHlwZSBuKSB7IAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5hbGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CiAg
ICAgfQogICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIG4sIGNvbnN0IHZvaWQqKSB7IAog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwb2ludGVyPihnZXRBbGxvY2F0b3IoKS5h
bGxvY2F0ZShuICogc2l6ZW9mKFQpKSk7CiAgICAgfQotCi0gICAgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqLCBzaXplX3R5cGUpIHsgfQotICAgIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyLCBzaXplX3R5
cGUpIHsgfQotCi0gICAgcG9pbnRlciBfQ2hhcmFsbG9jKHNpemVfdCBuKSB7Ci0gICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PHBvaW50ZXI+KGdldEFsbG9jYXRvcigpLmFsbG9jYXRlKG4p
KTsKLSAgICB9CisgICAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIsIHNpemVfdHlwZSkge30KKyNl
bmRpZiAgLy8gX1JXU1REX0FMTE9DQVRPUgogCiAgICAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBw
LCBjb25zdCBUJiB2YWwpIHsgbmV3ICgodm9pZCAqKXApIFQodmFsKTsgfQogICAgIHZvaWQgZGVz
dHJveShwb2ludGVyIHApIHsgcC0+VDo6flQoKTsgfQpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVy
L1NoYWRlckxhbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9TaGFkZXJM
YW5nLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE1ICs5MCw0NSBAQCBzdGF0aWMgYm9vbCBHZW5l
cmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZSgKIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsKLSAgICBi
b29sIHJldCA9IEluaXRQcm9jZXNzKCk7CisgICAgaWYgKCFJbml0UHJvY2VzcygpKQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiByZXQgPyAxIDogMDsKKyAgICByZXR1cm4gMTsKIH0K
IAogLy8KLS8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgY29tcGls
ZXIgb2JqZWN0cy4KKy8vIENsZWFudXAgc3ltYm9sIHRhYmxlcworLy8KK2ludCBTaEZpbmFsaXpl
KCkKK3sKKyAgICBpZiAoIURldGFjaFByb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gMTsKK30KKworLy8KKy8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2VzIHdp
dGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCiAvLwordm9pZCBTaEluaXRCdWlsdEluUmVzb3Vy
Y2UoVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzKQoreworICAgIC8vIENvbnN0YW50cy4KKyAg
ICByZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OworICAgIHJlc291cmNlcy0+TWF4VmVy
dGV4VW5pZm9ybVZlY3RvcnMgPSAxMjg7CisgICAgcmVzb3VyY2VzLT5NYXhWYXJ5aW5nVmVjdG9y
cyA9IDg7CisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Cisg
ICAgcmVzb3VyY2VzLT5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNv
dXJjZXMtPk1heFRleHR1cmVJbWFnZVVuaXRzID0gODsKKyAgICByZXNvdXJjZXMtPk1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMgPSAxNjsKKyAgICByZXNvdXJjZXMtPk1heERyYXdCdWZmZXJzID0g
MTsKIAorICAgIC8vIEV4dGVuc2lvbnMuCisgICAgcmVzb3VyY2VzLT5PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgPSAwOworfQorCisvLworLy8gRHJpdmVyIGNhbGxzIHRoZXNlIHRvIGNyZWF0ZSBh
bmQgZGVzdHJveSBjb21waWxlciBvYmplY3RzLgorLy8KIFNoSGFuZGxlIFNoQ29uc3RydWN0Q29t
cGlsZXIoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSogcmVzb3VyY2VzKQogewogICAgIGlmICghSW5pdFRocmVhZCgpKQpAQCAtMTMwLDE0
ICsxNjAsNiBAQCB2b2lkIFNoRGVzdHJ1Y3QoU2hIYW5kbGUgaGFuZGxlKQogfQogCiAvLwotLy8g
Q2xlYW51cCBzeW1ib2wgdGFibGVzCi0vLwotaW50IFNoRmluYWxpemUoKQotewotICAgIHJldHVy
biAxOwotfQotCi0vLwogLy8gRG8gYW4gYWN0dWFsIGNvbXBpbGUgb24gdGhlIGdpdmVuIHN0cmlu
Z3MuICBUaGUgcmVzdWx0IGlzIGxlZnQgCiAvLyBpbiB0aGUgZ2l2ZW4gY29tcGlsZSBvYmplY3Qu
CiAvLwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiA2NjYxMSkK
KysrIEFOR0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgaW50IFRUeXBlOjpnZXRTdHJ1Y3RTaXplKCkgY29uc3QKICAgICB9CiAK
ICAgICBpZiAoc3RydWN0dXJlU2l6ZSA9PSAwKQotICAgICAgICBmb3IgKFRUeXBlTGlzdDo6aXRl
cmF0b3IgdGwgPSBnZXRTdHJ1Y3QoKS0+YmVnaW4oKTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgp
OyB0bCsrKQorICAgICAgICBmb3IgKFRUeXBlTGlzdDo6Y29uc3RfaXRlcmF0b3IgdGwgPSBnZXRT
dHJ1Y3QoKS0+YmVnaW4oKTsgdGwgIT0gZ2V0U3RydWN0KCktPmVuZCgpOyB0bCsrKQogICAgICAg
ICAgICAgc3RydWN0dXJlU2l6ZSArPSAoKCp0bCkudHlwZSktPmdldE9iamVjdFNpemUoKTsKIAog
ICAgIHJldHVybiBzdHJ1Y3R1cmVTaXplOwpJbmRleDogQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJv
bFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgJ
KHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIFRUeXBlJiBnZXRUeXBl
KCkgeyByZXR1cm4gdHlwZTsgfSAgICAKICAgICBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGU7IH0KICAgICBib29sIGlzVXNlclR5cGUoKSBjb25zdCB7IHJldHVybiB1
c2VyVHlwZTsgfQotICAgIHZvaWQgY2hhbmdlUXVhbGlmaWVyKFRRdWFsaWZpZXIgcXVhbGlmaWVy
KSB7IHR5cGUuY2hhbmdlUXVhbGlmaWVyKHF1YWxpZmllcik7IH0KKyAgICB2b2lkIHNldFF1YWxp
ZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZpZXIp
OyB9CiAgICAgdm9pZCB1cGRhdGVBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSAqdCkgeyBhcnJh
eUluZm9ybWF0aW9uVHlwZSA9IHQ7IH0KICAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5
cGUoKSB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQogCkluZGV4OiBBTkdMRS9zcmMv
Y29tcGlsZXIvVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMu
aAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvVHlwZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsMjggKzgyLDI3IEBAIHR5cGVkZWYgVE1hcDxUVHlwZUxpc3QqLCBUVHlw
ZUxpc3QqPjo6aXQKIGNsYXNzIFRUeXBlIHsKIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCi0gICAgZXhwbGljaXQgVFR5cGUoVEJhc2lj
VHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgaW50IHMg
PSAxLCBib29sIG0gPSBmYWxzZSwgYm9vbCBhID0gZmFsc2UpIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwg
bWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBh
cnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFt
ZSgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgfQorICAgIFRUeXBlKCkge30KKyAg
ICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVt
cG9yYXJ5LCBpbnQgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgorICAg
ICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1h
dHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSgw
KSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlw
ZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQorICAgIHsKKyAgICB9
CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1
YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJy
YXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCks
IGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVO
YW1lKDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHAudXNlckRlZikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhwLnVzZXJEZWYt
PmdldFR5cGVOYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIGV4cGxpY2l0IFRUeXBlKFRUeXBl
TGlzdCogdXNlckRlZiwgY29uc3QgVFN0cmluZyYgbiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZp
bmVkKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVj
aXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2Up
LCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUodXNlckRlZiksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwg
YXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lID0gTmV3UG9vbFRTdHJpbmcobi5j
X3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgZXhwbGljaXQgVFR5
cGUoKSB7fQotICAgIHZpcnR1YWwgflRUeXBlKCkge30KLQotICAgIFRUeXBlKGNvbnN0IFRUeXBl
JiB0eXBlKSB7ICp0aGlzID0gdHlwZTsgfQorICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVj
aXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSks
IG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUp
LAorICAgICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNp
emUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCks
IHR5cGVOYW1lKDApCisgICAgeworICAgICAgICBpZiAocC51c2VyRGVmKSB7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdldFN0cnVjdCgpOworICAgICAgICAgICAgdHlwZU5h
bWUgPSBOZXdQb29sVFN0cmluZyhwLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkuY19zdHIoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgVFR5cGUoVFR5cGVMaXN0KiB1c2VyRGVmLCBjb25zdCBUU3Ry
aW5nJiBuLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKKyAgICAgICAgICAgIHR5cGUo
RWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6ZSgx
KSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAg
ICBzdHJ1Y3R1cmUodXNlckRlZiksIHN0cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwg
YXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKQorICAgIHsK
KyAgICAgICAgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgIH0KIAog
ICAgIHZvaWQgY29weVR5cGUoY29uc3QgVFR5cGUmIGNvcHlPZiwgVFN0cnVjdHVyZU1hcCYgcmVt
YXBwZXIpCiAgICAgewpAQCAtMTU3LDc3ICsxNTYsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbmV3VHlwZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBl
IHQsIGludCBzLCBib29sIG0sIGJvb2wgYSwgaW50IGFTID0gMCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IHR5cGUgPSB0OyBzaXplID0gczsgbWF0cml4ID0gbTsgYXJyYXkgPSBhOyBh
cnJheVNpemUgPSBhUzsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlKFRCYXNpY1R5cGUgdCwg
aW50IHMsIGJvb2wgbSwgVFR5cGUqIHVzZXJEZWYgPSAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgdHlwZSA9IHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0g
czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IG07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodXNlckRlZikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUgPSB1c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIGFycmF5IGluZm9ybWF0aW9uIGludGFjdC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFR5cGVOYW1l
KGNvbnN0IFRTdHJpbmcmIG4pIHsgdHlwZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpZWxkTmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IGZp
ZWxkTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0
IFRTdHJpbmcmIGdldFR5cGVOYW1lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGFzc2VydCh0eXBl
TmFtZSk7Ci0gICAgICAgIHJldHVybiAqdHlwZU5hbWU7Ci0gICAgfQorICAgIFRCYXNpY1R5cGUg
Z2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIHZvaWQgc2V0QmFzaWNU
eXBlKFRCYXNpY1R5cGUgdCkgeyB0eXBlID0gdDsgfQogCi0gICAgdmlydHVhbCBjb25zdCBUU3Ry
aW5nJiBnZXRGaWVsZE5hbWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgYXNzZXJ0KGZpZWxkTmFt
ZSk7Ci0gICAgICAgIHJldHVybiAqZmllbGROYW1lOwotICAgIH0KKyAgICBUUHJlY2lzaW9uIGdl
dFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHByZWNpc2lvbjsgfQorICAgIHZvaWQgc2V0UHJl
Y2lzaW9uKFRQcmVjaXNpb24gcCkgeyBwcmVjaXNpb24gPSBwOyB9CiAKLSAgICB2aXJ0dWFsIFRC
YXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQotICAgIHZpcnR1
YWwgVFByZWNpc2lvbiBnZXRQcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBwcmVjaXNpb247IH0K
LSAgICB2aXJ0dWFsIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gcXVh
bGlmaWVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNoYW5nZVByZWNpc2lvbihUUHJlY2lzaW9uIHAp
IHsgcHJlY2lzaW9uID0gcDsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VRdWFsaWZpZXIoVFF1
YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7IH0KKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmll
cigpIGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRR
dWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CiAKICAgICAvLyBPbmUtZGltZW5zaW9uYWwg
c2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQotICAgIHZpcnR1YWwgaW50IGdldE5vbWluYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQotCi0gICAgLy8gRnVsbC1kaW1lbnNpb25hbCBz
aXplIG9mIHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBlCi0gICAgdmlydHVhbCBpbnQgZ2V0SW5zdGFu
Y2VTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtYXRyaXgpCi0gICAgICAgICAgICBy
ZXR1cm4gc2l6ZSAqIHNpemU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBzaXpl
OwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1h
dHJpeCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5KCkgY29uc3Qg
IHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgYm9vbCBpc0ZpZWxkKCkgY29u
c3QgeyByZXR1cm4gZmllbGROYW1lICE9IDA7IH0KLSAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29u
c3QgeyByZXR1cm4gYXJyYXlTaXplOyB9Ci0gICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsg
YXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9Ci0gICAgdm9pZCBzZXRNYXhBcnJheVNpemUg
KGludCBzKSB7IG1heEFycmF5U2l6ZSA9IHM7IH0KLSAgICBpbnQgZ2V0TWF4QXJyYXlTaXplICgp
IGNvbnN0IHsgcmV0dXJuIG1heEFycmF5U2l6ZTsgfQotICAgIHZvaWQgY2xlYXJBcnJheW5lc3Mo
KSB7IGFycmF5ID0gZmFsc2U7IGFycmF5U2l6ZSA9IDA7IG1heEFycmF5U2l6ZSA9IDA7IH0KLSAg
ICB2b2lkIHNldEFycmF5SW5mb3JtYXRpb25UeXBlKFRUeXBlKiB0KSB7IGFycmF5SW5mb3JtYXRp
b25UeXBlID0gdDsgfQotICAgIFRUeXBlKiBnZXRBcnJheUluZm9ybWF0aW9uVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGFycmF5SW5mb3JtYXRpb25UeXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA+IDEgJiYgIW1hdHJpeDsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFz
dHJ1Y3R1cmU7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJhc2lj
VHlwZSB0KSB7Ci0gICAgICAgIHN3aXRjaCAodCkgewotICAgICAgICBjYXNlIEVidFZvaWQ6ICAg
ICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOyAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1
cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
OiAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVy
biAidW5rbm93biB0eXBlIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBjb25zdCBjaGFyKiBnZXRC
YXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIFRUeXBlOjpnZXRCYXNpY1N0cmluZyh0eXBlKTsg
fQotICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygpIGNvbnN0IHsgcmV0dXJuIDo6
Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KLSAgICBjb25zdCBjaGFyKiBnZXRRdWFs
aWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpOyB9Ci0gICAgVFR5cGVMaXN0KiBnZXRTdHJ1Y3QoKSB7IHJldHVybiBzdHJ1Y3R1cmU7IH0K
LQorICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KKyAgICB2
b2lkIHNldE5vbWluYWxTaXplKGludCBzKSB7IHNpemUgPSBzOyB9CisgICAgLy8gRnVsbCBzaXpl
IG9mIHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBlCiAgICAgaW50IGdldE9iamVjdFNpemUoKSBjb25z
dAogICAgIHsKICAgICAgICAgaW50IHRvdGFsU2l6ZTsKQEAgLTI0NSw3ICsxODYsNDUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdG90YWxTaXplOwogICAgIH0KIAorICAgIGJvb2wgaXNNYXRy
aXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KKyAgICB2b2lkIHNl
dE1hdHJpeChib29sIG0pIHsgbWF0cml4ID0gbTsgfQorCisgICAgYm9vbCBpc0FycmF5KCkgY29u
c3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9CisgICAgaW50IGdldEFycmF5U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQorICAgIHZvaWQgc2V0QXJyYXlTaXplKGlu
dCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQorICAgIGludCBnZXRNYXhBcnJh
eVNpemUgKCkgY29uc3QgeyByZXR1cm4gbWF4QXJyYXlTaXplOyB9CisgICAgdm9pZCBzZXRNYXhB
cnJheVNpemUgKGludCBzKSB7IG1heEFycmF5U2l6ZSA9IHM7IH0KKyAgICB2b2lkIGNsZWFyQXJy
YXluZXNzKCkgeyBhcnJheSA9IGZhbHNlOyBhcnJheVNpemUgPSAwOyBtYXhBcnJheVNpemUgPSAw
OyB9CisgICAgdm9pZCBzZXRBcnJheUluZm9ybWF0aW9uVHlwZShUVHlwZSogdCkgeyBhcnJheUlu
Zm9ybWF0aW9uVHlwZSA9IHQ7IH0KKyAgICBUVHlwZSogZ2V0QXJyYXlJbmZvcm1hdGlvblR5cGUo
KSBjb25zdCB7IHJldHVybiBhcnJheUluZm9ybWF0aW9uVHlwZTsgfQorCisgICAgYm9vbCBpc1Zl
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KKyAgICBib29sIGlz
U2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVy
ZTsgfQorCiAgICAgVFR5cGVMaXN0KiBnZXRTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBzdHJ1Y3R1
cmU7IH0KKyAgICB2b2lkIHNldFN0cnVjdChUVHlwZUxpc3QqIHMpIHsgc3RydWN0dXJlID0gczsg
fQorCisgICAgY29uc3QgVFN0cmluZyYgZ2V0VHlwZU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KHR5cGVOYW1lKTsKKyAgICAgICAgcmV0dXJuICp0eXBlTmFtZTsKKyAgICB9Cisg
ICAgdm9pZCBzZXRUeXBlTmFtZShjb25zdCBUU3RyaW5nJiBuKQorICAgIHsKKyAgICAgICAgdHlw
ZU5hbWUgPSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOworICAgIH0KKworICAgIGJvb2wgaXNG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIGZpZWxkTmFtZSAhPSAwOyB9CisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0RmllbGROYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydChmaWVsZE5hbWUp
OworICAgICAgICByZXR1cm4gKmZpZWxkTmFtZTsKKyAgICB9CisgICAgdm9pZCBzZXRGaWVsZE5h
bWUoY29uc3QgVFN0cmluZyYgbikKKyAgICB7CisgICAgICAgIGZpZWxkTmFtZSA9IE5ld1Bvb2xU
U3RyaW5nKG4uY19zdHIoKSk7CisgICAgfQorCiAgICAgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUo
KSB7CiAgICAgICAgIGlmICghbWFuZ2xlZCkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IE5ld1Bv
b2xUU3RyaW5nKCIiKTsKQEAgLTI1NSw2ICsyMzQsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0
dXJuICptYW5nbGVkOwogICAgIH0KKwogICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRU
eXBlJiByaWdodCkgY29uc3QgewogICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5
cGUgICAmJgogICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgpAQCAt
MjgyLDYgKzI2MiwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
KworICAgIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gOjpnZXRC
YXNpY1N0cmluZyh0eXBlKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFByZWNpc2lvblN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIDo6Z2V0UHJlY2lzaW9uU3RyaW5nKHByZWNpc2lvbik7IH0KKyAgICBj
b25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiA6OmdldFF1YWxp
ZmllclN0cmluZyhxdWFsaWZpZXIpOyB9CiAgICAgVFN0cmluZyBnZXRDb21wbGV0ZVN0cmluZygp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0yOTUsMTEgKzI3OSwxMiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdW5zaWduZWQgaW50IG1hdHJpeCAgOiAxOwogICAgIHVuc2lnbmVkIGludCBhcnJheSAgIDog
MTsKICAgICBpbnQgYXJyYXlTaXplOworICAgIGludCBtYXhBcnJheVNpemU7CisgICAgVFR5cGUq
IGFycmF5SW5mb3JtYXRpb25UeXBlOwogCiAgICAgVFR5cGVMaXN0KiBzdHJ1Y3R1cmU7ICAgICAg
Ly8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAogICAgIG11dGFibGUgaW50IHN0cnVjdHVyZVNp
emU7Ci0gICAgaW50IG1heEFycmF5U2l6ZTsKLSAgICBUVHlwZSogYXJyYXlJbmZvcm1hdGlvblR5
cGU7CisKICAgICBUU3RyaW5nICpmaWVsZE5hbWU7ICAgICAgICAgLy8gZm9yIHN0cnVjdHVyZSBm
aWVsZCBuYW1lcwogICAgIFRTdHJpbmcgKm1hbmdsZWQ7CiAgICAgVFN0cmluZyAqdHlwZU5hbWU7
ICAgICAgICAgIC8vIGZvciBzdHJ1Y3R1cmUgZmllbGQgdHlwZSBuYW1lCkluZGV4OiBBTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZy5sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nLmwJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
bAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIGludCBQYVBhcnNlU3RyaW5ncyhj
aGFyKiBhcmd2W10sIGludCBzdHIKICAgIAogICAgIGlmICgqY3BwLT5QYVN0ckxlbiA+PSAwKSB7
ICAgIAogICAgICAgICBpbnQgcmV0ID0geXlwYXJzZSgodm9pZCopKCZwYXJzZUNvbnRleHRMb2Nh
bCkpOwotICAgICAgICBpZiAoY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRM
b2NhbC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4g
MCkKKyAgICAgICAgaWYgKHJldCB8fCBjcHAtPkNvbXBpbGVFcnJvciA9PSAxIHx8IHBhcnNlQ29u
dGV4dExvY2FsLnJlY292ZXJlZEZyb21FcnJvciB8fCBwYXJzZUNvbnRleHRMb2NhbC5udW1FcnJv
cnMgPiAwKQogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0zMTgsNyArMzE4LDcgQEAgaW50IFBhUGFyc2VTdHJpbmdzKGNoYXIq
IGFyZ3ZbXSwgaW50IHN0cgogICAgICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCB5eWVycm9yKGNo
YXIgKnMpIAordm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKnMpIAogewogICAgIGlmICgoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+QWZ0ZXJFT0YpIHsKICAgICAgICAgaWYgKGNwcC0+dG9rZW5z
QmVmb3JlRU9GID09IDEpIHsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcueQkocmV2aXNpb24gNjY2MTEp
CisrKyBBTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIGNvbXBpbGVyL3Rvb2xzLiBSZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXgKICNkZWZp
bmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBhcnNlQ29udGV4dExvY2FsKSkKICNk
ZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwKICNkZWZpbmUgWVlfREVDTCBpbnQg
eXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VDb250ZXh0TG9jYWwpCi1leHRlcm4g
dm9pZCB5eWVycm9yKGNoYXIqKTsKK2V4dGVybiB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciopOwog
CiAjZGVmaW5lIEZSQUdfVkVSVF9PTkxZKFMsIEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFn
ZSAhPSBFU2hMYW5nRnJhZ21lbnQgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAg
LTMxMSw3ICszMTEsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAkJC0+
c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZx
VGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgJDEtPmlzTWF0cml4KCkpKTsKIAogICAg
ICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCi0g
ICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPmNoYW5nZVF1YWxpZmllcihFdnFD
b25zdCk7CisgICAgICAgICAgICAgICAgJCQtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmll
cihFdnFDb25zdCk7CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4KCkgJiYgJDEtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKICAgICAgICAgICAgICQkLT5zZXRU
eXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25z
dCwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKICAgICAgICAgZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpCkBAIC0zODksNyArMzg5LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewog
ICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBUVHlwZUxp
c3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBjb25z
dCBUVHlwZUxpc3QqIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CiAgICAgICAg
ICAgICBpZiAoZmllbGRzID09IDApIHsKICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIs
ICIiKTsKICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTQxMyw3
ICs0MTMsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZSgqKCpmaWVsZHMpW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9m
IHRoZSBzdHJ1Y3R1cmUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0
aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1
cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5j
aGFuZ2VRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICQk
LT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwpAQCAtNjczLDcgKzY3Myw3IEBAIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxs
KSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY2Fubm90
IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBUVHlwZTo6Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSksICIi
KTsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3Qg
Y29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CiAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgJDEu
dHlwZSA9IEVidEZsb2F0OwogICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
CkBAIC0xMDA3LDEyICsxMDA3LDEyIEBAIGRlY2xhcmF0aW9uCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHByb3RvdHlwZS0+c2V0T3BlcmF0b3IoRU9wUHJvdG90
eXBlKTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOwogICAgICAgICAk
JCA9IHByb3RvdHlwZTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09M
T04gewogICAgICAgICBpZiAoJDEuaW50ZXJtQWdncmVnYXRlKQotICAgICAgICAgICAgJDEuaW50
ZXJtQWdncmVnYXRlLT5zZXRPcGVyYXRvcihFT3BEZWNsYXJhdGlvbik7CisgICAgICAgICAgICAk
MS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKICAgICAgICAgJCQgPSAk
MS5pbnRlcm1BZ2dyZWdhdGU7CiAgICAgfQogICAgIHwgUFJFQ0lTSU9OIHByZWNpc2lvbl9xdWFs
aWZpZXIgdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyBTRU1JQ09MT04gewpAQCAtMTc5NSwxOSArMTc5
NSwyNCBAQCBzdHJ1Y3RfZGVjbGFyYXRpb24KICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93IGFzcGVjdHMg
b2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCisgICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byBy
ZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKICAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAoKiQkKVtpXS50eXBlLT5zZXRUeXBlKCQxLnR5cGUs
ICQxLnNpemUsICQxLm1hdHJpeCwgJDEudXNlckRlZik7CisgICAgICAgICAgICBUVHlwZSogdHlw
ZSA9ICgqJCQpW2ldLnR5cGU7CisgICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUoJDEudHlw
ZSk7CisgICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgkMS5zaXplKTsKKyAgICAgICAg
ICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgpOwogCiAgICAgICAgICAgICAvLyBkb24ndCBh
bGxvdyBhcnJheXMgb2YgYXJyYXlzCi0gICAgICAgICAgICBpZiAoKCokJClbaV0udHlwZS0+aXNB
cnJheSgpKSB7CisgICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMS5saW5lLCAkMSkp
CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCQxLmFycmF5KQotICAgICAgICAgICAgICAgICgqJCQpW2ld
LnR5cGUtPnNldEFycmF5U2l6ZSgkMS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCQxLnVz
ZXJEZWYpCi0gICAgICAgICAgICAgICAgKCokJClbaV0udHlwZS0+c2V0VHlwZU5hbWUoJDEudXNl
ckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXpl
KCQxLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoJDEudXNlckRlZikgeworICAgICAgICAg
ICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisgICAgICAg
ICAgICAgICAgdHlwZS0+c2V0VHlwZU5hbWUoJDEudXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgOwpAQCAtMTg3Myw3ICsxODc4LDcg
QEAgY29tcG91bmRfc3RhdGVtZW50CiAgICAgOiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQg
PSAwOyB9CiAgICAgfCBMRUZUX0JSQUNFIHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IH0gc3RhdGVtZW50X2xpc3QgeyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9
IFJJR0hUX0JSQUNFIHsKICAgICAgICAgaWYgKCQzICE9IDApCi0gICAgICAgICAgICAkMy0+c2V0
T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNl
KTsKICAgICAgICAgJCQgPSAkMzsKICAgICB9CiAgICAgOwpAQCAtMTg5MCw3ICsxODk1LDcgQEAg
Y29tcG91bmRfc3RhdGVtZW50X25vX25ld19zY29wZQogICAgIH0KICAgICB8IExFRlRfQlJBQ0Ug
c3RhdGVtZW50X2xpc3QgUklHSFRfQlJBQ0UgewogICAgICAgICBpZiAoJDIpCi0gICAgICAgICAg
ICAkMi0+c2V0T3BlcmF0b3IoRU9wU2VxdWVuY2UpOworICAgICAgICAgICAgJDItPnNldE9wKEVP
cFNlcXVlbmNlKTsKICAgICAgICAgJCQgPSAkMjsKICAgICB9CiAgICAgOwpJbmRleDogQU5HTEUv
c3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21w
aWxlci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGls
ZXIvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw4ICsyMDMsMTAgQEAgcHVi
bGljOgogICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoR2xvYmFsUG9vbEFsbG9jYXRvcikK
IAogICAgIFRJbnRlcm1Ob2RlKCkgOiBsaW5lKDApIHt9Ci0gICAgdmlydHVhbCBUU291cmNlTG9j
IGdldExpbmUoKSBjb25zdCB7IHJldHVybiBsaW5lOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExp
bmUoVFNvdXJjZUxvYyBsKSB7IGxpbmUgPSBsOyB9CisKKyAgICBUU291cmNlTG9jIGdldExpbmUo
KSBjb25zdCB7IHJldHVybiBsaW5lOyB9CisgICAgdm9pZCBzZXRMaW5lKFRTb3VyY2VMb2MgbCkg
eyBsaW5lID0gbDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJz
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCBUSW50ZXJtVHlwZWQqIGdldEFzVHlwZWQoKSB7IHJldHVy
biAwOyB9CiAgICAgdmlydHVhbCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogZ2V0QXNDb25zdGFudFVu
aW9uKCkgeyByZXR1cm4gMDsgfQpAQCAtMjE1LDYgKzIxNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIDA7IH0KICAgICB2
aXJ0dWFsIFRJbnRlcm1Mb29wKiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gMDsgfQogICAgIHZp
cnR1YWwgflRJbnRlcm1Ob2RlKCkgeyB9CisKIHByb3RlY3RlZDoKICAgICBUU291cmNlTG9jIGxp
bmU7CiB9OwpAQCAtMjMzLDIyICsyMzYsMjMgQEAgc3RydWN0IFRJbnRlcm1Ob2RlUGFpciB7CiBj
bGFzcyBUSW50ZXJtVHlwZWQgOiBwdWJsaWMgVEludGVybU5vZGUgewogcHVibGljOgogICAgIFRJ
bnRlcm1UeXBlZChjb25zdCBUVHlwZSYgdCkgOiB0eXBlKHQpICB7IH0KLSAgICB2aXJ0dWFsIFRJ
bnRlcm1UeXBlZCogZ2V0QXNUeXBlZCgpICAgICAgICAgeyByZXR1cm4gdGhpczsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRUeXBlKGNvbnN0IFRUeXBlJiB0KSB7IHR5cGUgPSB0OyB9Ci0gICAgdmly
dHVhbCBjb25zdCBUVHlwZSYgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KLSAgICB2
aXJ0dWFsIFRUeXBlKiBnZXRUeXBlUG9pbnRlcigpIHsgcmV0dXJuICZ0eXBlOyB9Ci0KLSAgICB2
aXJ0dWFsIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRC
YXNpY1R5cGUoKTsgfQotICAgIHZpcnR1YWwgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25z
dCB7IHJldHVybiB0eXBlLmdldFF1YWxpZmllcigpOyB9Ci0gICAgdmlydHVhbCBUUHJlY2lzaW9u
IGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KLSAg
ICB2aXJ0dWFsIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9t
aW5hbFNpemUoKTsgfQotICAgIHZpcnR1YWwgaW50IGdldFNpemUoKSBjb25zdCB7IHJldHVybiB0
eXBlLmdldEluc3RhbmNlU2l6ZSgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTWF0cml4KCkgY29u
c3QgeyByZXR1cm4gdHlwZS5pc01hdHJpeCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXko
KSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzU2NhbGFyKCk7IH0KLSAgICBjb25z
dCBjaGFyKiBnZXRCYXNpY1N0cmluZygpICAgICAgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNp
Y1N0cmluZygpOyB9Ci0gICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgIGNvbnN0
IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFRJbnRl
cm1UeXBlZCogZ2V0QXNUeXBlZCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZvaWQgc2V0VHlw
ZShjb25zdCBUVHlwZSYgdCkgeyB0eXBlID0gdDsgfQorICAgIGNvbnN0IFRUeXBlJiBnZXRUeXBl
KCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQorICAgIFRUeXBlKiBnZXRUeXBlUG9pbnRlcigpIHsg
cmV0dXJuICZ0eXBlOyB9CisKKyAgICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KKyAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmll
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KKyAgICBUUHJlY2lzaW9u
IGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAg
ICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldE5vbWluYWxTaXpl
KCk7IH0KKyAgICAKKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc01h
dHJpeCgpOyB9CisgICAgYm9vbCBpc0FycmF5KCkgIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNBcnJh
eSgpOyB9CisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNWZWN0b3Io
KTsgfQorICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzU2NhbGFyKCk7
IH0KKyAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUu
Z2V0QmFzaWNTdHJpbmcoKTsgfQorICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0KICAgICBUU3RyaW5n
IGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRDb21wbGV0ZVN0cmlu
ZygpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTI2NiwxMyArMjcwLDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHRlc3QoYVRlc3QpLAogICAgICAgICAgICAgdGVybWluYWwoYVRlcm1pbmFsKSwKICAg
ICAgICAgICAgIGZpcnN0KHRlc3RGaXJzdCkgeyB9CisKICAgICB2aXJ0dWFsIFRJbnRlcm1Mb29w
KiBnZXRBc0xvb3BOb2RlKCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmF2
ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisKICAgICBUSW50ZXJtTm9kZSAqZ2V0SW5pdCgpIHsg
cmV0dXJuIGluaXQ7IH0KICAgICBUSW50ZXJtTm9kZSAqZ2V0Qm9keSgpIHsgcmV0dXJuIGJvZHk7
IH0KICAgICBUSW50ZXJtVHlwZWQgKmdldFRlc3QoKSB7IHJldHVybiB0ZXN0OyB9CiAgICAgVElu
dGVybVR5cGVkICpnZXRUZXJtaW5hbCgpIHsgcmV0dXJuIHRlcm1pbmFsOyB9CiAgICAgYm9vbCB0
ZXN0Rmlyc3QoKSB7IHJldHVybiBmaXJzdDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVybU5v
ZGUgKmluaXQ7CiAgICAgVEludGVybU5vZGUgKmJvZHk7ICAgICAgIC8vIGNvZGUgdG8gbG9vcCBv
dmVyCkBAIC0yODksOSArMjk2LDEyIEBAIHB1YmxpYzoKICAgICBUSW50ZXJtQnJhbmNoKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkKiBlKSA6CiAgICAgICAgICAgICBmbG93T3Aob3ApLAogICAg
ICAgICAgICAgZXhwcmVzc2lvbihlKSB7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyc2VyKik7CisKICAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4g
Zmxvd09wOyB9CiAgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhw
cmVzc2lvbjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVE9wZXJhdG9yIGZsb3dPcDsKICAgICBUSW50
ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24temVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhw
OyIgc3RhdGVtZW50cwpAQCAtMzA3LDEwICszMTcsMTMgQEAgcHVibGljOgogICAgIC8vIGl0IGlz
IGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAg
IFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQp
IDogCiAgICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTt9
IAotICAgIHZpcnR1YWwgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gaWQ7IH0KLSAgICB2aXJ0
dWFsIGNvbnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgIH0K
KworICAgIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9CisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3ltYm9sOyB9CisKICAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwogICAgIHZpcnR1YWwgVEludGVybVN5bWJv
bCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQorCiBwcm90ZWN0ZWQ6CiAgICAg
aW50IGlkOwogICAgIFRTdHJpbmcgc3ltYm9sOwpAQCAtMzE5LDExICszMzIsMTUgQEAgcHJvdGVj
dGVkOgogY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsK
IHB1YmxpYzoKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbihDb25zdGFudFVuaW9uICp1bmlvblBv
aW50ZXIsIGNvbnN0IFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgdW5pb25BcnJheVBvaW50
ZXIodW5pb25Qb2ludGVyKSB7IH0KKwogICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9uQXJyYXlQ
b2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KICAgICB2b2lkIHNl
dFVuaW9uQXJyYXlQb2ludGVyKENvbnN0YW50VW5pb24gKmMpIHsgdW5pb25BcnJheVBvaW50ZXIg
PSBjOyB9CisKICAgICB2aXJ0dWFsIFRJbnRlcm1Db25zdGFudFVuaW9uKiBnZXRBc0NvbnN0YW50
VW5pb24oKSAgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50
ZXJtVHJhdmVyc2VyKiApOwotICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRv
ciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNl
KFRJbnRlcm1UcmF2ZXJzZXIqKTsKKworICAgIFRJbnRlcm1UeXBlZCogZm9sZChUT3BlcmF0b3Is
IFRJbnRlcm1UeXBlZCosIFRJbmZvU2luayYpOworCiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheVBvaW50ZXI7CiB9OwpAQCAtMzM0LDkgKzM1MSwxMSBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBUSW50ZXJtT3BlcmF0b3IgOiBwdWJsaWMgVEludGVybVR5cGVkIHsKIHB1Ymxp
YzoKICAgICBUT3BlcmF0b3IgZ2V0T3AoKSBjb25zdCB7IHJldHVybiBvcDsgfQorICAgIHZvaWQg
c2V0T3AoVE9wZXJhdG9yIG8pIHsgb3AgPSBvOyB9CisKICAgICBib29sIG1vZGlmaWVzU3RhdGUo
KSBjb25zdDsKICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcHJvbW90ZShUSW5mb1NpbmsmKSB7IHJldHVybiB0cnVlOyB9CisKIHByb3RlY3RlZDoKICAg
ICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJhdG9yIG8pIDogVEludGVybVR5cGVkKFRUeXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQpKSwgb3Aobykge30KICAgICBUSW50ZXJtT3BlcmF0b3IoVE9wZXJh
dG9yIG8sIFRUeXBlJiB0KSA6IFRJbnRlcm1UeXBlZCh0KSwgb3Aobykge30gICAKQEAgLTM0OSwx
MyArMzY4LDE2IEBAIHByb3RlY3RlZDoKIGNsYXNzIFRJbnRlcm1CaW5hcnkgOiBwdWJsaWMgVElu
dGVybU9wZXJhdG9yIHsKIHB1YmxpYzoKICAgICBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvciBvKSA6
IFRJbnRlcm1PcGVyYXRvcihvKSB7fQotICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJt
VHJhdmVyc2VyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExlZnQoVEludGVybVR5cGVkKiBuKSB7
IGxlZnQgPSBuOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJpZ2h0KFRJbnRlcm1UeXBlZCogbikg
eyByaWdodCA9IG47IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0TGVmdCgpIGNvbnN0
IHsgcmV0dXJuIGxlZnQ7IH0KLSAgICB2aXJ0dWFsIFRJbnRlcm1UeXBlZCogZ2V0UmlnaHQoKSBj
b25zdCB7IHJldHVybiByaWdodDsgfQorCiAgICAgdmlydHVhbCBUSW50ZXJtQmluYXJ5KiBnZXRB
c0JpbmFyeU5vZGUoKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgdmlydHVhbCBib29sIHByb21vdGUo
VEluZm9TaW5rJik7CisgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIq
KTsKKworICAgIHZvaWQgc2V0TGVmdChUSW50ZXJtVHlwZWQqIG4pIHsgbGVmdCA9IG47IH0KKyAg
ICB2b2lkIHNldFJpZ2h0KFRJbnRlcm1UeXBlZCogbikgeyByaWdodCA9IG47IH0KKyAgICBUSW50
ZXJtVHlwZWQqIGdldExlZnQoKSBjb25zdCB7IHJldHVybiBsZWZ0OyB9CisgICAgVEludGVybVR5
cGVkKiBnZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0OyB9CisgICAgYm9vbCBwcm9tb3Rl
KFRJbmZvU2luayYpOworCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVybVR5cGVkKiBsZWZ0OwogICAg
IFRJbnRlcm1UeXBlZCogcmlnaHQ7CkBAIC0zNjgsMTEgKzM5MCwxNCBAQCBjbGFzcyBUSW50ZXJt
VW5hcnkgOiBwdWJsaWMgVEludGVybU9wZXJhCiBwdWJsaWM6CiAgICAgVEludGVybVVuYXJ5KFRP
cGVyYXRvciBvLCBUVHlwZSYgdCkgOiBUSW50ZXJtT3BlcmF0b3IobywgdCksIG9wZXJhbmQoMCkg
e30KICAgICBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yIG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBv
cGVyYW5kKDApIHt9CisKICAgICB2aXJ0dWFsIHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYW5kKFRJbnRlcm1UeXBlZCogbykgeyBvcGVy
YW5kID0gbzsgfQotICAgIHZpcnR1YWwgVEludGVybVR5cGVkKiBnZXRPcGVyYW5kKCkgeyByZXR1
cm4gb3BlcmFuZDsgfQogICAgIHZpcnR1YWwgVEludGVybVVuYXJ5KiBnZXRBc1VuYXJ5Tm9kZSgp
IHsgcmV0dXJuIHRoaXM7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsK
KworICAgIHZvaWQgc2V0T3BlcmFuZChUSW50ZXJtVHlwZWQqIG8pIHsgb3BlcmFuZCA9IG87IH0K
KyAgICBUSW50ZXJtVHlwZWQqIGdldE9wZXJhbmQoKSB7IHJldHVybiBvcGVyYW5kOyB9ICAgIAor
ICAgIGJvb2wgcHJvbW90ZShUSW5mb1NpbmsmKTsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1U
eXBlZCogb3BlcmFuZDsKIH07CkBAIC0zODcsMjEgKzQxMiwyNCBAQCBwdWJsaWM6CiAgICAgVElu
dGVybUFnZ3JlZ2F0ZSgpIDogVEludGVybU9wZXJhdG9yKEVPcE51bGwpLCB1c2VyRGVmaW5lZChm
YWxzZSksIHByYWdtYVRhYmxlKDApIHsgfQogICAgIFRJbnRlcm1BZ2dyZWdhdGUoVE9wZXJhdG9y
IG8pIDogVEludGVybU9wZXJhdG9yKG8pLCBwcmFnbWFUYWJsZSgwKSB7IH0KICAgICB+VEludGVy
bUFnZ3JlZ2F0ZSgpIHsgZGVsZXRlIHByYWdtYVRhYmxlOyB9CisKICAgICB2aXJ0dWFsIFRJbnRl
cm1BZ2dyZWdhdGUqIGdldEFzQWdncmVnYXRlKCkgeyByZXR1cm4gdGhpczsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRPcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KLSAgICB2aXJ0dWFs
IFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5jZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4pIHsgbmFtZSA9IG47IH0KLSAg
ICB2aXJ0dWFsIGNvbnN0IFRTdHJpbmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9
CiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0KLSAgICB2
aXJ0dWFsIFRRdWFsaWZpZXJMaXN0JiBnZXRRdWFsaWZpZXIoKSB7IHJldHVybiBxdWFsaWZpZXI7
IH0KKworICAgIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7IHJldHVybiBzZXF1ZW5j
ZTsgfQorICAgIHZvaWQgc2V0TmFtZShjb25zdCBUU3RyaW5nJiBuKSB7IG5hbWUgPSBuOyB9Cisg
ICAgY29uc3QgVFN0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWU7IH0KKworICAg
IHZvaWQgc2V0VXNlckRlZmluZWQoKSB7IHVzZXJEZWZpbmVkID0gdHJ1ZTsgfQorICAgIGJvb2wg
aXNVc2VyRGVmaW5lZCgpIHsgcmV0dXJuIHVzZXJEZWZpbmVkOyB9CisgICAgVFF1YWxpZmllckxp
c3QmIGdldFF1YWxpZmllcigpIHsgcmV0dXJuIHF1YWxpZmllcjsgfQogICAgIHZvaWQgc2V0T3B0
aW1pemUoYm9vbCBvKSB7IG9wdGltaXplID0gbzsgfQotICAgIHZvaWQgc2V0RGVidWcoYm9vbCBk
KSB7IGRlYnVnID0gZDsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6
ZTsgfQorICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQogICAgIGJvb2wg
Z2V0RGVidWcoKSB7IHJldHVybiBkZWJ1ZzsgfQogICAgIHZvaWQgYWRkVG9QcmFnbWFUYWJsZShj
b25zdCBUUHJhZ21hVGFibGUmIHBUYWJsZSk7CiAgICAgY29uc3QgVFByYWdtYVRhYmxlJiBnZXRQ
cmFnbWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpwcmFnbWFUYWJsZTsgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2Fs
bG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRvcj0oY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCkBA
IC00MjMsMTIgKzQ1MSwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBUSW50ZXJtVHlwZWQoVFR5
cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKSksIGNvbmRpdGlvbihjb25kKSwgdHJ1ZUJsb2NrKHRy
dWVCKSwgZmFsc2VCbG9jayhmYWxzZUIpIHt9CiAgICAgVEludGVybVNlbGVjdGlvbihUSW50ZXJt
VHlwZWQqIGNvbmQsIFRJbnRlcm1Ob2RlKiB0cnVlQiwgVEludGVybU5vZGUqIGZhbHNlQiwgY29u
c3QgVFR5cGUmIHR5cGUpIDoKICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCh0eXBlKSwgY29uZGl0
aW9uKGNvbmQpLCB0cnVlQmxvY2sodHJ1ZUIpLCBmYWxzZUJsb2NrKGZhbHNlQikge30KKwogICAg
IHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CisKICAgICBib29sIHVz
ZXNUZXJuYXJ5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBnZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gY29uZGl0aW9uOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtTm9kZSogZ2V0VHJ1ZUJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZUJsb2NrOyB9Ci0gICAgdmlydHVhbCBUSW50ZXJtTm9kZSog
Z2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KLSAgICB2aXJ0dWFs
IFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0K
KyAgICBUSW50ZXJtTm9kZSogZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uZGl0aW9u
OyB9CisgICAgVEludGVybU5vZGUqIGdldFRydWVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWVC
bG9jazsgfQorICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2VCbG9jazsgfQorICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgp
IHsgcmV0dXJuIHRoaXM7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0
aW9uOwogICAgIFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7CkluZGV4OiBBTkdMRS9zcmMvY29tcGls
ZXIvcGFyc2VDb25zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3BhcnNl
Q29uc3QuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wYXJzZUNv
bnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMjMgKzEyLDMxIEBACiAvLwogY2xhc3MgVENv
bnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgotICAgIFRD
b25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJh
bSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxl
JiBzeW1UYWJsZSwgVFR5cGUmIHQpIDogdW5pb25BcnJheShjVW5pb24pLCB0eXBlKHQpLAotICAg
ICAgICBjb25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksIHNpbmdsZUNvbnN0YW50UGFyYW0o
c2luZ2xlQ29uc3RQYXJhbSksIGluZm9TaW5rKHNpbmspLCBzeW1ib2xUYWJsZShzeW1UYWJsZSks
IGVycm9yKGZhbHNlKSwgaXNNYXRyaXgoZmFsc2UpLCBtYXRyaXhTaXplKDApCi0JewotCQlpbmRl
eCA9IDA7Ci0JfQorICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJv
b2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYg
c2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpCisgICAgICAgIDogZXJyb3Io
ZmFsc2UpLAorICAgICAgICAgIGluZGV4KDApLAorICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9u
KSwKKyAgICAgICAgICB0eXBlKHQpLAorICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1
Y3RUeXBlKSwKKyAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0p
LAorICAgICAgICAgIGluZm9TaW5rKHNpbmspLAorICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRh
YmxlKSwKKyAgICAgICAgICBzaXplKDApLAorICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKKyAg
ICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICB9CiAKLQlib29sIGVycm9yOworICAgIGJvb2wg
ZXJyb3I7CiAKIHByb3RlY3RlZDoKLQl2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsK
LQl2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwotCWJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLQlib29sIHZpc2l0VW5h
cnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotCWJvb2wgdmlzaXRTZWxlY3Rpb24oVmlz
aXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLQlib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0JYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IFRJbnRlcm1Mb29wKik7Ci0JYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJy
YW5jaCopOworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZvaWQg
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOworICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgYm9vbCB2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqKTsKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0
LCBUSW50ZXJtQnJhbmNoKik7CiAKICAgICBpbnQgaW5kZXg7CiAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5jCShy
ZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvYXRvbS5j
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsMyBAQAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXAogQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRpb24u
CiAKQEAgLTYyNCw3ICs2MTksNyBAQCBzdGF0aWMgaW50IEFkZEF0b21GaXhlZChBdG9tVGFibGUg
KmF0YWJsCiAKIGludCBJbml0QXRvbVRhYmxlKEF0b21UYWJsZSAqYXRhYmxlLCBpbnQgaHRzaXpl
KQogewotICAgIGludCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBodHNpemUgPSBo
dHNpemUgPD0gMCA/IElOSVRfSEFTSF9UQUJMRV9TSVpFIDogaHRzaXplOwogICAgIGlmICghSW5p
dFN0cmluZ1RhYmxlKCZhdGFibGUtPnN0YWJsZSkpCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2F0b20uaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL2F0b20uaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NvbXBpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NvbXBpbGUuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwg
TlZJRElBIENvcnBvcmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL2NwcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
Y3BwLmMJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9jcHAuYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBv
cmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmgJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgogCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcHN0cnVjdC5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3Bwc3RydWN0LmMJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHBzdHJ1Y3Qu
Ywkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmMJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuYwko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgog
CkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL21lbW9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvbWVtb3J5LmgJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9tZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgogCklu
ZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3BhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcGFyc2VyLmgJKHJldmlzaW9uIDY2
NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9uLgogCkluZGV4
OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkocmV2aXNp
b24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYwkocmV2
aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
Ywkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuaAkocmV2
aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBvcmF0aW9u
LgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NsZ2xvYmFscy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgJ
KHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGds
b2JhbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBv
cmF0aW9uLgogCkluZGV4OiBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5bWJvbHMu
YwkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3N5
bWJvbHMuYwkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDMgQEAKLS8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8v
CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlwKIENvcHlyaWdodCAoYykgMjAwMiwgTlZJRElBIENvcnBv
cmF0aW9uLgogCkBAIC0xNTcsNyArMTUyLDcgQEAgU3ltYm9sICpOZXdTeW1ib2woU291cmNlTG9j
ICpsb2MsIFNjb3BlIAogewogICAgIFN5bWJvbCAqbFN5bWI7CiAgICAgY2hhciAqcGNoOwotICAg
IGludCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBsU3ltYiA9IChTeW1ib2wgKikg
bWVtX0FsbG9jKGZTY29wZS0+cG9vbCwgc2l6ZW9mKFN5bWJvbCkpOwogICAgIGxTeW1iLT5sZWZ0
ID0gTlVMTDsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3ltYm9scy5o
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc3lt
Ym9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsMyBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqXAogQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9y
YXRpb24uCiAKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwko
cmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vu
cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsMyBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KIC8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqXAogQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29ycG9yYXRp
b24uCiAKQEAgLTIxMCw3ICsyMDUsNyBAQCB2b2lkIERlbGV0ZVRva2VuU3RyZWFtKFRva2VuU3Ry
ZWFtICpwVG9rCiB2b2lkIFJlY29yZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCBpbnQgdG9rZW4s
IHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewogICAgIGNvbnN0IGNoYXIgKnM7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqc3RyPU5VTEw7CisgICAgY2hhciAqc3RyPU5VTEw7CiAKICAgICBpZiAodG9rZW4g
PiAyNTYpCiAgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1bnNpZ25lZCBjaGFyKSgodG9rZW4gJiAw
eDdmKSArIDB4ODApKTsKSW5kZXg6IEFOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9r
ZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tl
bnMuaAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3Rva2Vucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsMyBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqXAogQ29weXJpZ2h0IChjKSAyMDAyLCBOVklESUEgQ29y
cG9yYXRpb24uCiAKSW5kZXg6IEFOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBB
TkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMywx
MiBAQCBuYW1lc3BhY2UgZWdsCiB7CiBEaXNwbGF5OjpEaXNwbGF5KEhEQyBkZXZpY2VDb250ZXh0
KSA6IG1EYyhkZXZpY2VDb250ZXh0KQogeworICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKKyAgICAK
ICAgICBtRDNkOSA9IE5VTEw7CisgICAgbUQzZDlleCA9IE5VTEw7CiAgICAgbURldmljZSA9IE5V
TEw7CisgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CiAKICAgICBtQWRhcHRlciA9IEQzREFEQVBU
RVJfREVGQVVMVDsKIApAQCAtNTEsNyArNTUsMzggQEAgYm9vbCBEaXNwbGF5Ojppbml0aWFsaXpl
KCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgbUQzZDkgPSBEaXJlY3QzRENy
ZWF0ZTkoRDNEX1NES19WRVJTSU9OKTsKKyAgICBtRDNkOU1vZHVsZSA9IExvYWRMaWJyYXJ5KFRF
WFQoImQzZDkuZGxsIikpOworICAgIGlmIChtRDNkOU1vZHVsZSA9PSBOVUxMKQorICAgIHsKKyAg
ICAgICAgdGVybWluYXRlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIElEaXJlY3QzRDkqIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUZ1bmMpKFVJTlQpOwor
ICAgIERpcmVjdDNEQ3JlYXRlOUZ1bmMgRGlyZWN0M0RDcmVhdGU5UHRyID0gcmVpbnRlcnByZXRf
Y2FzdDxEaXJlY3QzRENyZWF0ZTlGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRp
cmVjdDNEQ3JlYXRlOSIpKTsKKworICAgIGlmIChEaXJlY3QzRENyZWF0ZTlQdHIgPT0gTlVMTCkK
KyAgICB7CisgICAgICAgIHRlcm1pbmF0ZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkRpcmVjdDNEQ3JlYXRlOUV4RnVuYyko
VUlOVCwgSURpcmVjdDNEOUV4KiopOworICAgIERpcmVjdDNEQ3JlYXRlOUV4RnVuYyBEaXJlY3Qz
RENyZWF0ZTlFeFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGlyZWN0M0RDcmVhdGU5RXhGdW5jPihH
ZXRQcm9jQWRkcmVzcyhtRDNkOU1vZHVsZSwgIkRpcmVjdDNEQ3JlYXRlOUV4IikpOworCisgICAg
Ly8gVXNlIERpcmVjdDNEOUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlz
IHZlcnNpb24gaXMgbGVzcworICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBhIGxvc3QgY29udGV4
dCwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcworICAgIC8vIGRlc2t0b3AuIERp
cmVjdDNEOUV4IGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBsYXRlciBpZiBzdWl0
YWJsZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUuCisgICAgaWYgKERpcmVjdDNEQ3JlYXRlOUV4UHRy
ICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RLX1ZFUlNJT04sICZtRDNk
OWV4KSkpCisgICAgeworICAgICAgICBBU1NFUlQobUQzZDlleCk7CisgICAgICAgIG1EM2Q5ZXgt
PlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm1EM2Q5KSk7CisgICAgICAgIEFTU0VSVChtRDNkOSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIG1EM2Q5ID0gRGlyZWN0M0RDcmVhdGU5UHRyKEQzRF9TREtfVkVSU0lPTik7Cisg
ICAgfQogCiAgICAgaWYgKG1EM2Q5KQogICAgIHsKQEAgLTY5LDg2ICsxMDQsOTEgQEAgYm9vbCBE
aXNwbGF5Ojppbml0aWFsaXplKCkKIAogICAgICAgICBpZiAobURldmljZUNhcHMuUGl4ZWxTaGFk
ZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKICAgICAgICAgewotICAgICAgICAgICAg
bUQzZDktPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1EM2Q5ID0gTlVMTDsKKyAgICAgICAgICAg
IHRlcm1pbmF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTEla
RUQsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OwotICAgICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9
IDA7CiAKLSAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMg
JiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURSkge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6
Om1pbihtTWluU3dhcEludGVydmFsLCAwKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1N
YXhTd2FwSW50ZXJ2YWwsIDApO30KLSAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50
YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX09ORSkgICAgICAge21NaW5Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAxKTsgbU1heFN3YXBJbnRlcnZh
bCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDEpO30KLSAgICAgICAgICAgIGlmIChtRGV2
aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykg
ICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsg
bU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KLSAgICAg
ICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZhbHMgJiBEM0RQUkVTRU5U
X0lOVEVSVkFMX1RIUkVFKSAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtTWluU3dh
cEludGVydmFsLCAzKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2
YWwsIDMpO30KLSAgICAgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRlcnZh
bHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVIpICAgICAge21NaW5Td2FwSW50ZXJ2YWwgPSBz
dGQ6Om1pbihtTWluU3dhcEludGVydmFsLCA0KTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4
KG1NYXhTd2FwSW50ZXJ2YWwsIDQpO30KKyAgICAgICAgbU1pblN3YXBJbnRlcnZhbCA9IDQ7Cisg
ICAgICAgIG1NYXhTd2FwSW50ZXJ2YWwgPSAwOwogCi0gICAgICAgICAgICBjb25zdCBEM0RGT1JN
QVQgcmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBEM0RGTVRfQTFSNUc1QjUsCi0gICAgICAgICAgICAvLyAgRDNERk1UX0EyUjEwRzEwQjEwLCAg
IC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFkUGl4ZWxzIHdpdGgg
VU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVyaW5nIHNraXBwZWQg
YSBjb2xvdXIgdmFsdWUuCi0gICAgICAgICAgICAgICAgRDNERk1UX0E4UjhHOEI4LAotICAgICAg
ICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1
LAotICAgICAgICAgICAgICAgIEQzREZNVF9YOFI4RzhCOAotICAgICAgICAgICAgfTsKKyAgICAg
ICAgaWYgKG1EZXZpY2VDYXBzLlByZXNlbnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5U
RVJWQUxfSU1NRURJQVRFKSB7bU1pblN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50
ZXJ2YWwsIDApOyBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
MCk7fQorICAgICAgICBpZiAobURldmljZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNE
UFJFU0VOVF9JTlRFUlZBTF9PTkUpICAgICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4o
bU1pblN3YXBJbnRlcnZhbCwgMSk7IG1NYXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dh
cEludGVydmFsLCAxKTt9CisgICAgICAgIGlmIChtRGV2aWNlQ2Fwcy5QcmVzZW50YXRpb25JbnRl
cnZhbHMgJiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTykgICAgICAge21NaW5Td2FwSW50ZXJ2YWwg
PSBzdGQ6Om1pbihtTWluU3dhcEludGVydmFsLCAyKTsgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6
bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDIpO30KKyAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlByZXNl
bnRhdGlvbkludGVydmFscyAmIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUUpICAgICB7bU1pblN3
YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1NaW5Td2FwSW50ZXJ2YWwsIDMpOyBtTWF4U3dhcEludGVy
dmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgMyk7fQorICAgICAgICBpZiAobURldmlj
ZUNhcHMuUHJlc2VudGF0aW9uSW50ZXJ2YWxzICYgRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSKSAg
ICAgIHttTWluU3dhcEludGVydmFsID0gc3RkOjptaW4obU1pblN3YXBJbnRlcnZhbCwgNCk7IG1N
YXhTd2FwSW50ZXJ2YWwgPSBzdGQ6Om1heChtTWF4U3dhcEludGVydmFsLCA0KTt9CiAKLSAgICAg
ICAgICAgIGNvbnN0IEQzREZPUk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXRzW10gPQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgLy8gIEQzREZNVF9EMTZfTE9DS0FCTEUsCi0gICAgICAgICAgICAg
ICAgRDNERk1UX0QzMiwKLSAgICAgICAgICAgIC8vICBEM0RGTVRfRDE1UzEsCi0gICAgICAgICAg
ICAgICAgRDNERk1UX0QyNFM4LAotICAgICAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKLSAgICAg
ICAgICAgIC8vICBEM0RGTVRfRDI0WDRTNCwKLSAgICAgICAgICAgICAgICBEM0RGTVRfRDE2LAot
ICAgICAgICAgICAgLy8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAotICAgICAgICAgICAgLy8gIEQz
REZNVF9EMjRGUzgKLSAgICAgICAgICAgIH07CisgICAgICAgIGNvbnN0IEQzREZPUk1BVCByZW5k
ZXJUYXJnZXRGb3JtYXRzW10gPQorICAgICAgICB7CisgICAgICAgICAgICBEM0RGTVRfQTFSNUc1
QjUsCisgICAgICAgIC8vICBEM0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAg
Y29uZm9ybWFuY2UgdGVzdCB1c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNp
bmcgaXQgdG8gdGhpbmsgdGhhdCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KKyAg
ICAgICAgICAgIEQzREZNVF9BOFI4RzhCOCwKKyAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCisg
ICAgICAgICAgICBEM0RGTVRfWDFSNUc1QjUsCisgICAgICAgICAgICBEM0RGTVRfWDhSOEc4QjgK
KyAgICAgICAgfTsKIAotICAgICAgICAgICAgRDNERElTUExBWU1PREUgY3VycmVudERpc3BsYXlN
b2RlOwotICAgICAgICAgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwg
JmN1cnJlbnREaXNwbGF5TW9kZSk7CisgICAgICAgIGNvbnN0IEQzREZPUk1BVCBkZXB0aFN0ZW5j
aWxGb3JtYXRzW10gPQorICAgICAgICB7CisgICAgICAgIC8vICBEM0RGTVRfRDE2X0xPQ0tBQkxF
LAorICAgICAgICAgICAgRDNERk1UX0QzMiwKKyAgICAgICAgLy8gIEQzREZNVF9EMTVTMSwKKyAg
ICAgICAgICAgIEQzREZNVF9EMjRTOCwKKyAgICAgICAgICAgIEQzREZNVF9EMjRYOCwKKyAgICAg
ICAgLy8gIEQzREZNVF9EMjRYNFM0LAorICAgICAgICAgICAgRDNERk1UX0QxNiwKKyAgICAgICAg
Ly8gIEQzREZNVF9EMzJGX0xPQ0tBQkxFLAorICAgICAgICAvLyAgRDNERk1UX0QyNEZTOAorICAg
ICAgICB9OwogCi0gICAgICAgICAgICBDb25maWdTZXQgY29uZmlnU2V0OworICAgICAgICBEM0RE
SVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgICAgIG1EM2Q5LT5HZXRBZGFwdGVy
RGlzcGxheU1vZGUobUFkYXB0ZXIsICZjdXJyZW50RGlzcGxheU1vZGUpOwogCi0gICAgICAgICAg
ICBmb3IgKGludCBmb3JtYXRJbmRleCA9IDA7IGZvcm1hdEluZGV4IDwgc2l6ZW9mKHJlbmRlclRh
cmdldEZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7IGZvcm1hdEluZGV4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1hdCA9IHJl
bmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworICAgICAgICBDb25maWdTZXQgY29uZmln
U2V0OwogCi0gICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1NVUkZBQ0UsIHJlbmRlclRhcmdldEZv
cm1hdCk7CisgICAgICAgIGZvciAoaW50IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCBz
aXplb2YocmVuZGVyVGFyZ2V0Rm9ybWF0cykgLyBzaXplb2YoRDNERk9STUFUKTsgZm9ybWF0SW5k
ZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgRDNERk9STUFUIHJlbmRlclRhcmdldEZvcm1h
dCA9IHJlbmRlclRhcmdldEZvcm1hdHNbZm9ybWF0SW5kZXhdOworCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5
cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNE
UlRZUEVfU1VSRkFDRSwgcmVuZGVyVGFyZ2V0Rm9ybWF0KTsKIAotICAgICAgICAgICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRl
eCA9IDA7IGRlcHRoU3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8g
c2l6ZW9mKEQzREZPUk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBkZXB0aFN0ZW5jaWxJbmRleCA9IDA7IGRl
cHRoU3RlbmNpbEluZGV4IDwgc2l6ZW9mKGRlcHRoU3RlbmNpbEZvcm1hdHMpIC8gc2l6ZW9mKEQz
REZPUk1BVCk7IGRlcHRoU3RlbmNpbEluZGV4KyspCisgICAgICAgICAgICAgICAgICAgIEQzREZP
Uk1BVCBkZXB0aFN0ZW5jaWxGb3JtYXQgPSBkZXB0aFN0ZW5jaWxGb3JtYXRzW2RlcHRoU3RlbmNp
bEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUu
Rm9ybWF0LCBEM0RVU0FHRV9ERVBUSFNURU5DSUwsIEQzRFJUWVBFX1NVUkZBQ0UsIGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEM0RGT1JN
QVQgZGVwdGhTdGVuY2lsRm9ybWF0ID0gZGVwdGhTdGVuY2lsRm9ybWF0c1tkZXB0aFN0ZW5jaWxJ
bmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIEQzRFVTQUdFX0RFUFRIU1RFTkNJTCwgRDNEUlRZUEVfU1VSRkFDRSwgZGVwdGhT
dGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUQzZDktPkNoZWNrRGVwdGhTdGVuY2lsTWF0Y2gobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJy
ZW50RGlzcGxheU1vZGUuRm9ybWF0LCByZW5kZXJUYXJnZXRGb3JtYXQsIGRlcHRoU3RlbmNpbEZv
cm1hdCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RlcHRoU3RlbmNpbE1hdGNoKG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgcmVuZGVyVGFyZ2V0Rm9ybWF0
LCBkZXB0aFN0ZW5jaWxGb3JtYXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEVudW1lcmF0ZSBtdWx0aS1zYW1w
bGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVs
dGktc2FtcGxpbmcKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdTZXQu
YWRkKGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRlcnZh
bCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdT
ZXQuYWRkKGN1cnJlbnREaXNwbGF5TW9kZSwgbU1pblN3YXBJbnRlcnZhbCwgbU1heFN3YXBJbnRl
cnZhbCwgcmVuZGVyVGFyZ2V0Rm9ybWF0LCBkZXB0aFN0ZW5jaWxGb3JtYXQsIDApOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEdpdmUgdGhl
IHNvcnRlZCBjb25maWdzIGEgdW5pcXVlIElEIGFuZCBzdG9yZSB0aGVtIGludGVybmFsbHkKLSAg
ICAgICAgICAgIEVHTGludCBpbmRleCA9IDE7Ci0gICAgICAgICAgICBmb3IgKENvbmZpZ1NldDo6
SXRlcmF0b3IgY29uZmlnID0gY29uZmlnU2V0Lm1TZXQuYmVnaW4oKTsgY29uZmlnICE9IGNvbmZp
Z1NldC5tU2V0LmVuZCgpOyBjb25maWcrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBDb25maWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7Ci0gICAgICAgICAgICAgICAgY29uZmln
dXJhdGlvbi5tQ29uZmlnSUQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICBpbmRleCsrOworICAg
ICAgICAvLyBHaXZlIHRoZSBzb3J0ZWQgY29uZmlncyBhIHVuaXF1ZSBJRCBhbmQgc3RvcmUgdGhl
bSBpbnRlcm5hbGx5CisgICAgICAgIEVHTGludCBpbmRleCA9IDE7CisgICAgICAgIGZvciAoQ29u
ZmlnU2V0OjpJdGVyYXRvciBjb25maWcgPSBjb25maWdTZXQubVNldC5iZWdpbigpOyBjb25maWcg
IT0gY29uZmlnU2V0Lm1TZXQuZW5kKCk7IGNvbmZpZysrKQorICAgICAgICB7CisgICAgICAgICAg
ICBDb25maWcgY29uZmlndXJhdGlvbiA9ICpjb25maWc7CisgICAgICAgICAgICBjb25maWd1cmF0
aW9uLm1Db25maWdJRCA9IGluZGV4OworICAgICAgICAgICAgaW5kZXgrKzsKIAotICAgICAgICAg
ICAgICAgIG1Db25maWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRpb24pOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgdGVybWluYXRlKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTg1LDYgKzIyNSwyNCBAQCB2b2lkIERpc3BsYXk6OnRlcm1pbmF0
ZSgpCiAgICAgICAgIG1EM2Q5LT5SZWxlYXNlKCk7CiAgICAgICAgIG1EM2Q5ID0gTlVMTDsKICAg
ICB9CisKKyAgICBpZiAobURldmljZVdpbmRvdykKKyAgICB7CisgICAgICAgIERlc3Ryb3lXaW5k
b3cobURldmljZVdpbmRvdyk7CisgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOworICAgIH0K
KyAgICAKKyAgICBpZiAobUQzZDlleCkKKyAgICB7CisgICAgICAgIG1EM2Q5ZXgtPlJlbGVhc2Uo
KTsKKyAgICAgICAgbUQzZDlleCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKG1EM2Q5TW9kdWxl
KQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzZDlNb2R1bGUpOworICAgICAgICBtRDNk
OU1vZHVsZSA9IE5VTEw7CisgICAgfQogfQogCiB2b2lkIERpc3BsYXk6OnN0YXJ0U2NlbmUoKQpA
QCAtMjU0LDEzMiArMzEyLDc0IEBAIGJvb2wgRGlzcGxheTo6Z2V0Q29uZmlnQXR0cmliKEVHTENv
bmZpZyAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU3VyZmFjZSAqRGlzcGxheTo6Y3JlYXRlV2lu
ZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZykKK2Jvb2wgRGlzcGxheTo6
Y3JlYXRlRGV2aWNlKCkKIHsKLSAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29u
ZmlnU2V0LmdldChjb25maWcpOworICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10g
PSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOworICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFz
c05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOworCisgICAgbURldmljZVdpbmRvdyA9IENyZWF0ZVdp
bmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElTQUJM
RUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVI
YW5kbGUoTlVMTCksIE5VTEwpOwogCiAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQ
YXJhbWV0ZXJzID0gezB9OwogCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNp
bEZvcm1hdCA9IGNvbmZpZ3VyYXRpb24tPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgLy8gVGhl
IGRlZmF1bHQgc3dhcCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwg
Y3JlYXRlIGEgbmV3IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCisgICAg
cHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dO
OwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGNvbmZpZ3VyYXRpb24tPm1SZW5kZXJUYXJn
ZXRGb3JtYXQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoID0gMDsKLSAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMDsKLSAgICBwcmVzZW50UGFy
YW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gY29uZmlndXJhdGlvbi0+bURlcHRoU2l6
ZSA/IFRSVUUgOiBGQUxTRTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0
ID0gRDNERk1UX1VOS05PV047CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRo
ID0gMTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gMTsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5FbmFibGVBdXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CiAgICAgcHJl
c2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VX
aW5kb3cgPSB3aW5kb3c7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5
ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAotICAgIHByZXNl
bnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8g
RklYTUU6IFVuaW1wbGVtZW50ZWQKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93
ID0gbURldmljZVdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxp
dHkgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJ
U0FNUExFX05PTkU7CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwg
PSBjb252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7Ci0gICAgcHJlc2VudFBhcmFtZXRl
cnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfQ09QWTsKLSAgICBwcmVzZW50UGFyYW1ldGVy
cy5XaW5kb3dlZCA9IFRSVUU7ICAgLy8gRklYTUUKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Td2Fw
RWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLldp
bmRvd2VkID0gVFJVRTsKIAotICAgIElEaXJlY3QzRFN3YXBDaGFpbjkgKnN3YXBDaGFpbiA9IE5V
TEw7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOwor
ICAgIERXT1JEIGJlaGF2aW9yRmxhZ3MgPSBEM0RDUkVBVEVfRlBVX1BSRVNFUlZFIHwgRDNEQ1JF
QVRFX05PV0lORE9XQ0hBTkdFUzsKIAotICAgIGlmICghbURldmljZSkKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNl
V2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJ
TkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7
CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQogICAgIHsKLSAgICAgICAgRFdPUkQgYmVoYXZpb3JGbGFncyA9IEQz
RENSRUFURV9GUFVfUFJFU0VSVkUgfCBEM0RDUkVBVEVfTk9XSU5ET1dDSEFOR0VTOworICAgICAg
ICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgIH0KIAotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfSEFSRFdBUkVfVkVSVEVYUFJPQ0VT
U0lORyB8IEQzRENSRUFURV9QVVJFREVWSUNFLCAmcHJlc2VudFBhcmFtZXRlcnMsICZtRGV2aWNl
KTsKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXN1bHQgPSBtRDNk
OS0+Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVo
YXZpb3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2Vu
dFBhcmFtZXRlcnMsICZtRGV2aWNlKTsKIAogICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVM
TCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCB3aW5kb3csIGJlaGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVY
UFJPQ0VTU0lORywgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7Ci0KLSAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgICAgICBpZiAo
bURldmljZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgbURldmljZS0+R2V0U3dhcENoYWluKDAsICZzd2FwQ2hhaW4pOwotICAgICAg
ICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVwdGhTdGVuY2lsU3VyZmFj
ZSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwogICAg
ICAgICB9CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmICghbVN1cmZhY2VTZXQu
ZW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgdGhlIGRldmljZSBhbHJlYWR5
IGV4aXN0cywgYW5kIHRoZXJlIGFyZSBvdGhlciBzdXJmYWNlcy93aW5kb3dzIGN1cnJlbnRseSBp
biB1c2UsIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgICAgICAgICAvLyBhIHNlcGFyYXRlIHN3YXAg
Y2hhaW4gZm9yIHRoZSBuZXcgZHJhdyBzdXJmYWNlLgotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVy
cywgJnN3YXBDaGFpbik7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9G
VklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFp
bnMuIE91dCBvZiBtZW1vcnkuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQUxMT0MsIChlZ2w6OlN1cmZhY2UqKU5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAvLyBDcmVhdGVB
ZGRpdGlvbmFsU3dhcENoYWluIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSBkZXB0
aHN0ZW5jaWwgc3VyZmFjZSwgdW5saWtlIAotICAgICAgICAgICAgLy8gQ3JlYXRlRGV2aWNlLCBz
byB3ZSBtdXN0IGRvIHNvIGV4cGxpY2l0bHkuCi0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJX
aWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRl
cnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVU
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmZGVwdGhT
dGVuY2lsU3VyZmFjZSwgTlVMTCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAot
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
ZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluLiBPdXQgb2YgbWVtb3J5LiIp
OwotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCAoZWdsOjpTdXJm
YWNlKilOVUxMKTsKLSAgICAgICAgICAgIH0KKyAgICAvLyBQZXJtYW5lbnQgbm9uLWRlZmF1bHQg
c3RhdGVzCisgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfUE9JTlRTUFJJVEVFTkFC
TEUsIFRSVUUpOwogCi0gICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgdGhlIGRl
dmljZSBhbHJlYWR5IGV4aXN0cywgYnV0IHRoZXJlIGFyZSBubyBzdXJmYWNlcyBpbiB1c2UsIHRo
ZW4gYWxsIHRoZSBzdXJmYWNlcy93aW5kb3dzCi0gICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVz
dHJveWVkLCBhbmQgd2Ugc2hvdWxkIHJlcHVycG9zZSB0aGUgb3JpZ2luYWxseSBjcmVhdGVkIGRl
cHRoc3RlbmNpbCBzdXJmYWNlIGZvcgotICAgICAgICAgICAgLy8gdXNlIHdpdGggdGhlIG5ldyBz
dXJmYWNlIHdlIGFyZSBjcmVhdGluZy4KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+UmVzZXQoJnByZXNlbnRQYXJhbWV0ZXJzKTsKKyAgICBtU2NlbmVTdGFydGVkID0gZmFs
c2U7CiAKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgcmVzZXQgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMgZm9yIGRldmlj
ZS4gT3V0IG9mIG1lbW9yeS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JB
RF9BTExPQywgKGVnbDo6U3VyZmFjZSopTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAgICAgIGlmIChtRGV2aWNl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBtRGV2aWNlLT5HZXRTd2FwQ2hhaW4oMCwgJnN3YXBDaGFpbik7Ci0g
ICAgICAgICAgICAgICAgbURldmljZS0+R2V0RGVwdGhTdGVuY2lsU3VyZmFjZSgmZGVwdGhTdGVu
Y2lsU3VyZmFjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdXJm
YWNlICpzdXJmYWNlID0gTlVMTDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGlmIChzd2Fw
Q2hhaW4pCi0gICAgewotICAgICAgICBzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgc3dhcENo
YWluLCBkZXB0aFN0ZW5jaWxTdXJmYWNlLCBjb25maWd1cmF0aW9uKTsKLSAgICAgICAgbVN1cmZh
Y2VTZXQuaW5zZXJ0KHN1cmZhY2UpOworU3VyZmFjZSAqRGlzcGxheTo6Y3JlYXRlV2luZG93U3Vy
ZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZykKK3sKKyAgICBjb25zdCBDb25maWcg
KmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwogCi0gICAgICAgIHN3YXBD
aGFpbi0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZh
Y2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93KTsKKyAgICBtU3VyZmFjZVNldC5pbnNlcnQo
c3VyZmFjZSk7CiAKICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5
OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUpCitFR0xDb250ZXh0IERpc3Bs
YXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCkKIHsKICAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNv
bmZpZ1NldC5nZXQoY29uZmlnSGFuZGxlKTsKIAotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2xDcmVhdGVDb250ZXh0KGNvbmZpZyk7CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENy
ZWF0ZUNvbnRleHQoY29uZmlnLCBzaGFyZUNvbnRleHQpOwogICAgIG1Db250ZXh0U2V0Lmluc2Vy
dChjb250ZXh0KTsKIAogICAgIHJldHVybiBjb250ZXh0OwpAQCAtNDY4LDQgKzQ2OCwyMyBAQCBE
M0RDQVBTOSBEaXNwbGF5OjpnZXREZXZpY2VDYXBzKCkKIHsKICAgICByZXR1cm4gbURldmljZUNh
cHM7CiB9CisKK3ZvaWQgRGlzcGxheTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBm
b3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpCit7CisgICAgZm9yIChpbnQgbXVsdGlTYW1w
bGVJbmRleCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExF
UzsgbXVsdGlTYW1wbGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBt
RDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRSVUUsIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5V
TEwpOworCisgICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJbmRleF0gPSBTVUND
RUVERUQocmVzdWx0KTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxheTo6Z2V0Q29tcHJlc3NlZFRl
eHR1cmVTdXBwb3J0KCkKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7
CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNw
bGF5TW9kZSk7CisKKyAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7Cit9CiB9CkluZGV4OiBBTkdMRS9zcmMvbGli
RUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAko
cmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBEaXNwbGF5CiAgICAgYm9vbCBnZXRDb25maWdB
dHRyaWIoRUdMQ29uZmlnIGNvbmZpZywgRUdMaW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7
CiAKICAgICBlZ2w6OlN1cmZhY2UgKmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVH
TENvbmZpZyBjb25maWcpOwotICAgIEVHTENvbnRleHQgY3JlYXRlQ29udGV4dChFR0xDb25maWcg
Y29uZmlnSGFuZGxlKTsKKyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNv
bmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCk7CiAKICAgICB2b2lk
IGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdm9pZCBkZXN0cm95
Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC02MCwxNiArNjAsMjIgQEAgY2xhc3Mg
RGlzcGxheQogCiAgICAgdmlydHVhbCBJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZpY2UoKTsKICAg
ICB2aXJ0dWFsIEQzRENBUFM5IGdldERldmljZUNhcHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJy
YXkpOworICAgIHZpcnR1YWwgYm9vbCBnZXRDb21wcmVzc2VkVGV4dHVyZVN1cHBvcnQoKTsKIAog
ICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEaXNwbGF5KTsKICAgICBj
b25zdCBIREMgbURjOwogCisgICAgSE1PRFVMRSBtRDNkOU1vZHVsZTsKKyAgICAKICAgICBVSU5U
IG1BZGFwdGVyOwogICAgIEQzRERFVlRZUEUgbURldmljZVR5cGU7Ci0gICAgSURpcmVjdDNEOSAq
bUQzZDk7CisgICAgSURpcmVjdDNEOSAqbUQzZDk7ICAvLyBBbHdheXMgdmFsaWQgYWZ0ZXIgc3Vj
Y2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KKyAgICBJRGlyZWN0M0Q5RXggKm1EM2Q5ZXg7ICAvLyBN
aWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgogICAgIElEaXJlY3QzRERl
dmljZTkgKm1EZXZpY2U7CiAgICAgRDNEQ0FQUzkgbURldmljZUNhcHM7CisgICAgSFdORCBtRGV2
aWNlV2luZG93OwogCiAgICAgYm9vbCBtU2NlbmVTdGFydGVkOwogICAgIEdMaW50IG1Td2FwSW50
ZXJ2YWw7CkBAIC04NCw2ICs5MCw4IEBAIGNsYXNzIERpc3BsYXkKIAogICAgIHR5cGVkZWYgc3Rk
OjpzZXQ8Z2w6OkNvbnRleHQqPiBDb250ZXh0U2V0OwogICAgIENvbnRleHRTZXQgbUNvbnRleHRT
ZXQ7CisKKyAgICBib29sIGNyZWF0ZURldmljZSgpOwogfTsKIH0KIApJbmRleDogQU5HTEUvc3Jj
L2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliRUdML1N1cmZh
Y2UuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3LDkgKzE3LDExIEBACiAKIG5hbWVzcGFjZSBlZ2wKIHsKLVN1
cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dhcENoYWluOSAqc3dh
cENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsLCBjb25zdCBDb25maWcgKmNv
bmZpZykgCi0gICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbVN3YXBDaGFpbihzd2FwQ2hhaW4pLCBt
RGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNpbCksIG1Db25maWcoY29uZmlnKQorU3VyZmFjZTo6U3Vy
ZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3cp
IAorICAgIDogbURpc3BsYXkoZGlzcGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5k
b3cpCiB7CisgICAgbVN3YXBDaGFpbiA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7
CiAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwogICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwogICAg
IG1GbGlwVGV4dHVyZSA9IE5VTEw7CkBAIC0zMCw0MiArMzIsNyBAQCBTdXJmYWNlOjpTdXJmYWNl
KERpc3BsYXkgKmRpc3BsYXksIElEaXJlCiAgICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9CQUNLX0JV
RkZFUjsKICAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7CiAKLSAgICBp
ZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPkFkZFJlZigpOwotICAg
ICAgICBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05P
LCAmbUJhY2tCdWZmZXIpOwotCi0gICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsK
LSAgICAgICAgbUJhY2tCdWZmZXItPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBt
V2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9u
LkhlaWdodDsKLQotICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5n
ZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRl
clRhcmdldChtV2lkdGgsIG1IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgZGVzY3JpcHRpb24u
TXVsdGlTYW1wbGVUeXBlLCBkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAm
bVJlbmRlclRhcmdldCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VU
T0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAg
ICAgICAgICAgZXJyb3IoRUdMX0JBRF9BTExPQyk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0KLSAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKG1XaWR0aCwgbUhlaWdodCwgMSwgRDNEVVNB
R0VfUkVOREVSVEFSR0VULCBkZXNjcmlwdGlvbi5Gb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJm1G
bGlwVGV4dHVyZSwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKLQotICAgICAgICAgICAgZXJyb3IoRUdMX0JB
RF9BTExPQyk7Ci0KLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIHJlc2V0U3dhcENoYWluKCk7
CiB9CiAKIFN1cmZhY2U6On5TdXJmYWNlKCkKQEAgLTEwNiwyMCArNzMsMTIxIEBAIFN1cmZhY2U6
On5TdXJmYWNlKCkKICAgICB9CiB9CiAKLUhXTkQgU3VyZmFjZTo6Z2V0V2luZG93SGFuZGxlKCkK
K3ZvaWQgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQogewotICAgIGlmIChtU3dhcENoYWluKQor
ICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKKwor
ICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKKworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVw
dGhTdGVuY2lsRm9ybWF0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9
IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IG1Db25maWctPm1S
ZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRo
U3RlbmNpbCA9IEZBTFNFOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVW5pbXBsZW1lbnRlZAorICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2Ft
cGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQK
KyAgICBwcmVzZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IERpc3BsYXk6OmNv
bnZlcnRJbnRlcnZhbChtQ29uZmlnLT5tTWluU3dhcEludGVydmFsKTsKKyAgICBwcmVzZW50UGFy
YW1ldGVycy5Td2FwRWZmZWN0ID0gRDNEU1dBUEVGRkVDVF9ESVNDQVJEOworICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLldpbmRvd2VkID0gVFJVRTsKKworICAgIFJFQ1Qgd2luZG93UmVjdDsKKyAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSB3aW5kb3dSZWN0LnJpZ2h0IC0gd2lu
ZG93UmVjdC5sZWZ0OworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQgPSB3
aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wOworCisgICAgSURpcmVjdDNEU3dhcENo
YWluOSAqc3dhcENoYWluID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hhaW4pOwor
CisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisK
KyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFpbnM6ICUw
OGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MpOworICAg
IH0KKworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWxTdXJmYWNlID0gTlVMTDsK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UocHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVz
ZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0LCBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZkZXB0
aFN0ZW5jaWxTdXJmYWNlLCBOVUxMKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7
Ci0gICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVyczsKLSAgICAg
ICAgbVN3YXBDaGFpbi0+R2V0UHJlc2VudFBhcmFtZXRlcnMoJnByZXNlbnRQYXJhbWV0ZXJzKTsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7CiAK
LSAgICAgICAgcmV0dXJuIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3c7CisgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAg
Y2hhaW46ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MpOwogICAgIH0KIAotICAgIHJldHVybiBOVUxMOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFy
Z2V0KHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckhlaWdodCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5N
dWx0aVNhbXBsZVR5cGUsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFM
U0UsICZyZW5kZXJUYXJnZXQsIE5VTEwpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7
CisgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKworICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFp
bjogJTA4bFgiLCByZXN1bHQpOworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQyk7
CisgICAgfQorCisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIElEaXJlY3Qz
RFRleHR1cmU5ICpmbGlwVGV4dHVyZSA9IE5VTEw7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlKHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVy
Rm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZmbGlwVGV4dHVyZSwgTlVMTCk7CisKKyAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9P
VVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKworICAgICAgICBz
d2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFjZS0+UmVsZWFz
ZSgpOworICAgICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKworICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgZmxpcCB0ZXh0dXJlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgiLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQyk7CisgICAgfQorCisg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmJhY2tCdWZmZXIgPSBOVUxMOworICAgIHN3YXBDaGFpbi0+
R2V0QmFja0J1ZmZlcigwLCBEM0RCQUNLQlVGRkVSX1RZUEVfTU9OTywgJmJhY2tCdWZmZXIpOwor
CisgICAgaWYgKG1Td2FwQ2hhaW4pIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICBpZiAobURl
cHRoU3RlbmNpbCkgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOworICAgIGlmIChtQmFja0J1ZmZl
cikgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKKyAgICBpZiAobVJlbmRlclRhcmdldCkgbVJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOworICAgIGlmIChtRmxpcFRleHR1cmUpIG1GbGlwVGV4dHVyZS0+
UmVsZWFzZSgpOworCisgICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldp
ZHRoOworICAgIG1IZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0Owor
CisgICAgbVN3YXBDaGFpbiA9IHN3YXBDaGFpbjsKKyAgICBtRGVwdGhTdGVuY2lsID0gZGVwdGhT
dGVuY2lsU3VyZmFjZTsKKyAgICBtQmFja0J1ZmZlciA9IGJhY2tCdWZmZXI7CisgICAgbVJlbmRl
clRhcmdldCA9IHJlbmRlclRhcmdldDsKKyAgICBtRmxpcFRleHR1cmUgPSBmbGlwVGV4dHVyZTsK
KworICAgIC8vIFRoZSBmbGlwIHN0YXRlIGJsb2NrIHJlY29yZGVkIG1GbGlwVGV4dHVyZSBzbyBp
dCBpcyBub3cgaW52YWxpZC4KKyAgICByZWxlYXNlUmVjb3JkZWRTdGF0ZShkZXZpY2UpOworfQor
CitIV05EIFN1cmZhY2U6OmdldFdpbmRvd0hhbmRsZSgpCit7CisgICAgcmV0dXJuIG1XaW5kb3c7
CiB9CiAKLXZvaWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERl
dmljZTkgKmRldmljZSwgSURpcmVjdDNEVGV4dHVyZTkgKnNvdXJjZSkKK3ZvaWQgU3VyZmFjZTo6
d3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSkKIHsKICAg
ICAvLyBEaXNhYmxlIGFsbCBwaXBlbGluZSBvcGVyYXRpb25zCiAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBEM0RaQl9GQUxTRSk7CkBAIC0xMzgsMTYgKzIwNiwxOCBA
QCB2b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJCiAgICAgZGV2aWNlLT5T
ZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09MT1JPUCwgRDNEVE9QX1NFTEVDVEFSRzEp
OwogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9SQVJHMSwg
RDNEVEFfVEVYVFVSRSk7CiAgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgxLCBEM0RU
U1NfQ09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwotICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBz
b3VyY2UpOworICAgIGRldmljZS0+U2V0VGV4dHVyZSgwLCBOVUxMKTsgLy8gVGhlIGFjdHVhbCB0
ZXh0dXJlIHdpbGwgY2hhbmdlIGFmdGVyIHJlc2l6aW5nLiBCdXQgdGhlIHByZS1mbGlwIHN0YXRl
IGJsb2NrIG11c3Qgc2F2ZS9yZXN0b3JlIHRoZSB0ZXh0dXJlLgogICAgIGRldmljZS0+U2V0U2Ft
cGxlclN0YXRlKDAsIEQzRFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKICAgICBkZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7
CiAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFM
U0UpOworICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVTU1UsIEQz
RFRBRERSRVNTX0NMQU1QKTsKKyAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1Q
X0FERFJFU1NWLCBEM0RUQUREUkVTU19DTEFNUCk7CiAgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZG
X1hZWlJIVyB8IEQzREZWRl9URVgxKTsKIAogICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJl
cSgwLCAxKTsgLy8gRHJhd1ByaW1pdGl2ZVVQIG9ubHkgY2FyZXMgYWJvdXQgc3RyZWFtIDAsIG5v
dCB0aGUgcmVzdC4KIH0KIAotdm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpCit2b2lkIFN1cmZhY2U6
OmFwcGx5RmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSkKIHsKICAgICBIUkVTVUxU
IGhyOwogCkBAIC0xNTgsNyArMjI4LDcgQEAgdm9pZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJ
RGlyZWN0M0REZQogICAgICAgICAvLyBtUHJlRmxpcFN0YXRlIHdpbGwgcmVjb3JkIHRoZSBvcmln
aW5hbCBzdGF0ZSBlYWNoIGVudHJ5LgogICAgICAgICBociA9IGRldmljZS0+QmVnaW5TdGF0ZUJs
b2NrKCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgd3JpdGVSZWNv
cmRhYmxlRmxpcFN0YXRlKGRldmljZSwgc291cmNlKTsKKyAgICAgICAgd3JpdGVSZWNvcmRhYmxl
RmxpcFN0YXRlKGRldmljZSk7CiAgICAgICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZt
UHJlRmxpcFN0YXRlKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CiAKQEAgLTE3MSw3
ICsyNDEsNyBAQCB2b2lkIFN1cmZhY2U6OmFwcGx5RmxpcFN0YXRlKElEaXJlY3QzRERlCiAgICAg
ICAgIGhyID0gZGV2aWNlLT5CZWdpblN0YXRlQmxvY2soKTsKICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChocikpOwogCi0gICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UsIHNv
dXJjZSk7CisgICAgICAgIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShkZXZpY2UpOwogCiAgICAg
ICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtRmxpcFN0YXRlKTsKICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikgfHwgaHIgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIg
PT0gRV9PVVRPRk1FTU9SWSk7CkBAIC0yMjMsMjkgKzI5Myw4OCBAQCB2b2lkIFN1cmZhY2U6OnJl
c3RvcmVTdGF0ZShJRGlyZWN0M0REZXZpCiAgICAgfQogfQogCisvLyBPbiB0aGUgbmV4dCBmbGlw
LCB0aGlzIHdpbGwgY2F1c2UgdGhlIHN0YXRlIHRvIGJlIHJlY29yZGVkIGZyb20gc2NyYXRjaC4K
Ky8vIEluIHBhcnRpY3VsYXIgd2UgbmVlZCB0byBkbyB0aGlzIGlmIHRoZSBmbGlwIHRleHR1cmUg
Y2hhbmdlcy4KK3ZvaWQgU3VyZmFjZTo6cmVsZWFzZVJlY29yZGVkU3RhdGUoSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlKQoreworICAgIGlmIChtRmxpcFN0YXRlKQorICAgIHsKKyAgICAgICAgbUZs
aXBTdGF0ZS0+UmVsZWFzZSgpOworICAgICAgICBtRmxpcFN0YXRlID0gTlVMTDsKKyAgICB9CisK
KyAgICBpZiAobVByZUZsaXBTdGF0ZSkKKyAgICB7CisgICAgICAgIG1QcmVGbGlwU3RhdGUtPlJl
bGVhc2UoKTsKKyAgICAgICAgbVByZUZsaXBTdGF0ZSA9IE5VTEw7CisgICAgfQorfQorCitib29s
IFN1cmZhY2U6OmNoZWNrRm9yV2luZG93UmVzaXplKCkKK3sKKyAgICBSRUNUIGNsaWVudDsKKyAg
ICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRXaWR0aCgpICE9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0IHx8IGdldEhl
aWdodCgpICE9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wKQorICAgIHsKKyAgICAgICAgcmVz
ZXRTd2FwQ2hhaW4oKTsKKworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4o
Z2V0Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsTWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRp
c3BsYXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgU3Vy
ZmFjZTo6c3dhcCgpCiB7CiAgICAgaWYgKG1Td2FwQ2hhaW4pCiAgICAgeworICAgICAgICBJRGly
ZWN0M0RUZXh0dXJlOSAqZmxpcFRleHR1cmUgPSBtRmxpcFRleHR1cmU7CisgICAgICAgIGZsaXBU
ZXh0dXJlLT5BZGRSZWYoKTsKKworICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFy
Z2V0ID0gbVJlbmRlclRhcmdldDsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKwor
ICAgICAgICBFR0xpbnQgb2xkV2lkdGggPSBtV2lkdGg7CisgICAgICAgIEVHTGludCBvbGRIZWln
aHQgPSBtSGVpZ2h0OworCisgICAgICAgIGNoZWNrRm9yV2luZG93UmVzaXplKCk7CisKICAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbURpc3BsYXktPmdldERldmljZSgpOwogCiAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFjZTsKLSAgICAgICAgbUZsaXBU
ZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKKyAgICAgICAgZmxp
cFRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4dHVyZVN1cmZhY2UpOwogCiAgICAgICAg
IG1EaXNwbGF5LT5lbmRTY2VuZSgpOwotICAgICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KG1SZW5k
ZXJUYXJnZXQsIE5VTEwsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOworICAg
ICAgICBkZXZpY2UtPlN0cmV0Y2hSZWN0KHJlbmRlclRhcmdldCwgTlVMTCwgdGV4dHVyZVN1cmZh
Y2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwogCi0gICAgICAgIGFwcGx5RmxpcFN0YXRlKGRldmljZSwgbUZsaXBUZXh0dXJlKTsKKyAgICAg
ICAgYXBwbHlGbGlwU3RhdGUoZGV2aWNlKTsKKyAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAs
IGZsaXBUZXh0dXJlKTsKKworICAgICAgICBmbG9hdCB4c2NhbGUgPSAoZmxvYXQpbVdpZHRoIC8g
b2xkV2lkdGg7CisgICAgICAgIGZsb2F0IHlzY2FsZSA9IChmbG9hdCltSGVpZ2h0IC8gb2xkSGVp
Z2h0OwogCiAgICAgICAgIC8vIFJlbmRlciB0aGUgdGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRo
ZSBiYWNrIGJ1ZmZlcgotICAgICAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3sgICAgIDAgLSAwLjVm
LCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgMC4wZiwgMS4wZn0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBm
LCAxLjBmLCAxLjBmfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0gMC41
ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgICAgIDAgLSAwLjVmLCBtSGVpZ2h0IC0gMC41ZiwgMC4wZiwgMS4w
ZiwgMC4wZiwgMC4wZn19OyAgIC8vIHgsIHksIHosIHJodywgdSwgdgorICAgICAgICAvLyBUZXhj
b29yZHMgYXJlIGNob3NlbiB0byBwaW4gYSBwb3RlbnRpYWxseSByZXNpemVkIGltYWdlIGludG8g
dGhlIHVwcGVyLWxlZnQgY29ybmVyIHdpdGhvdXQgc2NhbGluZy4KKyAgICAgICAgZmxvYXQgcXVh
ZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsICAgMS4wZiAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGgg
LSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWlnaHQgLSAw
LjVmLCAwLjBmLCAxLjBmLCB4c2NhbGUsIDEuMGYteXNjYWxlfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsICAgMS4wZi15c2NhbGV9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKIAogICAgICAgICBt
RGlzcGxheS0+c3RhcnRTY2VuZSgpOwogICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChE
M0RQVF9UUklBTkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOwogCisgICAgICAg
IGZsaXBUZXh0dXJlLT5SZWxlYXNlKCk7CiAgICAgICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNl
KCk7CiAKICAgICAgICAgcmVzdG9yZVN0YXRlKGRldmljZSk7CkBAIC0yNjQsNiArMzkzLDcgQEAg
Ym9vbCBTdXJmYWNlOjpzd2FwKCkKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IEFOR0xFL3Ny
Yy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBAIGNsYXNzIENvbmZpZzsKIGNsYXNzIFN1cmZhY2UK
IHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgSURpcmVjdDNEU3dh
cENoYWluOSAqc3dhcENoYWluLCBJRGlyZWN0M0RTdXJmYWNlOSogZGVwdGhTdGVuY2lsLCBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnKTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNv
bnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93KTsKIAogICAgIH5TdXJmYWNlKCk7
CiAKQEAgLTQyLDIwICs0MiwyNSBAQCBjbGFzcyBTdXJmYWNlCiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFN1cmZhY2UpOwogCiAgICAgRGlzcGxheSAqY29uc3QgbURpc3BsYXk7Ci0gICAg
SURpcmVjdDNEU3dhcENoYWluOSAqY29uc3QgbVN3YXBDaGFpbjsKKyAgICBJRGlyZWN0M0RTd2Fw
Q2hhaW45ICptU3dhcENoYWluOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJlbmRlclRhcmdldDsKICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqbURlcHRoU3RlbmNpbDsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJl
OwogCi0gICAgdm9pZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElE
aXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpOworICAgIHZvaWQgcmVzZXRTd2FwQ2hhaW4oKTsKKyAg
ICBib29sIGNoZWNrRm9yV2luZG93UmVzaXplKCk7CisKKyAgICB2b2lkIGFwcGx5RmxpcFN0YXRl
KElEaXJlY3QzRERldmljZTkgKmRldmljZSk7CiAgICAgdm9pZCByZXN0b3JlU3RhdGUoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlKTsKLSAgICB2b2lkIHdyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIElEaXJlY3QzRFRleHR1cmU5ICpzb3VyY2UpOworICAg
IHZvaWQgd3JpdGVSZWNvcmRhYmxlRmxpcFN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7
CisgICAgdm9pZCByZWxlYXNlUmVjb3JkZWRTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Up
OwogICAgIElEaXJlY3QzRFN0YXRlQmxvY2s5ICptRmxpcFN0YXRlOwogICAgIElEaXJlY3QzRFN0
YXRlQmxvY2s5ICptUHJlRmxpcFN0YXRlOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxp
cEJhY2tCdWZmZXI7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1QcmVGbGlwRGVwdGhTdGVuY2ls
OwogCisgICAgY29uc3QgSFdORCBtV2luZG93OyAgICAgICAgICAgIC8vIFdpbmRvdyB0aGF0IHRo
ZSBzdXJmYWNlIGlzIGNyZWF0ZWQgZm9yLgogICAgIGNvbnN0IGVnbDo6Q29uZmlnICptQ29uZmln
OyAgICAvLyBFR0wgY29uZmlnIHN1cmZhY2Ugd2FzIGNyZWF0ZWQgd2l0aAogICAgIEVHTGludCBt
SGVpZ2h0OyAgICAgICAgICAgICAgICAvLyBIZWlnaHQgb2Ygc3VyZmFjZQogICAgIEVHTGludCBt
V2lkdGg7ICAgICAgICAgICAgICAgICAvLyBXaWR0aCBvZiBzdXJmYWNlCkluZGV4OiBBTkdMRS9z
cmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJF
R0wuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcyLDcgKzc3Miw3IEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVn
bENyZWF0ZUNvbnRleHQoRUcKICAgICAgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAg
ICAgICAgfQogCi0gICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGRpc3BsYXktPmNyZWF0ZUNv
bnRleHQoY29uZmlnKTsKKyAgICAgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZGlzcGxheS0+Y3Jl
YXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4
dCkpOwogCiAgICAgICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogICAgIH0KQEAgLTgyNCw5
ICs4MjQsOCBAQCBFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xNYWtlQ3VycmVudChFR0xECiAgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRl
eHQqPihjdHgpOwogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBkaXNwbGF5LT5n
ZXREZXZpY2UoKTsKLSAgICAgICAgRFdPUkQgcGFzc2VzOwogCi0gICAgICAgIGlmICghZGV2aWNl
IHx8IGRldmljZS0+VmFsaWRhdGVEZXZpY2UoJnBhc3NlcykgPT0gRDNERVJSX0RFVklDRUxPU1Qp
CisgICAgICAgIGlmICghZGV2aWNlIHx8IGRldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSAh
PSBEM0RfT0spCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVY
VF9MT1NULCBFR0xfRkFMU0UpOwogICAgICAgICB9CkluZGV4OiBBTkdMRS9zcmMvbGliRUdML2xp
YkVHTC52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wudmNwcm9q
CShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJFR0wvbGliRUdMLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1l
PSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImQzZDkubGliIg0K
KwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJkeGd1aWQubGliIg0KIAkJCQlMaW5rSW5jcmVt
ZW50YWw9IjIiDQogCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSJsaWJFR0wuZGVmIg0KIAkJCQlH
ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCQkv
Pg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERl
cGVuZGVuY2llcz0iZDNkOS5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImR4Z3Vp
ZC5saWIiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJTW9kdWxlRGVmaW5pdGlvbkZp
bGU9ImxpYkVHTC5kZWYiDQogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCklu
ZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvQmxpdC5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CbGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDEyICsyMzIsMTIgQEAgYm9vbCBC
bGl0OjpzZXRTaGFkZXIoU2hhZGVySWQgc291cmNlLCBjbwogCiBib29sIEJsaXQ6OnNldFZlcnRl
eFNoYWRlcihTaGFkZXJJZCBzaGFkZXIpCiB7Ci0gICAgcmV0dXJuIHNldFNoYWRlcjxJRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5PihzaGFkZXIsIG1Db250ZXh0LT5nZXRWZXJ0ZXhTaGFkZXJQcm9maWxl
KCksICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIsICZJRGlyZWN0M0REZXZp
Y2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOworICAgIHJldHVybiBzZXRTaGFkZXI8SURpcmVjdDNEVmVy
dGV4U2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJ2
c18zXzAiIDogInZzXzJfMCIsICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVWZXJ0ZXhTaGFkZXIs
ICZJRGlyZWN0M0REZXZpY2U5OjpTZXRWZXJ0ZXhTaGFkZXIpOwogfQogCiBib29sIEJsaXQ6OnNl
dFBpeGVsU2hhZGVyKFNoYWRlcklkIHNoYWRlcikKIHsKLSAgICByZXR1cm4gc2V0U2hhZGVyPElE
aXJlY3QzRFBpeGVsU2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+Z2V0UGl4ZWxTaGFkZXJQcm9m
aWxlKCksICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVQaXhlbFNoYWRlciwgJklEaXJlY3QzRERl
dmljZTk6OlNldFBpeGVsU2hhZGVyKTsKKyAgICByZXR1cm4gc2V0U2hhZGVyPElEaXJlY3QzRFBp
eGVsU2hhZGVyOT4oc2hhZGVyLCBtQ29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSA/ICJw
c18zXzAiIDogInBzXzJfMCIsICZJRGlyZWN0M0REZXZpY2U5OjpDcmVhdGVQaXhlbFNoYWRlciwg
JklEaXJlY3QzRERldmljZTk6OlNldFBpeGVsU2hhZGVyKTsKIH0KIAogUkVDVCBCbGl0OjpnZXRT
dXJmYWNlUmVjdChJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkgY29uc3QKQEAgLTMyNSw2ICsz
MjUsNyBAQCBib29sIEJsaXQ6OnNldEZvcm1hdENvbnZlcnRTaGFkZXJzKEdMZW51CiAgICAgewog
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAg
IGNhc2UgR0xfQkdSQV9FWFQ6CiAgICAgICBjYXNlIEdMX1JHQjoKICAgICAgIGNhc2UgR0xfQUxQ
SEE6CiAgICAgICAgIG9rYXkgPSBva2F5ICYmIHNldFBpeGVsU2hhZGVyKFNIQURFUl9QU19DT01Q
T05FTlRNQVNLKTsKQEAgLTM1MSw2ICszNTIsNyBAQCBib29sIEJsaXQ6OnNldEZvcm1hdENvbnZl
cnRTaGFkZXJzKEdMZW51CiAgICAgewogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAg
ICAgIGNhc2UgR0xfUkdCQToKKyAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CiAgICAgICAgIHBzQ29u
c3QwW1hdID0gMTsKICAgICAgICAgcHNDb25zdDBbWl0gPSAxOwogICAgICAgICBicmVhazsKSW5k
ZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiBuYW1l
c3BhY2UgZ2wKIHsKIAotQnVmZmVyOjpCdWZmZXIoKQorQnVmZmVyOjpCdWZmZXIoR0x1aW50IGlk
KSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAgIG1Db250ZW50cyA9IE5VTEw7CiAgICAgbVNp
emUgPSAwOwpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBBTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDE0ICsxOCwxNSBA
QAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIGds
CiB7CiAKLWNsYXNzIEJ1ZmZlcgorY2xhc3MgQnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0
CiB7CiAgIHB1YmxpYzoKLSAgICBCdWZmZXIoKTsKKyAgICBleHBsaWNpdCBCdWZmZXIoR0x1aW50
IGlkKTsKIAogICAgIHZpcnR1YWwgfkJ1ZmZlcigpOwogCkluZGV4OiBBTkdMRS9zcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKQEAgLTMzLDcgKzM0LDcg
QEAKIAogbmFtZXNwYWNlIGdsCiB7Ci1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcpCitDb250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIGNv
bnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpCiAgICAgOiBtQ29uZmlnKGNvbmZpZykKIHsK
ICAgICBzZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwpAQCAtMTAzLDM3ICsx
MDQsMzkgQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29uZgogICAgIG1T
dGF0ZS5jb2xvck1hc2tBbHBoYSA9IHRydWU7CiAgICAgbVN0YXRlLmRlcHRoTWFzayA9IHRydWU7
CiAKKyAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCisgICAgeworICAgICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOworICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5hZGRSZWYoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
bVJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTsKKyAgICB9CisKICAgICAv
LyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcgcGFnZSA4MzoKICAgICAvLyBJbiB0aGUg
aW5pdGlhbCBzdGF0ZSwgVEVYVFVSRV8yRCBhbmQgVEVYVFVSRV9DVUJFX01BUCBoYXZlIHR3b2Rp
bWVuc2lvbmFsCiAgICAgLy8gYW5kIGN1YmUgbWFwIHRleHR1cmUgc3RhdGUgdmVjdG9ycyByZXNw
ZWN0aXZlbHkgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCiAgICAgLy8gSW4gb3JkZXIgdGhhdCBhY2Nl
c3MgdG8gdGhlc2UgaW5pdGlhbCB0ZXh0dXJlcyBub3QgYmUgbG9zdCwgdGhleSBhcmUgdHJlYXRl
ZCBhcyB0ZXh0dXJlCiAgICAgLy8gb2JqZWN0cyBhbGwgb2Ygd2hvc2UgbmFtZXMgYXJlIDAuCiAK
LSAgICBtVGV4dHVyZTJEWmVybyA9IG5ldyBUZXh0dXJlMkQodGhpcyk7Ci0gICAgbVRleHR1cmVD
dWJlTWFwWmVybyA9IG5ldyBUZXh0dXJlQ3ViZU1hcCh0aGlzKTsKKyAgICBtVGV4dHVyZTJEWmVy
byA9IG5ldyBUZXh0dXJlMkQoMCk7CisgICAgbVRleHR1cmVDdWJlTWFwWmVybyA9IG5ldyBUZXh0
dXJlQ3ViZU1hcCgwKTsKIAogICAgIG1Db2xvcmJ1ZmZlclplcm8gPSBOVUxMOwotICAgIG1EZXB0
aGJ1ZmZlclplcm8gPSBOVUxMOwotICAgIG1TdGVuY2lsYnVmZmVyWmVybyA9IE5VTEw7CisgICAg
bURlcHRoU3RlbmNpbGJ1ZmZlclplcm8gPSBOVUxMOwogCiAgICAgbVN0YXRlLmFjdGl2ZVNhbXBs
ZXIgPSAwOwotICAgIG1TdGF0ZS5hcnJheUJ1ZmZlciA9IDA7Ci0gICAgbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlciA9IDA7CisgICAgYmluZEFycmF5QnVmZmVyKDApOworICAgIGJpbmRFbGVtZW50
QXJyYXlCdWZmZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwogICAgIGJpbmRUZXh0
dXJlMkQoMCk7Ci0gICAgYmluZEZyYW1lYnVmZmVyKDApOworICAgIGJpbmRSZWFkRnJhbWVidWZm
ZXIoMCk7CisgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsKICAgICBiaW5kUmVuZGVyYnVmZmVy
KDApOwogCiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7
IHR5cGUrKykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID0gMDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5U
OyB0eXBlKyspCi0gICAgewogICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gTlVM
TDsKICAgICB9CiAKQEAgLTE1NSw2NSArMTU4LDcyIEBAIENvbnRleHQ6OkNvbnRleHQoY29uc3Qg
ZWdsOjpDb25maWcgKmNvbmYKIAogICAgIG1IYXNCZWVuQ3VycmVudCA9IGZhbHNlOwogCisgICAg
bU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwogICAgIG1NYXNrZWRDbGVhclNhdmVkU3RhdGUgPSBO
VUxMOwogICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7CiB9CiAKIENvbnRleHQ6On5Db250ZXh0KCkK
IHsKLSAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwotCi0gICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKKyAgICBpZiAobVN0YXRlLmN1
cnJlbnRQcm9ncmFtICE9IDApCiAgICAgewotICAgICAgICBkZWxldGUgbUluY29tcGxldGVUZXh0
dXJlc1t0eXBlXTsKKyAgICAgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IG1SZXNvdXJjZU1h
bmFnZXItPmdldFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKKyAgICAgICAgaWYgKHBy
b2dyYW1PYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgICAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwogICAg
IH0KIAotICAgIGRlbGV0ZSBtVGV4dHVyZTJEWmVybzsKLSAgICBkZWxldGUgbVRleHR1cmVDdWJl
TWFwWmVybzsKLQotICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJaZXJvOwotICAgIGRlbGV0ZSBtRGVw
dGhidWZmZXJaZXJvOwotICAgIGRlbGV0ZSBtU3RlbmNpbGJ1ZmZlclplcm87Ci0KLSAgICBkZWxl
dGUgbUJ1ZmZlckJhY2tFbmQ7Ci0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBk
ZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgZGVsZXRlIG1CbGl0OwotCi0gICAgd2hpbGUg
KCFtQnVmZmVyTWFwLmVtcHR5KCkpCisgICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAuZW1wdHko
KSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUJ1ZmZlcihtQnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0
KTsKKyAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZp
cnN0KTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1Qcm9ncmFtTWFwLmVtcHR5KCkpCisgICAgd2hp
bGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVQ
cm9ncmFtKG1Qcm9ncmFtTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIFtdIG1N
dWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOworICAgICAgICBtTXVsdGlTYW1wbGVT
dXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7CiAgICAgfQogCi0gICAg
d2hpbGUgKCFtU2hhZGVyTWFwLmVtcHR5KCkpCisgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUg
PCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7Ci0gICAgICAgIGRlbGV0ZVNoYWRl
cihtU2hhZGVyTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9
IDA7IHNhbXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisrKQorICAgICAg
ICB7CisgICAgICAgICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uc2V0
KE5VTEwpOworICAgICAgICB9CiAgICAgfQogCi0gICAgd2hpbGUgKCFtRnJhbWVidWZmZXJNYXAu
ZW1wdHkoKSkKKyAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFNBTVBMRVJfVFlQRV9DT1VO
VDsgdHlwZSsrKQogICAgIHsKLSAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVy
TWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIG1JbmNvbXBsZXRlVGV4dHVyZXNb
dHlwZV07CiAgICAgfQogCi0gICAgd2hpbGUgKCFtUmVuZGVyYnVmZmVyTWFwLmVtcHR5KCkpCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0g
ICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihtUmVuZGVyYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0
KTsKKyAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5V
TEwpOwogICAgIH0KIAotICAgIHdoaWxlICghbVRleHR1cmVNYXAuZW1wdHkoKSkKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwotICAgIH0K
KyAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS50ZXh0dXJlMkQuc2V0KE5VTEwpOworICAg
IG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnJlbmRlcmJ1ZmZl
ci5zZXQoTlVMTCk7CisKKyAgICBkZWxldGUgbVRleHR1cmUyRFplcm87CisgICAgZGVsZXRlIG1U
ZXh0dXJlQ3ViZU1hcFplcm87CisKKyAgICBkZWxldGUgbUJ1ZmZlckJhY2tFbmQ7CisgICAgZGVs
ZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKKyAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7Cisg
ICAgZGVsZXRlIG1CbGl0OwogCiAgICAgaWYgKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpCiAgICAg
ewogICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5SZWxlYXNlKCk7CiAgICAgfQorCisg
ICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwogfQogCiB2b2lkIENvbnRleHQ6Om1ha2VD
dXJyZW50KGVnbDo6RGlzcGxheSAqZGlzcGxheSwgZWdsOjpTdXJmYWNlICpzdXJmYWNlKQpAQCAt
MjI5LDYgKzIzOSwzNCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAq
CiAgICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcywg
bUJ1ZmZlckJhY2tFbmQpOwogICAgICAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOwogCisgICAg
ICAgIGNvbnN0IEQzREZPUk1BVCByZW5kZXJCdWZmZXJGb3JtYXRzW10gPQorICAgICAgICB7Cisg
ICAgICAgICAgICBEM0RGTVRfQThSOEc4QjgsCisgICAgICAgICAgICBEM0RGTVRfWDhSOEc4Qjgs
CisgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAorICAgICAgICAgICAgRDNERk1UX0QyNFM4Cisg
ICAgICAgIH07CisKKyAgICAgICAgaW50IG1heCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZW9mKHJlbmRlckJ1ZmZlckZvcm1hdHMpIC8gc2l6ZW9mKEQzREZPUk1BVCk7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBi
b29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgICAgIGRpc3BsYXkt
PmdldE11bHRpU2FtcGxlU3VwcG9ydChyZW5kZXJCdWZmZXJGb3JtYXRzW2ldLCBtdWx0aXNhbXBs
ZUFycmF5KTsKKyAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbcmVuZGVyQnVmZmVyRm9y
bWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OworCisgICAgICAgICAgICBmb3IgKGludCBqID0g
RDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNB
TVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgbWF4ID0gajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKKworICAgICAg
ICBtU3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMgPSBkaXNwbGF5LT5nZXRDb21wcmVzc2VkVGV4
dHVyZVN1cHBvcnQoKTsKKwogICAgICAgICBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7CiAKICAgICAg
ICAgbVN0YXRlLnZpZXdwb3J0WCA9IDA7CkBAIC0yNDgsMTkgKzI4NiwxMSBAQCB2b2lkIENvbnRl
eHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
ZmF1bHRSZW5kZXJUYXJnZXQgPSBzdXJmYWNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gc3VyZmFjZS0+Z2V0RGVwdGhTdGVuY2lsKCk7
CiAKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IEZyYW1lYnVmZmVyKCk7
CiAgICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyWmVybyA9IG5ldyBDb2xvcmJ1ZmZlcihkZWZh
dWx0UmVuZGVyVGFyZ2V0KTsKLSAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXJaZXJvID0gbmV3
IERlcHRoYnVmZmVyKGRlcHRoU3RlbmNpbCk7Ci0gICAgU3RlbmNpbGJ1ZmZlciAqc3RlbmNpbGJ1
ZmZlclplcm8gPSBuZXcgU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpOworICAgIERlcHRoU3Rl
bmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsYnVmZmVyWmVybyA9IG5ldyBEZXB0aFN0ZW5jaWxidWZm
ZXIoZGVwdGhTdGVuY2lsKTsKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3
IERlZmF1bHRGcmFtZWJ1ZmZlcihjb2xvcmJ1ZmZlclplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclpl
cm8pOwogCiAgICAgc2V0RnJhbWVidWZmZXJaZXJvKGZyYW1lYnVmZmVyWmVybyk7Ci0gICAgc2V0
Q29sb3JidWZmZXJaZXJvKGNvbG9yYnVmZmVyWmVybyk7Ci0gICAgc2V0RGVwdGhidWZmZXJaZXJv
KGRlcHRoYnVmZmVyWmVybyk7Ci0gICAgc2V0U3RlbmNpbGJ1ZmZlclplcm8oc3RlbmNpbGJ1ZmZl
clplcm8pOwotCi0gICAgZnJhbWVidWZmZXJaZXJvLT5zZXRDb2xvcmJ1ZmZlcihHTF9SRU5ERVJC
VUZGRVIsIDApOwotICAgIGZyYW1lYnVmZmVyWmVyby0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCAwKTsKLSAgICBmcmFtZWJ1ZmZlclplcm8tPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCAwKTsKIAogICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKIApA
QCAtMjY5LDE2ICsyOTksNyBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxh
eSAqCiAgICAgICAgIGRlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwogICAgIH0KICAgICAKLSAgICBp
ZiAobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCkp
Ci0gICAgewotICAgICAgICBtUHNQcm9maWxlID0gInBzXzNfMCI7Ci0gICAgICAgIG1Wc1Byb2Zp
bGUgPSAidnNfM18wIjsKLSAgICB9Ci0gICAgZWxzZSAgLy8gZWdsOjpEaXNwbGF5IGd1YXJhbnRl
ZXMgc3VwcG9ydCBmb3IgYXQgbGVhc3QgMi4wCi0gICAgewotICAgICAgICBtUHNQcm9maWxlID0g
InBzXzJfMCI7Ci0gICAgICAgIG1Wc1Byb2ZpbGUgPSAidnNfMl8wIjsKLSAgICB9CisgICAgbVN1
cHBvcnRzU2hhZGVyTW9kZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID09IEQz
RFBTX1ZFUlNJT04oMywgMCk7CiAKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQpAQCAtMzAw
LDYgKzMyMSwxMiBAQCB2b2lkIENvbnRleHQ6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICBtU2Np
c3NvclN0YXRlRGlydHkgPSB0cnVlOwogICAgIG1TYW1wbGVTdGF0ZURpcnR5ID0gdHJ1ZTsKICAg
ICBtRGl0aGVyU3RhdGVEaXJ0eSA9IHRydWU7CisgICAgbUZyb250RmFjZURpcnR5ID0gdHJ1ZTsK
KworICAgIGlmIChtQnVmZmVyQmFja0VuZCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgbUJ1ZmZl
ckJhY2tFbmQtPmludmFsaWRhdGUoKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0Q2xl
YXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkK
QEAgLTY3MSwxOSArNjk4LDI0IEBAIHZvaWQgQ29udGV4dDo6c2V0QWN0aXZlU2FtcGxlcihpbnQg
YWN0aXYKICAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IGFjdGl2ZTsKIH0KIAotR0x1aW50IENv
bnRleHQ6OmdldEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3QKK0dMdWludCBDb250ZXh0OjpnZXRS
ZWFkRnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUucmVhZEZy
YW1lYnVmZmVyOworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmZyYW1lYnVmZmVyOworICAgIHJldHVybiBt
U3RhdGUuZHJhd0ZyYW1lYnVmZmVyOwogfQogCiBHTHVpbnQgQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlcjsKKyAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCiBHTHVpbnQgQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUuYXJyYXlC
dWZmZXI7CisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwogfQogCiB2b2lkIENv
bnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9v
bCBlbmFibGVkKQpAQCAtNjk2LDEwICs3MjgsMTAgQEAgY29uc3QgQXR0cmlidXRlU3RhdGUgJkNv
bnRleHQ6OmdldFZlcnRleAogICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV07CiB9CiAKLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlw
ZSwgYm9vbCBub3JtYWxpemVkLAordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBH
TGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKIHsKLSAgICBtU3Rh
dGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyID0gYm91bmRCdWZmZXI7
CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlci5zZXQo
Ym91bmRCdWZmZXIpOwogICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6
ZSA9IHNpemU7CiAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0g
dHlwZTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubU5vcm1hbGl6ZWQg
PSBub3JtYWxpemVkOwpAQCAtNzM4LDcyICs3NzAsMjkgQEAgR0xpbnQgQ29udGV4dDo6Z2V0VW5w
YWNrQWxpZ25tZW50KCkgY29ucwogICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50Owog
fQogCi0vLyBSZXR1cm5zIGFuIHVudXNlZCBidWZmZXIgbmFtZQogR0x1aW50IENvbnRleHQ6OmNy
ZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDE7Ci0KLSAgICB3aGls
ZSAobUJ1ZmZlck1hcC5maW5kKGhhbmRsZSkgIT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIGhhbmRsZSsrOwotICAgIH0KLQotICAgIG1CdWZmZXJNYXBbaGFuZGxlXSA9IE5VTEw7
Ci0KLSAgICByZXR1cm4gaGFuZGxlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVCdWZmZXIoKTsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgc2hhZGVyL3Byb2dyYW0gbmFt
ZQotR0x1aW50IENvbnRleHQ6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK0dMdWludCBDb250
ZXh0OjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaGFuZGxlID0gMTsKLQot
ICAgIHdoaWxlIChtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVyTWFwLmVuZCgpIHx8
IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkgICAvLyBTaGFy
ZWQgbmFtZSBzcGFjZQotICAgIHsKLSAgICAgICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgaWYg
KHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKLSAgICB7Ci0gICAgICAgIG1TaGFkZXJNYXBbaGFu
ZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCi0gICAgewotICAgICAgICBtU2hhZGVyTWFw
W2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxlKTsKLSAgICB9Ci0gICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgcmV0dXJuIGhhbmRsZTsKKyAgICByZXR1cm4gbVJl
c291cmNlTWFuYWdlci0+Y3JlYXRlUHJvZ3JhbSgpOwogfQogCi0vLyBSZXR1cm5zIGFuIHVudXNl
ZCBwcm9ncmFtL3NoYWRlciBuYW1lCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCitH
THVpbnQgQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKQogewotICAgIHVuc2lnbmVk
IGludCBoYW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAh
PSBtUHJvZ3JhbU1hcC5lbmQoKSB8fCBtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hhZGVy
TWFwLmVuZCgpKSAgIC8vIFNoYXJlZCBuYW1lIHNwYWNlCi0gICAgewotICAgICAgICBoYW5kbGUr
KzsKLSAgICB9Ci0KLSAgICBtUHJvZ3JhbU1hcFtoYW5kbGVdID0gbmV3IFByb2dyYW0oKTsKLQot
ICAgIHJldHVybiBoYW5kbGU7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNo
YWRlcih0eXBlKTsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgdGV4dHVyZSBuYW1lCiBHTHVp
bnQgQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGhhbmRsZSA9
IDE7Ci0KLSAgICB3aGlsZSAobVRleHR1cmVNYXAuZmluZChoYW5kbGUpICE9IG1UZXh0dXJlTWFw
LmVuZCgpKQotICAgIHsKLSAgICAgICAgaGFuZGxlKys7Ci0gICAgfQotCi0gICAgbVRleHR1cmVN
YXBbaGFuZGxlXSA9IE5VTEw7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVRl
eHR1cmUoKTsKK30KIAotICAgIHJldHVybiBoYW5kbGU7CitHTHVpbnQgQ29udGV4dDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVu
ZGVyYnVmZmVyKCk7CiB9CiAKIC8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVmZmVyIG5hbWUK
QEAgLTgyMSw4NSArODEwLDQ0IEBAIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigp
CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotLy8gUmV0dXJucyBhbiB1bnVzZWQgcmVuZGVyYnVm
ZmVyIG5hbWUKLUdMdWludCBDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIHVu
c2lnbmVkIGludCBoYW5kbGUgPSAxOwotCi0gICAgd2hpbGUgKG1SZW5kZXJidWZmZXJNYXAuZmlu
ZChoYW5kbGUpICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBoYW5k
bGUrKzsKLSAgICB9Ci0KLSAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOwotCi0g
ICAgcmV0dXJuIGhhbmRsZTsKLX0KLQogdm9pZCBDb250ZXh0OjpkZWxldGVCdWZmZXIoR0x1aW50
IGJ1ZmZlcikKIHsKLSAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1CdWZm
ZXJNYXAuZmluZChidWZmZXIpOwotCi0gICAgaWYgKGJ1ZmZlck9iamVjdCAhPSBtQnVmZmVyTWFw
LmVuZCgpKQorICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoYnVmZmVyKSkKICAg
ICB7CiAgICAgICAgIGRldGFjaEJ1ZmZlcihidWZmZXIpOwotCi0gICAgICAgIGRlbGV0ZSBidWZm
ZXJPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUJ1ZmZlck1hcC5lcmFzZShidWZmZXJPYmplY3Qp
OwogICAgIH0KKyAgICAKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVCdWZmZXIoYnVmZmVy
KTsKIH0KIAogdm9pZCBDb250ZXh0OjpkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcikKIHsKLSAg
ICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1TaGFkZXJNYXAuZmluZChzaGFk
ZXIpOwotCi0gICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVyTWFwLmVuZCgpKQotICAgIHsK
LSAgICAgICAgaWYgKCFzaGFkZXJPYmplY3QtPnNlY29uZC0+aXNBdHRhY2hlZCgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZWxldGUgc2hhZGVyT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgICAg
ICBtU2hhZGVyTWFwLmVyYXNlKHNoYWRlck9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGFkZXJPYmplY3QtPnNlY29uZC0+ZmxhZ0ZvckRl
bGV0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRl
U2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShHTHVpbnQg
cHJvZ3JhbSkKIHsKLSAgICBQcm9ncmFtTWFwOjppdGVyYXRvciBwcm9ncmFtT2JqZWN0ID0gbVBy
b2dyYW1NYXAuZmluZChwcm9ncmFtKTsKLQotICAgIGlmIChwcm9ncmFtT2JqZWN0ICE9IG1Qcm9n
cmFtTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgaWYgKHByb2dyYW0gIT0gbVN0YXRlLmN1cnJl
bnRQcm9ncmFtKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgcHJvZ3JhbU9iamVjdC0+
c2Vjb25kOwotICAgICAgICAgICAgbVByb2dyYW1NYXAuZXJhc2UocHJvZ3JhbU9iamVjdCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9ncmFtT2Jq
ZWN0LT5zZWNvbmQtPmZsYWdGb3JEZWxldGlvbigpOwotICAgICAgICB9Ci0gICAgfQorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgQ29udGV4
dDo6ZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKIHsKLSAgICBUZXh0dXJlTWFwOjppdGVy
YXRvciB0ZXh0dXJlT2JqZWN0ID0gbVRleHR1cmVNYXAuZmluZCh0ZXh0dXJlKTsKLQotICAgIGlm
ICh0ZXh0dXJlT2JqZWN0ICE9IG1UZXh0dXJlTWFwLmVuZCgpKQorICAgIGlmIChtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRUZXh0dXJlKHRleHR1cmUpKQogICAgIHsKICAgICAgICAgZGV0YWNoVGV4dHVy
ZSh0ZXh0dXJlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKHRleHR1cmUgIT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVsZXRlIHRleHR1cmVPYmplY3QtPnNlY29uZDsKLSAgICAgICAgfQor
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Cit9CiAKLSAgICAg
ICAgbVRleHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7Cit2b2lkIENvbnRleHQ6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQoreworICAgIGlmIChtUmVzb3VyY2VN
YW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKKyAgICB7CisgICAgICAgIGRl
dGFjaFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwogICAgIH0KKyAgICAKKyAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBD
b250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCkBAIC05MTUsMzA3
ICs4NjMsMTg2IEBAIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGYKICAg
ICB9CiB9CiAKLXZvaWQgQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJi
dWZmZXIpCitCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQogewotICAg
IFJlbmRlcmJ1ZmZlck1hcDo6aXRlcmF0b3IgcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVJlbmRlcmJ1
ZmZlck1hcC5maW5kKHJlbmRlcmJ1ZmZlcik7Ci0KLSAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0
ICE9IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICBkZXRhY2hSZW5kZXJi
dWZmZXIocmVuZGVyYnVmZmVyKTsKLQotICAgICAgICBkZWxldGUgcmVuZGVyYnVmZmVyT2JqZWN0
LT5zZWNvbmQ7Ci0gICAgICAgIG1SZW5kZXJidWZmZXJNYXAuZXJhc2UocmVuZGVyYnVmZmVyT2Jq
ZWN0KTsKLSAgICB9CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5k
bGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVm
ZmVyKQorU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSkKIHsKLSAgICBp
ZiAoYnVmZmVyICE9IDAgJiYgIWdldEJ1ZmZlcihidWZmZXIpKQotICAgIHsKLSAgICAgICAgbUJ1
ZmZlck1hcFtidWZmZXJdID0gbmV3IEJ1ZmZlcigpOwotICAgIH0KLQotICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0U2hhZGVy
KGhhbmRsZSk7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmluZEVsZW1lbnRBcnJheUJ1ZmZlcih1bnNp
Z25lZCBpbnQgYnVmZmVyKQorUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFu
ZGxlKQogewotICAgIGlmIChidWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVyKGJ1ZmZlcikpCi0gICAg
ewotICAgICAgICBtQnVmZmVyTWFwW2J1ZmZlcl0gPSBuZXcgQnVmZmVyKCk7Ci0gICAgfQotCi0g
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICByZXR1cm4gbVJlc291
cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRU
ZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCitUZXh0dXJlICpDb250ZXh0OjpnZXRUZXh0dXJlKEdM
dWludCBoYW5kbGUpCiB7Ci0gICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUg
IT0gMCkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlTWFwW3RleHR1cmVdID0gbmV3IFRleHR1cmUy
RCh0aGlzKTsKLSAgICB9Ci0KLSAgICBtU3RhdGUudGV4dHVyZTJEID0gdGV4dHVyZTsKLQotICAg
IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0g
PSB0ZXh0dXJlOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRUZXh0dXJlKGhhbmRs
ZSk7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCB0ZXh0dXJl
KQorUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSkK
IHsKLSAgICBpZiAoIWdldFRleHR1cmUodGV4dHVyZSkgJiYgdGV4dHVyZSAhPSAwKQotICAgIHsK
LSAgICAgICAgbVRleHR1cmVNYXBbdGV4dHVyZV0gPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7
Ci0gICAgfQotCi0gICAgbVN0YXRlLnRleHR1cmVDdWJlTWFwID0gdGV4dHVyZTsKLQotICAgIG1T
dGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXSA9
IHRleHR1cmU7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlciho
YW5kbGUpOwogfQogCi12b2lkIENvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVi
dWZmZXIpCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0UmVhZEZyYW1lYnVmZmVyKCkKIHsKLSAg
ICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIG1GcmFt
ZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKLSAgICB9Ci0KLSAg
ICBtU3RhdGUuZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAgICByZXR1cm4gZ2V0RnJhbWVi
dWZmZXIobVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmluZFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dERyYXdGcmFtZWJ1ZmZlcigpCiB7Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciAhPSAwICYmICFnZXRS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJidWZmZXJN
YXBbcmVuZGVyYnVmZmVyXSA9IG5ldyBSZW5kZXJidWZmZXIoKTsKLSAgICB9Ci0KLSAgICBtU3Rh
dGUucmVuZGVyYnVmZmVyID0gcmVuZGVyYnVmZmVyOworICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZl
cihtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyKTsKIH0KIAotdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFt
KEdMdWludCBwcm9ncmFtKQordm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKLSAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0Q3VycmVudFBy
b2dyYW0oKTsKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVm
ZmVyKTsKIAotICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07
Ci0gICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBN
dXN0IHN3aXRjaCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0
cyBmbGFnZ2VkLgotCi0gICAgaWYgKHByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbU9iamVjdC0+aXNG
bGFnZ2VkRm9yRGVsZXRpb24oKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZVByb2dyYW0ocHJpb3JQ
cm9ncmFtKTsKLSAgICB9CisgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVm
ZmVyKSk7CiB9CiAKLXZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVy
ICpidWZmZXIpCit2b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKLSAgICBkZWxldGUgbUZyYW1lYnVmZmVyTWFwWzBdOwotICAgIG1GcmFt
ZWJ1ZmZlck1hcFswXSA9IGJ1ZmZlcjsKLX0KKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1
ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKIAotdm9pZCBDb250ZXh0OjpzZXRDb2xvcmJ1ZmZlclpl
cm8oQ29sb3JidWZmZXIgKmJ1ZmZlcikKLXsKLSAgICBkZWxldGUgbUNvbG9yYnVmZmVyWmVybzsK
LSAgICBtQ29sb3JidWZmZXJaZXJvID0gYnVmZmVyOworICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXREZXB0
aGJ1ZmZlclplcm8oRGVwdGhidWZmZXIgKmJ1ZmZlcikKK3ZvaWQgQ29udGV4dDo6YmluZFRleHR1
cmUyRChHTHVpbnQgdGV4dHVyZSkKIHsKLSAgICBkZWxldGUgbURlcHRoYnVmZmVyWmVybzsKLSAg
ICBtRGVwdGhidWZmZXJaZXJvID0gYnVmZmVyOwotfQorICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgU0FNUExFUl8yRCk7CiAKLXZvaWQgQ29udGV4
dDo6c2V0U3RlbmNpbGJ1ZmZlclplcm8oU3RlbmNpbGJ1ZmZlciAqYnVmZmVyKQotewotICAgIGRl
bGV0ZSBtU3RlbmNpbGJ1ZmZlclplcm87Ci0gICAgbVN0ZW5jaWxidWZmZXJaZXJvID0gYnVmZmVy
OwotfQorICAgIG1TdGF0ZS50ZXh0dXJlMkQuc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogCi12
b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlcihSZW5kZXJidWZmZXIgKmJ1ZmZlcikKLXsKLSAg
ICBkZWxldGUgbVJlbmRlcmJ1ZmZlck1hcFttU3RhdGUucmVuZGVyYnVmZmVyXTsKLSAgICBtUmVu
ZGVyYnVmZmVyTWFwW21TdGF0ZS5yZW5kZXJidWZmZXJdID0gYnVmZmVyOworICAgIG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KG1TdGF0
ZS50ZXh0dXJlMkQuZ2V0KCkpOwogfQogCi1CdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcih1bnNp
Z25lZCBpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50
IHRleHR1cmUpCiB7Ci0gICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIgPSBtQnVmZmVyTWFw
LmZpbmQoaGFuZGxlKTsKLQotICAgIGlmIChidWZmZXIgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQotfQorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgU0FNUExFUl9DVUJFKTsKIAotU2hhZGVy
ICpDb250ZXh0OjpnZXRTaGFkZXIodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAgICBTaGFkZXJN
YXA6Oml0ZXJhdG9yIHNoYWRlciA9IG1TaGFkZXJNYXAuZmluZChoYW5kbGUpOworICAgIG1TdGF0
ZS50ZXh0dXJlQ3ViZU1hcC5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7CiAKLSAgICBpZiAoc2hh
ZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNoYWRlci0+c2Vjb25kOwotICAg
IH0KKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZl
U2FtcGxlcl0uc2V0KG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5nZXQoKSk7CiB9CiAKLVByb2dyYW0g
KkNvbnRleHQ6OmdldFByb2dyYW0odW5zaWduZWQgaW50IGhhbmRsZSkKK3ZvaWQgQ29udGV4dDo6
YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCiB7Ci0gICAgUHJvZ3JhbU1h
cDo6aXRlcmF0b3IgcHJvZ3JhbSA9IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKTsKLQotICAgIGlm
IChwcm9ncmFtID09IG1Qcm9ncmFtTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgfQotICAgIGVsc2UKKyAgICBpZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVy
KSkKICAgICB7Ci0gICAgICAgIHJldHVybiBwcm9ncmFtLT5zZWNvbmQ7CisgICAgICAgIG1GcmFt
ZWJ1ZmZlck1hcFtmcmFtZWJ1ZmZlcl0gPSBuZXcgRnJhbWVidWZmZXIoKTsKICAgICB9Ci19Ci0K
LVRleHR1cmUgKkNvbnRleHQ6OmdldFRleHR1cmUodW5zaWduZWQgaW50IGhhbmRsZSkKLXsKLSAg
ICBpZiAoaGFuZGxlID09IDApIHJldHVybiBOVUxMOwotCi0gICAgVGV4dHVyZU1hcDo6aXRlcmF0
b3IgdGV4dHVyZSA9IG1UZXh0dXJlTWFwLmZpbmQoaGFuZGxlKTsKIAotICAgIGlmICh0ZXh0dXJl
ID09IG1UZXh0dXJlTWFwLmVuZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlLT5zZWNvbmQ7Ci0gICAg
fQorICAgIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKIH0KIAotRnJhbWVi
dWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit2b2lk
IENvbnRleHQ6OmJpbmREcmF3RnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewotICAg
IEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5m
aW5kKGhhbmRsZSk7Ci0KLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVu
ZCgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKKyAgICBp
ZiAoIWdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBm
cmFtZWJ1ZmZlci0+c2Vjb25kOworICAgICAgICBtRnJhbWVidWZmZXJNYXBbZnJhbWVidWZmZXJd
ID0gbmV3IEZyYW1lYnVmZmVyKCk7CiAgICAgfQorCisgICAgbVN0YXRlLmRyYXdGcmFtZWJ1ZmZl
ciA9IGZyYW1lYnVmZmVyOwogfQogCi1SZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1
ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQordm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpCiB7Ci0gICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciBy
ZW5kZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24ocmVuZGVyYnVmZmVyKTsKIAot
ICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1
cm4gcmVuZGVyYnVmZmVyLT5zZWNvbmQ7Ci0gICAgfQorICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIu
c2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAotQ29sb3JidWZmZXIgKkNv
bnRleHQ6OmdldENvbG9yYnVmZmVyKEdMdWludCBoYW5kbGUpCit2b2lkIENvbnRleHQ6OnVzZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pCiB7Ci0gICAgaWYgKGhhbmRsZSAhPSAwKQorICAgIEdMdWlu
dCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07CisgICAgbVN0YXRlLmN1cnJl
bnRQcm9ncmFtID0gcHJvZ3JhbTsgICAgICAgICAgICAgICAvLyBNdXN0IHN3aXRjaCBiZWZvcmUg
dHJ5aW5nIHRvIGRlbGV0ZSwgb3RoZXJ3aXNlIGl0IG9ubHkgZ2V0cyBmbGFnZ2VkLgorCisgICAg
aWYgKHByaW9yUHJvZ3JhbSAhPSBwcm9ncmFtKQogICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpyZW5kZXJidWZmZXIgPSBnZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKyAgICAgICAgUHJvZ3Jh
bSAqbmV3UHJvZ3JhbSA9IG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0ocHJvZ3JhbSk7Cisg
ICAgICAgIFByb2dyYW0gKm9sZFByb2dyYW0gPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFt
KHByaW9yUHJvZ3JhbSk7CiAKLSAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZm
ZXItPmlzQ29sb3JidWZmZXIoKSkKKyAgICAgICAgaWYgKG5ld1Byb2dyYW0pCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
cik7CisgICAgICAgICAgICBuZXdQcm9ncmFtLT5hZGRSZWYoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG9sZFByb2dyYW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG9sZFBy
b2dyYW0tPnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlICAgLy8gU3BlY2lh
bCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCByZW5kZXIgdGFyZ2V0cyBiYXNl
ZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCi0gICAgewotICAgICAgICByZXR1cm4gbUNvbG9yYnVm
ZmVyWmVybzsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKIH0KIAotRGVwdGhidWZmZXIgKkNv
bnRleHQ6OmdldERlcHRoYnVmZmVyKEdMdWludCBoYW5kbGUpCit2b2lkIENvbnRleHQ6OnNldEZy
YW1lYnVmZmVyWmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQogewotICAgIGlmIChoYW5kbGUgIT0g
MCkKLSAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZ2V0UmVuZGVy
YnVmZmVyKGhhbmRsZSk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiByZW5kZXJidWZm
ZXItPmlzRGVwdGhidWZmZXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PERlcHRoYnVmZmVyKj4ocmVuZGVyYnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCBy
ZW5kZXIgdGFyZ2V0cyBiYXNlZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCi0gICAgewotICAgICAg
ICByZXR1cm4gbURlcHRoYnVmZmVyWmVybzsKLSAgICB9CisgICAgZGVsZXRlIG1GcmFtZWJ1ZmZl
ck1hcFswXTsKKyAgICBtRnJhbWVidWZmZXJNYXBbMF0gPSBidWZmZXI7Cit9CiAKLSAgICByZXR1
cm4gTlVMTDsKK3ZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShSZW5kZXJidWZm
ZXJTdG9yYWdlICpyZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZm
ZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOworICAgIHJlbmRlcmJ1ZmZlck9i
amVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwogfQogCi1TdGVuY2lsYnVmZmVyICpDb250
ZXh0OjpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpCitGcmFtZWJ1ZmZlciAqQ29udGV4
dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBpZiAoaGFuZGxl
ICE9IDApCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlciA9IGdldFJl
bmRlcmJ1ZmZlcihoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1
ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CiAKLSAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlciAmJiByZW5kZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RlbmNpbGJ1ZmZlcio+KHJlbmRlcmJ1ZmZl
cik7Ci0gICAgICAgIH0KKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclplcm87CisgICAgICAgIHJldHVybiBmcmFt
ZWJ1ZmZlci0+c2Vjb25kOwogICAgIH0KLQotICAgIHJldHVybiBOVUxMOwogfQogCiBCdWZmZXIg
KkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKIHsKLSAgICByZXR1cm4gZ2V0QnVmZmVyKG1TdGF0
ZS5hcnJheUJ1ZmZlcik7CisgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKIH0K
IAogQnVmZmVyICpDb250ZXh0OjpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKQogewotICAgIHJldHVy
biBnZXRCdWZmZXIobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcik7CisgICAgcmV0dXJuIG1TdGF0
ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKIFByb2dyYW0gKkNvbnRleHQ6OmdldEN1
cnJlbnRQcm9ncmFtKCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFBy
b2dyYW0pOworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbSk7CiB9CiAKIFRleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkK
IHsKLSAgICBpZiAobVN0YXRlLnRleHR1cmUyRCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCBy
ZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAor
ICAgIGlmIChtU3RhdGUudGV4dHVyZTJELmlkKCkgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAg
cmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQK
ICAgICB7CiAgICAgICAgIHJldHVybiBtVGV4dHVyZTJEWmVybzsKICAgICB9CiAKLSAgICByZXR1
cm4gKFRleHR1cmUyRCopZ2V0VGV4dHVyZShtU3RhdGUudGV4dHVyZTJEKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4obVN0YXRlLnRleHR1cmUyRC5nZXQoKSk7CiB9CiAKIFRl
eHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCiB7Ci0gICAgaWYgKG1T
dGF0ZS50ZXh0dXJlQ3ViZU1hcCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8g
ZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAorICAgIGlmICht
U3RhdGUudGV4dHVyZUN1YmVNYXAuaWQoKSA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZl
cnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87CiAgICAgfQogCi0gICAgcmV0
dXJuIChUZXh0dXJlQ3ViZU1hcCopZ2V0VGV4dHVyZShtU3RhdGUudGV4dHVyZUN1YmVNYXApOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KG1TdGF0ZS50ZXh0dXJlQ3Vi
ZU1hcC5nZXQoKSk7CiB9CiAKIFRleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVu
c2lnbmVkIGludCBzYW1wbGVyLCBTYW1wbGVyVHlwZSB0eXBlKQogewotICAgIEdMdWludCB0ZXhp
ZCA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXTsKKyAgICBHTHVpbnQgdGV4
aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAogICAgIGlm
ICh0ZXhpZCA9PSAwKQogICAgIHsKQEAgLTEyMjcsMTIgKzEwNTQsNyBAQCBUZXh0dXJlICpDb250
ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1
cm4gZ2V0VGV4dHVyZSh0ZXhpZCk7Ci19Ci0KLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5mcmFtZWJ1ZmZl
cik7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5nZXQo
KTsKIH0KIAogYm9vbCBDb250ZXh0OjpnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVh
biAqcGFyYW1zKQpAQCAtMTI4Myw3ICsxMTA1LDcgQEAgYm9vbCBDb250ZXh0OjpnZXRGbG9hdHYo
R0xlbnVtIHBuYW1lLCBHTAogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9Q
T0lOVF9TSVpFX1JBTkdFOgogICAgICAgICBwYXJhbXNbMF0gPSBnbDo6QUxJQVNFRF9QT0lOVF9T
SVpFX1JBTkdFX01JTjsKLSAgICAgICAgcGFyYW1zWzFdID0gZ2w6OkFMSUFTRURfUE9JTlRfU0la
RV9SQU5HRV9NQVg7CisgICAgICAgIHBhcmFtc1sxXSA9IHN1cHBvcnRzU2hhZGVyTW9kZWwzKCkg
PyBnbDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgOiBnbDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFX01BWF9TTTI7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9ERVBU
SF9SQU5HRToKICAgICAgICAgcGFyYW1zWzBdID0gbVN0YXRlLnpOZWFyOwpAQCAtMTMyNiwxMyAr
MTE0OCwxMyBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAg
ICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7ICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
TUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1JFTkRF
UkJVRkZFUl9TSVpFOyAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRV
UkVfRk9STUFUUzogICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6IC8q
IG5vIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVy
IGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmFycmF5QnVmZmVyOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9C
SU5ESU5HOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcmFtZWJ1ZmZlcjsgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlcjsgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgICAgICAgYnJlYWs7CisgICAgICAvL2Nh
c2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50
IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRQorICAgICAgY2FzZSBHTF9EUkFX
X0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFt
ZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJV
RkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07ICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnVucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNjMsOCArMTE4NSw2
MyBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNl
IEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX1RF
WFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfU0la
RTsgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
OyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU0FNUExFUzogICAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIGF0IGN1cnJlbnQsIG9ubHkgR0xfQ09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCBhbmQgCisgICAgICAgICAgICAgICAgLy8gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQgYXJlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKKyAgICAgICAgewor
ICAgICAgICAgICAgR0xzaXplaSBtYXhTYW1wbGVzID0gZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
OworICAgICAgICAgICAgaWYgKG1heFNhbXBsZXMgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbWF4U2FtcGxlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBjYXNl
IEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgICAKKyAgICAgIGNhc2UgR0xfU0FN
UExFUzoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0JVRkZFUlM6CisgICAgICAgICAgICAgICAgICAg
IGlmIChmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAxOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRVM6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmcmFtZWJ1ZmZlci0+Z2V0
U2FtcGxlcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJyZWFrOwogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICAg
KnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU7ICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOiAqcGFyYW1zID0g
Z2w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOyBicmVhazsKICAgICAgIGNhc2Ug
R0xfTUFYX1ZJRVdQT1JUX0RJTVM6CkBAIC0xMzc0LDYgKzEyNTEsMTUgQEAgYm9vbCBDb250ZXh0
OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4
RGltZW5zaW9uOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN1cHBv
cnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cGFyYW1zWzBdID0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDsKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMV0gPSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVklFV1BP
UlQ6CiAgICAgICAgIHBhcmFtc1swXSA9IG1TdGF0ZS52aWV3cG9ydFg7CiAgICAgICAgIHBhcmFt
c1sxXSA9IG1TdGF0ZS52aWV3cG9ydFk7CkBAIC0xMzkzLDcgKzEyNzksNyBAQCBib29sIENvbnRl
eHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX0JMVUVfQklUUzoK
ICAgICAgIGNhc2UgR0xfQUxQSEFfQklUUzoKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAgICAg
ICAgICAgICBnbDo6Q29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCk7CiAKICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlcikKQEAgLTE0MTQsOCAr
MTMwMCw4IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZlcigpOwotICAg
ICAgICAgICAgZ2w6OkRlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZl
ciAqZGVwdGhidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKIAogICAgICAg
ICAgICAgaWYgKGRlcHRoYnVmZmVyKQogICAgICAgICAgICAgewpAQCAtMTQyOSw4ICsxMzE1LDgg
QEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgICBicmVh
azsKICAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOgogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKLSAgICAgICAg
ICAgIGdsOjpTdGVuY2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpEZXB0aFN0ZW5jaWxidWZm
ZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogCiAg
ICAgICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlcikKICAgICAgICAgICAgIHsKQEAgLTE0NTAsNyAr
MTMzNiw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdOworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1Q
TEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgpAQCAtMTQ2MSw3
ICsxMzQ3LDcgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3Rp
dmVTYW1wbGVyXTsKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVb
U0FNUExFUl9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CkBAIC0xNTUyLDYgKzE0MzgsMTkgQEAgYm9vbCBD
b250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TQU1Q
TEVTX0FOR0xFOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7CisgICAgICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBH
TF9NQVhfVklFV1BPUlRfRElNUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9J
TlQ7CkBAIC0xNjI2LDcgKzE1MjUsNyBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0
KGJvb2wgaWduCiB7CiAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7
CiAKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigp
OworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZl
cigpOwogCiAgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+
Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAgewpAQCAtMTYz
NiwyMCArMTUzNSwzNSBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdu
CiAgICAgfQogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZyYW1lYnVm
ZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVw
dGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpOworICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBOVUxMOwogCiAgICAgdW5zaWduZWQgaW50
IHJlbmRlclRhcmdldFNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoKTsKICAgICBpZiAocmVuZGVyVGFyZ2V0U2VyaWFsICE9IG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsKQogICAgIHsKICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVu
ZGVyVGFyZ2V0KTsKICAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJU
YXJnZXRTZXJpYWw7CisgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IHRydWU7IC8vIFNjaXNz
b3IgYXJlYSBtdXN0IGJlIGNsYW1wZWQgdG8gcmVuZGVyIHRhcmdldCdzIHNpemUtLSB0aGlzIGlz
IGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHJlbmRlciB0YXJnZXRzLgorICAgIH0KKworICAgIHVu
c2lnbmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxidWZmZXJTZXJpYWwgPSAwOworICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhi
dWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGRlcHRoU3RlbmNpbCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAg
ICAgICAgZGVwdGhidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZm
ZXIoKS0+Z2V0U2VyaWFsKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBkZXB0
aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0
aFN0ZW5jaWwoKTsKKyAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGludCBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1
ZmZlclNlcmlhbCgpOwotICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRo
YnVmZmVyU2VyaWFsKQorICAgIGlmIChkZXB0aGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZERlcHRo
YnVmZmVyU2VyaWFsIHx8CisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxpZWRT
dGVuY2lsYnVmZmVyU2VyaWFsKQogICAgIHsKICAgICAgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5j
aWxTdXJmYWNlKGRlcHRoU3RlbmNpbCk7CiAgICAgICAgIG1BcHBsaWVkRGVwdGhidWZmZXJTZXJp
YWwgPSBkZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICAgICAgbUFwcGxpZWRTdGVuY2lsYnVmZmVyU2Vy
aWFsID0gc3RlbmNpbGJ1ZmZlclNlcmlhbDsKICAgICB9CiAKICAgICBEM0RWSUVXUE9SVDkgdmll
d3BvcnQ7CkBAIC0xNjkwLDcgKzE2MDQsOCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVyVGFy
Z2V0KGJvb2wgaWduCiAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29y
V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnNjaXNzb3JZICsgbVN0YXRl
LnNjaXNzb3JIZWlnaHR9OwotCisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gc3RkOjptaW4oc3Rh
dGljX2Nhc3Q8VUlOVD4ocmVjdC5yaWdodCksIGRlc2MuV2lkdGgpOworICAgICAgICAgICAgcmVj
dC5ib3R0b20gPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxVSU5UPihyZWN0LmJvdHRvbSksIGRlc2Mu
SGVpZ2h0KTsKICAgICAgICAgICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnJlY3QpOwogICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwg
VFJVRSk7CiAgICAgICAgIH0KQEAgLTE2OTgsNyArMTYxMyw3IEBAIGJvb2wgQ29udGV4dDo6YXBw
bHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICAgICAgewogICAgICAgICAgICAgZGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIG1TY2lzc29yU3RhdGVEaXJ0eSA9IGZhbHNlOwogICAgIH0K
IApAQCAtMTcxMCw3ICsxNjI1LDcgQEAgYm9vbCBDb250ZXh0OjphcHBseVJlbmRlclRhcmdldChi
b29sIGlnbgogICAgICAgICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwg
MS4wZiAvIHZpZXdwb3J0LkhlaWdodH07CiAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgKEdMZmxvYXQqKSZ4eSk7CiAKLSAgICAgICAgR0xpbnQg
d2luZG93ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhXaW5kb3dMb2NhdGlvbigpOworICAgICAgICBH
TGludCB3aW5kb3cgPSBwcm9ncmFtT2JqZWN0LT5nZXREeFZpZXdwb3J0TG9jYXRpb24oKTsKICAg
ICAgICAgR0xmbG9hdCB3aHh5WzRdID0ge21TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgbVN0
YXRlLnZpZXdwb3J0SGVpZ2h0IC8gMi4wZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChm
bG9hdCltU3RhdGUudmlld3BvcnRYICsgbVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1TdGF0ZS52aWV3cG9ydFkgKyBtU3RhdGUu
dmlld3BvcnRIZWlnaHQgLyAyLjBmfTsKQEAgLTE3NDgsNiArMTY2Myw4IEBAIHZvaWQgQ29udGV4
dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAgICBHTGludCBhbHdheXNGcm9udCA9ICFp
c1RyaWFuZ2xlTW9kZShkcmF3TW9kZSk7CiAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFp
dihwb2ludHNPckxpbmVzLCAxLCAmYWx3YXlzRnJvbnQpOwogCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisKICAgICBpZiAobUN1bGxT
dGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKICAgICB7CiAgICAgICAgIGlmIChtU3RhdGUu
Y3VsbEZhY2UpCkBAIC0xNzY0LDcgKzE2ODEsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUo
R0xlbnVtIGRyYXdNb2RlCiAKICAgICBpZiAobURlcHRoU3RhdGVEaXJ0eSkKICAgICB7Ci0gICAg
ICAgIGlmIChtU3RhdGUuZGVwdGhUZXN0KQorICAgICAgICBpZiAobVN0YXRlLmRlcHRoVGVzdCAm
JiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAg
ICAgICAgewogICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxF
LCBEM0RaQl9UUlVFKTsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WkZVTkMsIGVzMmR4OjpDb252ZXJ0Q29tcGFyaXNvbihtU3RhdGUuZGVwdGhGdW5jKSk7CkBAIC0x
ODI2LDcgKzE3NDMsNyBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2Rl
CiAKICAgICBpZiAobVN0ZW5jaWxTdGF0ZURpcnR5IHx8IG1Gcm9udEZhY2VEaXJ0eSkKICAgICB7
Ci0gICAgICAgIGlmIChtU3RhdGUuc3RlbmNpbFRlc3QgJiYgaGFzU3RlbmNpbCgpKQorICAgICAg
ICBpZiAobVN0YXRlLnN0ZW5jaWxUZXN0ICYmIGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNTdGVuY2ls
KCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
U1RFTkNJTEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIFRSVUUpOwpAQCAtMTg0NCw4ICsxNzYxLDcgQEAg
dm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBnZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgc3RlbmNpbCByZWYK
LSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgZ2w6OlN0ZW5jaWxidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgZ2w6OkRlcHRoU3RlbmNp
bGJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVm
ZmVyKCk7CiAgICAgICAgICAgICBHTHVpbnQgbWF4U3RlbmNpbCA9ICgxIDw8IHN0ZW5jaWxidWZm
ZXItPmdldFN0ZW5jaWxTaXplKCkpIC0gMTsKIAogICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5k
ZXJTdGF0ZShtU3RhdGUuZnJvbnRGYWNlID09IEdMX0NDVyA/IEQzRFJTX1NURU5DSUxXUklURU1B
U0sgOiBEM0RSU19DQ1dfU1RFTkNJTFdSSVRFTUFTSywgbVN0YXRlLnN0ZW5jaWxXcml0ZW1hc2sp
OwpAQCAtMTg5Nyw3ICsxODEzLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBk
cmF3TW9kZQogICAgIHsKICAgICAgICAgaWYgKG1TdGF0ZS5wb2x5Z29uT2Zmc2V0RmlsbCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkRlcHRoYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGdldEZy
YW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RGVwdGhTdGVu
Y2lsYnVmZmVyICpkZXB0aGJ1ZmZlciA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0aGJ1ZmZl
cigpOwogICAgICAgICAgICAgaWYgKGRlcHRoYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0xPUEVTQ0FMRURFUFRIQklB
UywgKigoRFdPUkQqKSZtU3RhdGUucG9seWdvbk9mZnNldEZhY3RvcikpOwpAQCAtMTkxNCw3ICsx
ODMwLDcgQEAgdm9pZCBDb250ZXh0OjphcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZQogICAgICAg
ICBtUG9seWdvbk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAobUNv
bmZpZy0+bU11bHRpU2FtcGxlICE9IDAgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgaWYgKGZy
YW1lYnVmZmVyT2JqZWN0LT5pc011bHRpc2FtcGxlKCkgJiYgbVNhbXBsZVN0YXRlRGlydHkpCiAg
ICAgewogICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSkKICAgICAgICAg
ewpAQCAtMTkyMyw3ICsxODM5LDM0IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0g
ZHJhd01vZGUKIAogICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7
CisgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5U
SUFMSUFTLCBUUlVFKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7CisKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1hc2sgPDw9IDE7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2FtcGxlQ292ZXJh
Z2VWYWx1ZSA+PSB0aHJlc2hvbGQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBmOworICAgICAgICAgICAgICAgICAgICAgICAg
bWFzayB8PSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNv
dmVyYWdlSW52ZXJ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFz
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNB
TVBMRUFOVElBTElBUywgRkFMU0UpOwogICAgICAgICB9CiAKICAgICAgICAgbVNhbXBsZVN0YXRl
RGlydHkgPSBmYWxzZTsKQEAgLTIwMDUsNyArMTk0OCw3IEBAIEdMZW51bSBDb250ZXh0OjphcHBs
eVZlcnRleEJ1ZmZlcihjb25zdCAKIC8vIEFwcGxpZXMgdGhlIGluZGljZXMgYW5kIGVsZW1lbnQg
YXJyYXkgYmluZGluZ3MgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCiBHTGVudW0gQ29udGV4dDo6
YXBwbHlJbmRleEJ1ZmZlcihjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTGVu
dW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykKIHsK
LSAgICBHTGVudW0gZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZVJlbmRlclZhbGlkYXRlKG1v
ZGUsIHR5cGUsIGNvdW50LCBnZXRCdWZmZXIobVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlciksIGlu
ZGljZXMsIGluZGV4SW5mbyk7CisgICAgR0xlbnVtIGVyciA9IG1JbmRleERhdGFNYW5hZ2VyLT5w
cmVSZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3VudCwgbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsKIAogICAgIGlmIChlcnIgPT0gR0xfTk9f
RVJST1IpCiAgICAgewpAQCAtMjA5Miw3ICsyMDM1LDE4IEBAIHZvaWQgQ29udGV4dDo6YXBwbHlU
ZXh0dXJlcygpCiAKIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IHZvaWQqIHBpeGVscykKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRGcmFt
ZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1
ZmZlcigpOworCisgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgfQorCisgICAgaWYgKGdldFJlYWRGcmFtZWJ1
ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXItPmdldFJl
bmRlclRhcmdldCgpOwogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwogCkBAIC0yMTU1LDYgKzIxMDksMTkgQEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50
IHgsIEdMaW50IAogCiAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wOyBqKyspCiAgICAgeworICAgICAgICBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhH
OEI4ICYmCisgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKKyAgICAgICAgICAg
IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmFz
dCBwYXRoIGZvciBFWFRfcmVhZF9mb3JtYXRfYmdyYSwgZ2l2ZW4KKyAgICAgICAgICAgIC8vIGFu
IFJHQkEgc291cmNlIGJ1ZmZlci4gIE5vdGUgdGhhdCBidWZmZXJzIHdpdGggbm8KKyAgICAgICAg
ICAgIC8vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KKyAgICAgICAgICAg
IG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAorICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArIGogKiBsb2NrLlBpdGNoLAorICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0KSAqIDQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKICAgICAg
ICAgewogICAgICAgICAgICAgZmxvYXQgcjsKQEAgLTIyNDMsNiArMjIxMCw0NiBAQCB2b2lkIENv
bnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgCiAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91
dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOworICAgICAg
ICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWdu
ZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBp
ICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYp
OworICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10g
PSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUOgorICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3Ag
R0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgorICAg
ICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCisgICAgICAgICAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAv
LyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAg
ICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8CisgICAgICAgICAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBv
ZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBz
byBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8PCAxMil8CisgICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIgKyAwLjVmKSA8PCA4KSB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8
PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQ
aXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlw
ZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0
ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAg
ICAyICAgIDEgICAgMAorICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgLy8gfCA0dGggfCAgICAgICAgICAzcmQgICAgICAg
ICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAor
ICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
ICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNv
bXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAg
IGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoICAgICBhICsgMC41Zikg
PDwgMTUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICog
ciArIDAuNWYpIDw8IDEwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNo
b3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAoKHVu
c2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBH
TF9SR0I6ICAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAgICAgICAgewpAQCAtMjI2Nyw3ICsyMjc0LDcg
QEAgdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogCiB2b2lkIENvbnRl
eHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBnZXRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogCiAgICAgaWYgKCFmcmFtZWJ1ZmZlck9i
amVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZG
RVJfQ09NUExFVEUpCiAgICAgewpAQCAtMjI5OSwyMiArMjMwNiwyNCBAQCB2b2lkIENvbnRleHQ6
OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgfQogICAgIH0KIAotICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhTdGVu
Y2lsKCk7Ci0KICAgICBHTHVpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwogCi0gICAgaWYgKCht
YXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBkZXB0aFN0ZW5jaWwpCisgICAgaWYgKG1h
c2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBEM0RTVVJGQUNFX0RF
U0MgZGVzYzsKLSAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKLQogICAgICAg
ICBtYXNrICY9IH5HTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCBz
dGVuY2lsU2l6ZSA9IGVzMmR4OjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZvcm1hdCk7Ci0gICAgICAg
IHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKLQotICAgICAgICBp
ZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCkKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0
LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIo
KS0+Z2V0RGVwdGhTdGVuY2lsKCk7CisgICAgICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsK
KyAgICAgICAgICAgIGRlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGVzMmR4OjpHZXRTdGVuY2lsU2l6ZShkZXNjLkZv
cm1hdCk7CisgICAgICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7CisKKyAgICAgICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZsYWdzIHw9IEQzRENMRUFSX1NURU5DSUw7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2MTgsNyArMjYyNyw4IEBAIHZvaWQg
Q29udGV4dDo6ZmluaXNoKCkKICAgICAgICAgSURpcmVjdDNEU3RhdGVCbG9jazkgKnNhdmVkU3Rh
dGUgPSBOVUxMOwogICAgICAgICBkZXZpY2UtPkNyZWF0ZVN0YXRlQmxvY2soRDNEU0JUX0FMTCwg
JnNhdmVkU3RhdGUpOwogCi0gICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5Jc3N1ZShEM0RJU1NVRV9C
RUdJTik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gb2NjbHVzaW9uUXVlcnktPklzc3VlKEQz
RElTU1VFX0JFR0lOKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAg
ICAgICAvLyBSZW5kZXIgc29tZXRoaW5nIG91dHNpZGUgdGhlIHJlbmRlciB0YXJnZXQKICAgICAg
ICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOwpAQCAtMjYyOSw3ICsyNjM5LDgg
QEAgdm9pZCBDb250ZXh0OjpmaW5pc2goKQogICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7
CiAgICAgICAgIGRldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1BPSU5UTElTVCwgMSwgZGF0
YSwgc2l6ZW9mKGRhdGEpKTsKIAotICAgICAgICBvY2NsdXNpb25RdWVyeS0+SXNzdWUoRDNESVNT
VUVfRU5EKTsKKyAgICAgICAgcmVzdWx0ID0gb2NjbHVzaW9uUXVlcnktPklzc3VlKEQzRElTU1VF
X0VORCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgd2hp
bGUgKG9jY2x1c2lvblF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpID09
IFNfRkFMU0UpCiAgICAgICAgIHsKQEAgLTI2NjMsMTUgKzI2NzQsMTYgQEAgdm9pZCBDb250ZXh0
OjpmbHVzaCgpCiAKICAgICBpZiAoZXZlbnRRdWVyeSkKICAgICB7Ci0gICAgICAgIGV2ZW50UXVl
cnktPklzc3VlKEQzRElTU1VFX0VORCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZXZlbnRR
dWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKworICAgICAgICByZXN1bHQgPSBldmVudFF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQz
REdFVERBVEFfRkxVU0gpOworICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CiAKLSAgICAg
ICAgd2hpbGUgKGV2ZW50UXVlcnktPkdldERhdGEoTlVMTCwgMCwgRDNER0VUREFUQV9GTFVTSCkg
PT0gU19GQUxTRSkKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKICAg
ICAgICAgewotICAgICAgICAgICAgLy8gS2VlcCBwb2xsaW5nLCBidXQgYWxsb3cgb3RoZXIgdGhy
ZWFkcyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGZpcnN0Ci0gICAgICAgICAgICBTbGVlcCgwKTsK
KyAgICAgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgZXZlbnRRdWVyeS0+UmVsZWFzZSgpOwogICAgIH0KIH0KIApAQCAtMjc0MiwxNCArMjc1NCw0
MyBAQCBHTGVudW0gQ29udGV4dDo6Z2V0RXJyb3IoKQogICAgIHJldHVybiBHTF9OT19FUlJPUjsK
IH0KIAotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0UGl4ZWxTaGFkZXJQcm9maWxlKCkKK2Jvb2wg
Q29udGV4dDo6c3VwcG9ydHNTaGFkZXJNb2RlbDMoKSBjb25zdAoreworICAgIHJldHVybiBtU3Vw
cG9ydHNTaGFkZXJNb2RlbDM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7Cit9CisKK2lu
dCBDb250ZXh0OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBp
bnQgcmVxdWVzdGVkKSBjb25zdAogewotICAgIHJldHVybiBtUHNQcm9maWxlOworICAgIGlmIChy
ZXF1ZXN0ZWQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7CisgICAgfQor
CisgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKyAgICBpZiAoaXRyID09IG1NdWx0aVNh
bXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg
ICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVT
OyArK2kpCisgICAgeworICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7CiB9CiAKLWNvbnN0IGNoYXIgKkNvbnRl
eHQ6OmdldFZlcnRleFNoYWRlclByb2ZpbGUoKQorYm9vbCBDb250ZXh0OjpzdXBwb3J0c0NvbXBy
ZXNzZWRUZXh0dXJlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1Wc1Byb2ZpbGU7CisgICAgcmV0
dXJuIG1TdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlczsKIH0KIAogdm9pZCBDb250ZXh0OjpkZXRh
Y2hCdWZmZXIoR0x1aW50IGJ1ZmZlcikKQEAgLTI3NTgsMjEgKzI3OTksMjEgQEAgdm9pZCBDb250
ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcgogICAgIC8vIElmIGEgYnVmZmVyIG9iamVj
dCBpcyBkZWxldGVkIHdoaWxlIGl0IGlzIGJvdW5kLCBhbGwgYmluZGluZ3MgdG8gdGhhdCBvYmpl
Y3QgaW4gdGhlIGN1cnJlbnQgY29udGV4dAogICAgIC8vIChpLmUuIGluIHRoZSB0aHJlYWQgdGhh
dCBjYWxsZWQgRGVsZXRlLUJ1ZmZlcnMpIGFyZSByZXNldCB0byB6ZXJvLgogCi0gICAgaWYgKG1T
dGF0ZS5hcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgaWYgKG1TdGF0ZS5hcnJheUJ1ZmZlci5p
ZCgpID09IGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlciA9IDA7Cisg
ICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgIGlmIChtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQogICAgIHsKLSAgICAgICAgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlciA9IDA7CisgICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0
KE5VTEwpOwogICAgIH0KIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCiAgICAgewotICAgICAgICBpZiAobVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlciA9PSBidWZmZXIpCisg
ICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVy
LmlkKCkgPT0gYnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyID0gMDsKKyAgICAgICAgICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMjc4Nyw5ICsyODI4LDkgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hU
ZXh0dXJlKEdMdWludCB0ZXh0dQogICAgIHsKICAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7
IHNhbXBsZXIgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisrKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdID09
IHRleHR1cmUpCisgICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3Nh
bXBsZXJdLmlkKCkgPT0gdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0gPSAwOworICAgICAgICAgICAgICAg
IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5zZXQoTlVMTCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzk5LDExICsyODQwLDE3IEBAIHZvaWQgQ29u
dGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHUKICAgICAvLyBhcyBpZiBGcmFtZWJ1ZmZl
clRleHR1cmUyRCBoYWQgYmVlbiBjYWxsZWQsIHdpdGggYSB0ZXh0dXJlIG9mIDAsIGZvciBlYWNo
IGF0dGFjaG1lbnQgcG9pbnQgdG8gd2hpY2ggdGhpcwogICAgIC8vIGltYWdlIHdhcyBhdHRhY2hl
ZCBpbiB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgogCi0gICAgRnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZy
YW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmRyYXdG
cmFtZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogCi0gICAgaWYgKGZyYW1lYnVmZmVy
KQorICAgIGlmIChyZWFkRnJhbWVidWZmZXIpCiAgICAgewotICAgICAgICBmcmFtZWJ1ZmZlci0+
ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5kZXRhY2hU
ZXh0dXJlKHRleHR1cmUpOworICAgIH0KKworICAgIGlmIChkcmF3RnJhbWVidWZmZXIgJiYgZHJh
d0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKKyAgICB7CisgICAgICAgIGRyYXdGcmFt
ZWJ1ZmZlci0+ZGV0YWNoVGV4dHVyZSh0ZXh0dXJlKTsKICAgICB9CiB9CiAKQEAgLTI4MTMsOSAr
Mjg2MCwxNCBAQCB2b2lkIENvbnRleHQ6OmRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAg
Ly8gSWYgYSBmcmFtZWJ1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byB0aGUgdGFyZ2V0
IEZSQU1FQlVGRkVSIGlzIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3VnaAogICAgIC8vIEJpbmRGcmFt
ZWJ1ZmZlciBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQgb2YgRlJBTUVCVUZGRVIg
YW5kIGZyYW1lYnVmZmVyIG9mIHplcm8uCiAKLSAgICBpZiAobVN0YXRlLmZyYW1lYnVmZmVyID09
IGZyYW1lYnVmZmVyKQorICAgIGlmIChtU3RhdGUucmVhZEZyYW1lYnVmZmVyID09IGZyYW1lYnVm
ZmVyKQorICAgIHsKKyAgICAgICAgYmluZFJlYWRGcmFtZWJ1ZmZlcigwKTsKKyAgICB9CisKKyAg
ICBpZiAobVN0YXRlLmRyYXdGcmFtZWJ1ZmZlciA9PSBmcmFtZWJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIGJpbmRGcmFtZWJ1ZmZlcigwKTsKKyAgICAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsK
ICAgICB9CiB9CiAKQEAgLTI4MjUsNyArMjg3Nyw3IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVu
ZGVyYnVmZmVyKEdMdWludCAKICAgICAvLyBJZiBhIHJlbmRlcmJ1ZmZlciB0aGF0IGlzIGN1cnJl
bnRseSBib3VuZCB0byBSRU5ERVJCVUZGRVIgaXMgZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJp
bmRSZW5kZXJidWZmZXIKICAgICAvLyBoYWQgYmVlbiBleGVjdXRlZCB3aXRoIHRoZSB0YXJnZXQg
UkVOREVSQlVGRkVSIGFuZCBuYW1lIG9mIHplcm8uCiAKLSAgICBpZiAobVN0YXRlLnJlbmRlcmJ1
ZmZlciA9PSByZW5kZXJidWZmZXIpCisgICAgaWYgKG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKSA9
PSByZW5kZXJidWZmZXIpCiAgICAgewogICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwogICAg
IH0KQEAgLTI4MzUsMTEgKzI4ODcsMTcgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZm
ZXIoR0x1aW50IAogICAgIC8vIHRoZW4gaXQgaXMgYXMgaWYgRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIgaGFkIGJlZW4gY2FsbGVkLCB3aXRoIGEgcmVuZGVyYnVmZmVyIG9mIDAsIGZvciBlYWNoIGF0
dGFjaG1lbnQKICAgICAvLyBwb2ludCB0byB3aGljaCB0aGlzIGltYWdlIHdhcyBhdHRhY2hlZCBp
biB0aGUgY3VycmVudGx5IGJvdW5kIGZyYW1lYnVmZmVyLgogCi0gICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gZ2V0RnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1l
YnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFt
ZWJ1ZmZlciA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOworCisgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
cikKKyAgICB7CisgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+ZGV0YWNoUmVuZGVyYnVmZmVyKHJl
bmRlcmJ1ZmZlcik7CisgICAgfQogCi0gICAgaWYgKGZyYW1lYnVmZmVyKQorICAgIGlmIChkcmF3
RnJhbWVidWZmZXIgJiYgZHJhd0ZyYW1lYnVmZmVyICE9IHJlYWRGcmFtZWJ1ZmZlcikKICAgICB7
Ci0gICAgICAgIGZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsK
KyAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5kZXRhY2hSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVy
KTsKICAgICB9CiB9CiAKQEAgLTI4NTksNyArMjkxNyw3IEBAIFRleHR1cmUgKkNvbnRleHQ6Omdl
dEluY29tcGxldGVUZXh0dXJlKFMKIAogICAgICAgICAgIGNhc2UgU0FNUExFUl8yRDoKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBU
ZXh0dXJlMkQodGhpcyk7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQg
PSBuZXcgVGV4dHVyZTJEKFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7CiAgICAgICAg
ICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCBHTF9SR0JBLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CiAgICAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGUyZDsKICAgICAgICAgICAgIH0KQEAgLTI4NjcsNyArMjkyNSw3IEBAIFRleHR1cmUgKkNv
bnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFMKIAogICAgICAgICAgIGNhc2UgU0FNUExFUl9D
VUJFOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBUZXh0dXJlQ3ViZU1hcCAqaW5jb21w
bGV0ZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmVNYXAodGhpcyk7CisgICAgICAgICAgICAgIFRleHR1
cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChUZXh0dXJlOjpJ
TkNPTVBMRVRFX1RFWFRVUkVfSUQpOwogCiAgICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5z
ZXRJbWFnZVBvc1goMCwgR0xfUkdCQSwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOwogICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAs
IEdMX1JHQkEsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKQEAg
LTI5MTEsMjMgKzI5NjksNiBAQCBib29sIENvbnRleHQ6OmlzVHJpYW5nbGVNb2RlKEdMZW51bSBk
cmF3CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIENvbnRleHQ6Omhhc1N0ZW5jaWwoKQot
ewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldEZyYW1lYnVmZmVyKCk7
Ci0KLSAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QpCi0gICAgewotICAgICAgICBTdGVuY2lsYnVm
ZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxi
dWZmZXIoKTsKLQotICAgICAgICBpZiAoc3RlbmNpbGJ1ZmZlck9iamVjdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxTaXplKCkg
PiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIENv
bnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
cykKIHsKICAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKQEAgLTI5
NDIsNiArMjk4MywyMiBAQCB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5k
CiAKIHZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCiB7CisgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7CisgICAgbUV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7CisgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKKyAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICI7CisgICAgbUV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKKworICAgIGlmIChzdXBwb3J0c0NvbXByZXNz
ZWRUZXh0dXJlcygpKQorICAgIHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhU
X3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOworICAgIH0KKworICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7CisgICAgfQorCiAgICAgaWYgKG1C
dWZmZXJCYWNrRW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQogICAgIHsKICAgICAgICAgbUV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwpAQCAtMjk1OSwxMyAr
MzAxNiwyODUgQEAgY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKAogICAg
IHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nLmNfc3RyKCk7CiB9CiAKK3ZvaWQgQ29udGV4dDo6Ymxp
dEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOworCisgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdl
dFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBn
ZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRG
cmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwK
KyAgICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVz
cygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICBpZiAo
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgUkVDVCBzb3VyY2VS
ZWN0OworICAgIFJFQ1QgZGVzdFJlY3Q7CisKKyAgICBpZiAoc3JjWDAgPCBzcmNYMSkKKyAgICB7
CisgICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHNyY1gwOworICAgICAgICBzb3VyY2VSZWN0LnJp
Z2h0ID0gc3JjWDE7CisgICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMDsKKyAgICAgICAgZGVz
dFJlY3QucmlnaHQgPSBkc3RYMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0gc3JjWDE7CisgICAgICAgIGRlc3RSZWN0LmxlZnQgPSBkc3RYMTsKKyAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHNyY1gwOworICAgICAgICBkZXN0UmVjdC5yaWdodCA9
IGRzdFgwOworICAgIH0KKworICAgIC8vIEFyZ3VtZW50cyB0byBTdHJldGNoUmVjdCBtdXN0IGJl
IGluIEQzRC1zdHlsZSAoMC10b3ApIGNvb3JkaW5hdGVzLCBzbyB3ZSBtdXN0IAorICAgIC8vIGZs
aXAgb3VyIFktdmFsdWVzIGhlcmUKKyAgICBpZiAoc3JjWTAgPCBzcmNZMSkKKyAgICB7CisgICAg
ICAgIHNvdXJjZVJlY3QuYm90dG9tID0gc3JjWTE7CisgICAgICAgIGRlc3RSZWN0LmJvdHRvbSA9
IGRzdFkxOworICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHNyY1kwOworICAgICAgICBkZXN0UmVj
dC50b3AgPSBkc3RZMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc291cmNlUmVj
dC5ib3R0b20gPSBzcmNZMDsKKyAgICAgICAgZGVzdFJlY3QuYm90dG9tID0gZHN0WTA7CisgICAg
ICAgIHNvdXJjZVJlY3QudG9wID0gc3JjWTE7CisgICAgICAgIGRlc3RSZWN0LnRvcCA9IGRzdFkx
OworICAgIH0KKworICAgIFJFQ1Qgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7Cisg
ICAgUkVDVCBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OworCisgICAgaWYgKG1TdGF0ZS5z
Y2lzc29yVGVzdCkKKyAgICB7CisgICAgICAgIC8vIE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhl
IGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNoIHBhc3MgdGhlIHNjaXNzb3IgdGVzdAorICAg
ICAgICAvLyBQbGVhc2Ugbm90ZTogdGhlIGRlc3RSZWN0IGlzIG5vdyBpbiBEM0Qtc3R5bGUgY29v
cmRpbmF0ZXMsIHNvIHRoZSAqdG9wKiBvZiB0aGUKKyAgICAgICAgLy8gcmVjdCB3aWxsIGJlIGNo
ZWNrZWQgYWdhaW5zdCBzY2lzc29yWSwgcmF0aGVyIHRoYW4gdGhlIGJvdHRvbS4KKyAgICAgICAg
aWYgKGRlc3RSZWN0LmxlZnQgPCBtU3RhdGUuc2Npc3NvclgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yWCAtIGRlc3RSZWN0LmxlZnQ7CisgICAgICAg
ICAgICBkZXN0U2Npc3NvcmVkUmVjdC5sZWZ0ID0gbVN0YXRlLnNjaXNzb3JYOworICAgICAgICAg
ICAgc291cmNlU2Npc3NvcmVkUmVjdC5sZWZ0ICs9IHhEaWZmOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGRlc3RSZWN0LnJpZ2h0ID4gbVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JX
aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHhEaWZmID0gZGVzdFJlY3QucmlnaHQg
LSAobVN0YXRlLnNjaXNzb3JYICsgbVN0YXRlLnNjaXNzb3JXaWR0aCk7CisgICAgICAgICAgICBk
ZXN0U2Npc3NvcmVkUmVjdC5yaWdodCA9IG1TdGF0ZS5zY2lzc29yWCArIG1TdGF0ZS5zY2lzc29y
V2lkdGg7CisgICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnJpZ2h0IC09IHhEaWZmOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlc3RSZWN0LnRvcCA8IG1TdGF0ZS5zY2lzc29yWSkK
KyAgICAgICAgeworICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3JZIC0gZGVz
dFJlY3QudG9wOworICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QudG9wID0gbVN0YXRlLnNj
aXNzb3JZOworICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC50b3AgKz0geURpZmY7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZGVzdFJlY3QuYm90dG9tID4gbVN0YXRlLnNjaXNzb3JZ
ICsgbVN0YXRlLnNjaXNzb3JIZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCB5RGlm
ZiA9IGRlc3RSZWN0LmJvdHRvbSAtIChtU3RhdGUuc2Npc3NvclkgKyBtU3RhdGUuc2Npc3Nvckhl
aWdodCk7CisgICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5ib3R0b20gPSBtU3RhdGUuc2Np
c3NvclkgKyBtU3RhdGUuc2Npc3NvckhlaWdodDsKKyAgICAgICAgICAgIHNvdXJjZVNjaXNzb3Jl
ZFJlY3QuYm90dG9tIC09IHlEaWZmOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CisgICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7
CisKKyAgICBSRUNUIHNvdXJjZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsKKyAg
ICBSRUNUIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OworCisgICAgLy8gVGhl
IHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmlt
bWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKKyAgICAvLyB0aGUgYWN0dWFs
IGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCisgICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQg
PCAwKQorICAgIHsKKyAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0Lmxl
ZnQ7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPSAwOworICAgICAgICBkZXN0VHJp
bW1lZFJlY3QubGVmdCArPSB4RGlmZjsKKyAgICB9CisKKyAgICBpbnQgcmVhZEJ1ZmZlcldpZHRo
ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOworICAgIGlu
dCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5n
ZXRIZWlnaHQoKTsKKyAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpOworICAgIGludCBkcmF3QnVmZmVySGVpZ2h0ID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQoKTsKKworICAgIGlm
IChzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA+IHJlYWRCdWZmZXJXaWR0aCkKKyAgICB7CisgICAg
ICAgIGludCB4RGlmZiA9IHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gcmVhZEJ1ZmZlcldpZHRo
OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCA9IHJlYWRCdWZmZXJXaWR0aDsKKyAg
ICAgICAgZGVzdFRyaW1tZWRSZWN0LnJpZ2h0IC09IHhEaWZmOworICAgIH0KKworICAgIGlmIChz
b3VyY2VUcmltbWVkUmVjdC50b3AgPCAwKQorICAgIHsKKyAgICAgICAgaW50IHlEaWZmID0gMCAt
IHNvdXJjZVRyaW1tZWRSZWN0LnRvcDsKKyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QudG9wID0g
MDsKKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnRvcCArPSB5RGlmZjsKKyAgICB9CisKKyAgICBp
ZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tID4gcmVhZEJ1ZmZlckhlaWdodCkKKyAgICB7Cisg
ICAgICAgIGludCB5RGlmZiA9IHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHJlYWRCdWZmZXJI
ZWlnaHQ7CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmJvdHRvbSA9IHJlYWRCdWZmZXJIZWln
aHQ7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7CisgICAgfQorCisg
ICAgaWYgKGRlc3RUcmltbWVkUmVjdC5sZWZ0IDwgMCkKKyAgICB7CisgICAgICAgIGludCB4RGlm
ZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QubGVmdDsKKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0Lmxl
ZnQgPSAwOworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICs9IHhEaWZmOworICAgIH0K
KworICAgIGlmIChkZXN0VHJpbW1lZFJlY3QucmlnaHQgPiBkcmF3QnVmZmVyV2lkdGgpCisgICAg
eworICAgICAgICBpbnQgeERpZmYgPSBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkcmF3QnVmZmVy
V2lkdGg7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCA9IGRyYXdCdWZmZXJXaWR0aDsK
KyAgICAgICAgc291cmNlVHJpbW1lZFJlY3QucmlnaHQgLT0geERpZmY7CisgICAgfQorCisgICAg
aWYgKGRlc3RUcmltbWVkUmVjdC50b3AgPCAwKQorICAgIHsKKyAgICAgICAgaW50IHlEaWZmID0g
MCAtIGRlc3RUcmltbWVkUmVjdC50b3A7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC50b3AgPSAw
OworICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC50b3AgKz0geURpZmY7CisgICAgfQorCisgICAg
aWYgKGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPiBkcmF3QnVmZmVySGVpZ2h0KQorICAgIHsKKyAg
ICAgICAgaW50IHlEaWZmID0gZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAtIGRyYXdCdWZmZXJIZWln
aHQ7CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gPSBkcmF3QnVmZmVySGVpZ2h0Owor
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLT0geURpZmY7CisgICAgfQorCisgICAg
Ym9vbCBwYXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOworICAgIGlmIChzb3VyY2VUcmltbWVkUmVj
dC5ib3R0b20gLSBzb3VyY2VUcmltbWVkUmVjdC50b3AgPCByZWFkRnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKCktPmdldEhlaWdodCgpIHx8CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJp
Z2h0IC0gc291cmNlVHJpbW1lZFJlY3QubGVmdCA8IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoKS0+Z2V0V2lkdGgoKSB8fCAKKyAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmJvdHRvbSAt
IGRlc3RUcmltbWVkUmVjdC50b3AgPCBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCkt
PmdldEhlaWdodCgpIHx8CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtIGRlc3RUcmlt
bWVkUmVjdC5sZWZ0IDwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0
aCgpIHx8CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAhPSAwIHx8IGRlc3RUcmltbWVk
UmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICE9IDAgfHwgZGVzdFRyaW1t
ZWRSZWN0LmxlZnQgIT0gMCkKKyAgICB7CisgICAgICAgIHBhcnRpYWxCdWZmZXJDb3B5ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgewor
ICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpIHx8CisgICAgICAgICAgICByZWFkRnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1
ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOworICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBibGl0UmVuZGVyVGFy
Z2V0ID0gdHJ1ZTsKKworICAgIH0KKworICAgIGlmIChtYXNrICYgKEdMX0RFUFRIX0JVRkZFUl9C
SVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgIHsKKyAgICAgICAgRGVwdGhTdGVuY2ls
YnVmZmVyICpyZWFkRFNCdWZmZXIgPSBOVUxMOworICAgICAgICBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRyYXdEU0J1ZmZlciA9IE5VTEw7CisKKyAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwsIGFuZCBkbyBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQg
ZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBzbyBpZiB3ZSBoYXZlCisgICAgICAgIC8vIGJvdGgg
YSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgor
CisgICAgICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAorICAgICAgICAgICAgICAgICAgICByZWFk
RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5j
aWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3
RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8CisgICAgICAgICAgICAg
ICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREM0RGb3JtYXQo
KSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RDNERm9ybWF0KCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGRy
YXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5KQorICAg
ICAgICB7CisgICAgICAgICAgICBFUlIoIk9ubHkgd2hvbGUtYnVmZmVyIGRlcHRoIGFuZCBzdGVu
Y2lsIGJsaXRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUt
YnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRy
YXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKKyAgICAg
ICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0
RGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0
RGlzcGxheSgpOworICAgICAgICBkaXNwbGF5LT5lbmRTY2VuZSgpOworCisgICAgICAgIGlmIChi
bGl0UmVuZGVyVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+U3RyZXRjaFJlY3QocmVhZEZyYW1lYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSwg
JnNvdXJjZVRyaW1tZWRSZWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpLCAmZGVzdFRy
aW1tZWRSZWN0LCBEM0RURVhGX05PTkUpOworCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJB
TkdMRSBmYWlsZWQ6IFN0cmV0Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5TdHJldGNoUmVjdChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgp
LCBOVUxMLCBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbCgpLCBOVUxMLCBEM0RURVhG
X05PTkUpOworCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgRVJSKCJCbGl0RnJhbWVidWZmZXJBTkdMRSBmYWlsZWQ6IFN0cmV0
Y2hSZWN0IHJldHVybmVkICV4LiIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB9CiAKIGV4dGVybiAiQyIKIHsK
LWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZykK
K2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywg
Y29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCkKIHsKLSAgICByZXR1cm4gbmV3IGdsOjpD
b250ZXh0KGNvbmZpZyk7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChjb25maWcsIHNoYXJl
Q29udGV4dCk7CiB9CiAKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4
dCkKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsOCBAQAogLy8g
Q29udGV4dC5oOiBEZWZpbmVzIHRoZSBnbDo6Q29udGV4dCBjbGFzcywgbWFuYWdpbmcgYWxsIEdM
IHN0YXRlIGFuZCBwZXJmb3JtaW5nCiAvLyByZW5kZXJpbmcgb3BlcmF0aW9ucy4gSXQgaXMgdGhl
IEdMRVMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEVHTENvbnRleHQuCiAKLSNpZm5kZWYg
SU5DTFVERV9DT05URVhUX0hfCi0jZGVmaW5lIElOQ0xVREVfQ09OVEVYVF9IXworI2lmbmRlZiBM
SUJHTEVTVjJfQ09OVEVYVF9IXworI2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9IXwogCiAjZGVm
aW5lIEdMX0FQSUNBTEwKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KQEAgLTE5LDYgKzE5LDggQEAK
ICNpbmNsdWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVm
Q291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIGVnbAogewpAQCAtNDAsOSArNDIsMTEgQEAgY2xh
c3MgVGV4dHVyZTJEOwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CiBjbGFzcyBGcmFtZWJ1ZmZlcjsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2U7CiBjbGFzcyBD
b2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoYnVmZmVyOwogY2xhc3MgU3RlbmNpbGJ1ZmZlcjsKK2Ns
YXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3Mg
SW5kZXhEYXRhTWFuYWdlcjsKIGNsYXNzIEJ1ZmZlckJhY2tFbmQ7CkBAIC02NywxNSArNzEsOCBA
QCBlbnVtCiBjb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsK
IGNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOwogY29uc3Qg
ZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUFYID0gMS4wZjsKLQotZW51bSBTYW1wbGVyVHlwZQot
ewotICAgIFNBTVBMRVJfMkQsCi0gICAgU0FNUExFUl9DVUJFLAotCi0gICAgU0FNUExFUl9UWVBF
X0NPVU5UCi19OworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTIg
PSAxLjBmOworY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01BWF9TTTMgPSA2
NC4wZjsKIAogc3RydWN0IENvbG9yCiB7CkBAIC05MCw3ICs4Nyw3IEBAIGNsYXNzIEF0dHJpYnV0
ZVN0YXRlCiB7CiAgIHB1YmxpYzoKICAgICBBdHRyaWJ1dGVTdGF0ZSgpCi0gICAgICAgIDogbVR5
cGUoR0xfRkxPQVQpLCBtU2l6ZSgwKSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBt
UG9pbnRlcihOVUxMKSwgbUJvdW5kQnVmZmVyKDApLCBtRW5hYmxlZChmYWxzZSkKKyAgICAgICAg
OiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDApLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUo
MCksIG1Qb2ludGVyKE5VTEwpLCBtRW5hYmxlZChmYWxzZSkKICAgICB7CiAgICAgICAgIG1DdXJy
ZW50VmFsdWVbMF0gPSAwOwogICAgICAgICBtQ3VycmVudFZhbHVlWzFdID0gMDsKQEAgLTEwNSw3
ICsxMDIsNyBAQCBjbGFzcyBBdHRyaWJ1dGVTdGF0ZQogICAgIEdMc2l6ZWkgbVN0cmlkZTsgLy8g
MCBtZWFucyBuYXR1cmFsIHN0cmlkZQogICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwogCi0gICAg
R0x1aW50IG1Cb3VuZEJ1ZmZlcjsgLy8gQ2FwdHVyZWQgd2hlbiBWZXJ0ZXhBcnJheVBvaW50ZXIg
aXMgY2FsbGVkLgorICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5kQnVmZmVyOyAvLyBD
YXB0dXJlZCB3aGVuIFZlcnRleEFycmF5UG9pbnRlciBpcyBjYWxsZWQuCiAKICAgICBib29sIG1F
bmFibGVkOyAvLyBGcm9tIEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKIApAQCAtMTgw
LDE2ICsxNzcsMTcgQEAgc3RydWN0IFN0YXRlCiAgICAgYm9vbCBkZXB0aE1hc2s7CiAKICAgICBp
bnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0IHNlbGVjdG9yIC0gR0xf
VEVYVFVSRTAKLSAgICBHTHVpbnQgYXJyYXlCdWZmZXI7Ci0gICAgR0x1aW50IGVsZW1lbnRBcnJh
eUJ1ZmZlcjsKLSAgICBHTHVpbnQgdGV4dHVyZTJEOwotICAgIEdMdWludCB0ZXh0dXJlQ3ViZU1h
cDsKLSAgICBHTHVpbnQgZnJhbWVidWZmZXI7Ci0gICAgR0x1aW50IHJlbmRlcmJ1ZmZlcjsKKyAg
ICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGFycmF5QnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVy
PEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+
IHRleHR1cmUyRDsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcDsK
KyAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOworICAgIEdMdWludCBkcmF3RnJhbWVidWZmZXI7
CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZmZXI7CiAgICAgR0x1
aW50IGN1cnJlbnRQcm9ncmFtOwogCiAgICAgQXR0cmlidXRlU3RhdGUgdmVydGV4QXR0cmlidXRl
W01BWF9WRVJURVhfQVRUUklCU107Ci0gICAgR0x1aW50IHNhbXBsZXJUZXh0dXJlW1NBTVBMRVJf
VFlQRV9DT1VOVF1bTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIEJpbmRpbmdQb2ludGVy
PFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfVFlQRV9DT1VOVF1bTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOwogCiAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OwogICAgIEdMaW50IHBh
Y2tBbGlnbm1lbnQ7CkBAIC0xOTgsNyArMTk2LDcgQEAgc3RydWN0IFN0YXRlCiBjbGFzcyBDb250
ZXh0CiB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcp
OworICAgIENvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCk7CiAKICAgICB+Q29udGV4dCgpOwogCkBAIC0yNzYsMTQgKzI3NCwx
NSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICB2b2lkIHNldEFjdGl2ZVNhbXBsZXIoaW50IGFjdGl2
ZSk7CiAKLSAgICBHTHVpbnQgZ2V0RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVp
bnQgZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldERyYXdG
cmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5k
bGUoKSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVuc2lnbmVkIGludCBhdHRyaWJOdW0s
IGJvb2wgZW5hYmxlZCk7CiAgICAgY29uc3QgQXR0cmlidXRlU3RhdGUgJmdldFZlcnRleEF0dHJp
YlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pOwotICAgIHZvaWQgc2V0VmVydGV4QXR0cmli
U3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgR0x1aW50IGJvdW5kQnVmZmVyLCBHTGludCBz
aXplLCBHTGVudW0gdHlwZSwKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVk
IGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBHTHNp
emVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CiAgICAgY29uc3Qgdm9pZCAqZ2V0VmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKIApAQCAtMjk1
LDMzICsyOTQsMzYgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0UGFja0FsaWdubWVudChH
TGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBjb25zdDsKIAor
ICAgIC8vIFRoZXNlIGNyZWF0ZSAgYW5kIGRlc3Ryb3kgbWV0aG9kcyBhcmUgbWVyZWx5IHBhc3Mt
dGhyb3VnaHMgdG8gCisgICAgLy8gUmVzb3VyY2VNYW5hZ2VyLCB3aGljaCBvd25zIHRoZXNlIG9i
amVjdCB0eXBlcwogICAgIEdMdWludCBjcmVhdGVCdWZmZXIoKTsKICAgICBHTHVpbnQgY3JlYXRl
U2hhZGVyKEdMZW51bSB0eXBlKTsKICAgICBHTHVpbnQgY3JlYXRlUHJvZ3JhbSgpOwogICAgIEdM
dWludCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgR0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAg
ICAgR0x1aW50IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIo
R0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAg
ICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRl
eHR1cmUoR0x1aW50IHRleHR1cmUpOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50
IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVy
YnVmZmVyKTsKIAorICAgIC8vIEZyYW1lYnVmZmVycyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQs
IHNvIHRoZXNlIG1ldGhvZHMgZG8gbm90IHBhc3MgdGhyb3VnaAorICAgIEdMdWludCBjcmVhdGVG
cmFtZWJ1ZmZlcigpOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVm
ZmVyKTsKKwogICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZv
aWQgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRU
ZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgYmluZFRleHR1cmVDdWJlTWFwKEdM
dWludCB0ZXh0dXJlKTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpOworICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwor
ICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAgIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKICAgICB2b2lkIHVzZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pOwogCiAgICAgdm9pZCBzZXRGcmFtZWJ1ZmZlclplcm8oRnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIHNldENvbG9yYnVmZmVyWmVybyhDb2xv
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyKTsKLSAgICB2b2lkIHNldERlcHRoYnVmZmVyWmVybyhEZXB0
aGJ1ZmZlciAqZGVwdGhCdWZmZXIpOwotICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlclplcm8oU3Rl
bmNpbGJ1ZmZlciAqc3RlbmNpbEJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoUmVu
ZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOworCisgICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9y
YWdlKFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlcik7CiAKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcyk7CiAKQEAgLTMz
MSw5ICszMzMsNiBAQCBjbGFzcyBDb250ZXh0CiAgICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVp
bnQgaGFuZGxlKTsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRs
ZSk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7Ci0g
ICAgQ29sb3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIERlcHRo
YnVmZmVyICpnZXREZXB0aGJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBTdGVuY2lsYnVmZmVy
ICpnZXRTdGVuY2lsYnVmZmVyKEdMdWludCBoYW5kbGUpOwogCiAgICAgQnVmZmVyICpnZXRBcnJh
eUJ1ZmZlcigpOwogICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CkBAIC0zNDEs
NyArMzQwLDggQEAgY2xhc3MgQ29udGV4dAogICAgIFRleHR1cmUyRCAqZ2V0VGV4dHVyZTJEKCk7
CiAgICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCk7CiAgICAgVGV4dHVyZSAq
Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5cGUp
OwotICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcigpOworICAgIEZyYW1lYnVmZmVyICpn
ZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RHJhd0ZyYW1lYnVmZmVy
KCk7CiAKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7
CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwpAQCAt
MzczLDEwICszNzMsMTUgQEAgY2xhc3MgQ29udGV4dAogCiAgICAgR0xlbnVtIGdldEVycm9yKCk7
CiAKLSAgICBjb25zdCBjaGFyICpnZXRQaXhlbFNoYWRlclByb2ZpbGUoKTsKLSAgICBjb25zdCBj
aGFyICpnZXRWZXJ0ZXhTaGFkZXJQcm9maWxlKCk7Ci0KKyAgICBib29sIHN1cHBvcnRzU2hhZGVy
TW9kZWwzKCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7CisgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQs
IGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIgKmdldEV4dGVuc2lvblN0cmlu
ZygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSBjb25zdDsK
KworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xp
bnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBk
c3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spOwogCiAgICAgQmxpdCAqZ2V0QmxpdHRlcigp
IHsgcmV0dXJuIG1CbGl0OyB9CiAKQEAgLTM5Niw3ICs0MDEsNiBAQCBjbGFzcyBDb250ZXh0CiAK
ICAgICBib29sIGN1bGxTa2lwc0RyYXcoR0xlbnVtIGRyYXdNb2RlKTsKICAgICBib29sIGlzVHJp
YW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7Ci0gICAgYm9vbCBoYXNTdGVuY2lsKCk7CiAKICAg
ICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uc3QgbUNvbmZpZzsKIApAQCAtNDA2LDI3ICs0MTAsMTEg
QEAgY2xhc3MgQ29udGV4dAogICAgIFRleHR1cmVDdWJlTWFwICptVGV4dHVyZUN1YmVNYXBaZXJv
OwogCiAgICAgQ29sb3JidWZmZXIgKm1Db2xvcmJ1ZmZlclplcm87Ci0gICAgRGVwdGhidWZmZXIg
Km1EZXB0aGJ1ZmZlclplcm87Ci0gICAgU3RlbmNpbGJ1ZmZlciAqbVN0ZW5jaWxidWZmZXJaZXJv
OwotCi0gICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsKLSAg
ICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKLQotICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBT
aGFkZXIqPiBTaGFkZXJNYXA7Ci0gICAgU2hhZGVyTWFwIG1TaGFkZXJNYXA7Ci0KLSAgICB0eXBl
ZGVmIHN0ZDo6bWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7Ci0gICAgUHJvZ3JhbU1h
cCBtUHJvZ3JhbU1hcDsKLQotICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBUZXh0dXJlKj4g
VGV4dHVyZU1hcDsKLSAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOworICAgIERlcHRoU3RlbmNp
bGJ1ZmZlciAqbURlcHRoU3RlbmNpbGJ1ZmZlclplcm87CiAKICAgICB0eXBlZGVmIHN0ZDo6bWFw
PEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBGcmFtZWJ1ZmZlck1h
cCBtRnJhbWVidWZmZXJNYXA7CiAKLSAgICB0eXBlZGVmIHN0ZDo6bWFwPEdMdWludCwgUmVuZGVy
YnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFwOwotICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVm
ZmVyTWFwOwotCiAgICAgdm9pZCBpbml0RXh0ZW5zaW9uU3RyaW5nKCk7CiAgICAgc3RkOjpzdHJp
bmcgbUV4dGVuc2lvblN0cmluZzsKIApAQCAtNDM1LDcgKzQyMyw3IEBAIGNsYXNzIENvbnRleHQK
ICAgICBJbmRleERhdGFNYW5hZ2VyICptSW5kZXhEYXRhTWFuYWdlcjsKIAogICAgIEJsaXQgKm1C
bGl0OwotCisgICAgCiAgICAgVGV4dHVyZSAqbUluY29tcGxldGVUZXh0dXJlc1tTQU1QTEVSX1RZ
UEVfQ09VTlRdOwogCiAgICAgLy8gUmVjb3JkZWQgZXJyb3JzCkBAIC00NTAsOSArNDM4LDEyIEBA
IGNsYXNzIENvbnRleHQKICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtOwogICAgIHVu
c2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKICAgICB1bnNpZ25lZCBpbnQg
bUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdGVu
Y2lsYnVmZmVyU2VyaWFsOwogCi0gICAgY29uc3QgY2hhciAqbVBzUHJvZmlsZTsKLSAgICBjb25z
dCBjaGFyICptVnNQcm9maWxlOworICAgIGJvb2wgbVN1cHBvcnRzU2hhZGVyTW9kZWwzOworICAg
IHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPiBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIEdM
c2l6ZWkgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisgICAgYm9vbCBtU3VwcG9ydHNDb21wcmVzc2Vk
VGV4dHVyZXM7CiAKICAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdzCiAgICAgYm9vbCBtQ2xlYXJT
dGF0ZURpcnR5OwpAQCAtNDcxLDEzICs0NjIsMTUgQEAgY2xhc3MgQ29udGV4dAogICAgIElEaXJl
Y3QzRFN0YXRlQmxvY2s5ICptTWFza2VkQ2xlYXJTYXZlZFN0YXRlOwogCiAgICAgRDNEQ0FQUzkg
bURldmljZUNhcHM7CisKKyAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiB9
OwogfQogCiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlvbnMgZm9yIHVzZSBieSBF
R0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmZp
Zyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQpOwogdm9pZCBnbERlc3Ryb3lDb250
ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4
dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
OwogZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6IEFOR0xFL3NyYy9s
aWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVT
djIvRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw4NSArMTYsMTA5IEBACiAK
IG5hbWVzcGFjZSBnbAogeworCiBGcmFtZWJ1ZmZlcjo6RnJhbWVidWZmZXIoKQogewogICAgIG1D
b2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1Db2xvcmJ1ZmZlckhhbmRsZSA9IDA7Ci0K
ICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtRGVwdGhidWZmZXJIYW5kbGUg
PSAwOwotCiAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1
ZmZlckhhbmRsZSA9IDA7CiB9CiAKIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogeworICAg
IG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOworICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Cit9CisKK1Jl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwg
R0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXRDb250ZXh0KCk7CisgICAgUmVuZGVyYnVmZmVyICpidWZmZXIgPSBOVUxMOworCisgICAgaWYg
KHR5cGUgPT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIHsKKyAgICAgICAgYnVm
ZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzVGV4dHVyZVRhcmdldCh0eXBlKSkKKyAgICB7CisgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0Q29sb3JidWZmZXIodHlwZSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGJ1ZmZlcjsKIH0KIAogdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBjb2xvcmJ1ZmZlcikKIHsKICAgICBtQ29sb3JidWZmZXJUeXBlID0gdHlwZTsK
LSAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSBjb2xvcmJ1ZmZlcjsKKyAgICBtQ29sb3JidWZmZXJQ
b2ludGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIpKTsKIH0KIAog
dm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aGJ1ZmZlcikKIHsKICAgICBtRGVwdGhidWZmZXJUeXBlID0gdHlwZTsKLSAgICBtRGVwdGhidWZm
ZXJIYW5kbGUgPSBkZXB0aGJ1ZmZlcjsKKyAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29r
dXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIpKTsKIH0KIAogdm9pZCBGcmFtZWJ1ZmZl
cjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCiB7
CiAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gdHlwZTsKLSAgICBtU3RlbmNpbGJ1ZmZlckhhbmRs
ZSA9IHN0ZW5jaWxidWZmZXI7CisgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChsb29rdXBS
ZW5kZXJidWZmZXIodHlwZSwgc3RlbmNpbGJ1ZmZlcikpOwogfQogCiB2b2lkIEZyYW1lYnVmZmVy
OjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewotICAgIGlmIChtQ29sb3JidWZmZXJI
YW5kbGUgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCisg
ICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzVGV4dHVyZVRh
cmdldChtQ29sb3JidWZmZXJUeXBlKSkKICAgICB7CiAgICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUg
PSBHTF9OT05FOwotICAgICAgICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOworICAgICAgICBtQ29s
b3JidWZmZXJQb2ludGVyLnNldChOVUxMKTsKICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVy
SGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQor
ICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc1RleHR1cmVU
YXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCiAgICAgewogICAgICAgICBtRGVwdGhidWZmZXJUeXBl
ID0gR0xfTk9ORTsKLSAgICAgICAgbURlcHRoYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgbURl
cHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVySGFuZGxlID09IHRleHR1cmUgJiYgSXNUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlw
ZSkpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNU
ZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCiAgICAgewogICAgICAgICBtU3RlbmNp
bGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlckhhbmRsZSA9IDA7
CisgICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CiAgICAgfQogfQogCiB2
b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcikK
IHsKLSAgICBpZiAobUNvbG9yYnVmZmVySGFuZGxlID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29sb3Ji
dWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRl
ci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJV
RkZFUikKICAgICB7CiAgICAgICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtQ29sb3JidWZmZXJIYW5kbGUgPSAwOworICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNl
dChOVUxMKTsKICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVySGFuZGxlID09IHJlbmRlcmJ1
ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAobURl
cHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBl
ID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7CiAgICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBH
TF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJIYW5kbGUgPSAwOworICAgICAgICBtRGVwdGhi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJI
YW5kbGUgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJC
VUZGRVIpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZl
ciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsKICAgICAg
ICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJI
YW5kbGUgPSAwOworICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwogICAg
IH0KIH0KIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwo
KQogewotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1ZmZlcigpOwor
ICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyLmdldCgp
OwogCiAgICAgaWYgKGNvbG9yYnVmZmVyKQogICAgIHsKQEAgLTEwNiw3ICsxMzAsNyBAQCB1bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdlCiAKIElEaXJlY3QzRFN1cmZhY2U5
ICpGcmFtZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBSZW5kZXJidWZmZXIgKmNv
bG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXIgKmNvbG9yYnVm
ZmVyID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1ZmZlcikK
ICAgICB7CkBAIC0xMTYsMTAgKzE0MCwyNiBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqRnJhbWVidWZm
ZXI6OmdldFJlbmRlCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK0lEaXJlY3QzRFN1cmZhY2U5ICpG
cmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRo
c3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgCisgICAgaWYg
KCFkZXB0aHN0ZW5jaWxidWZmZXIpCisgICAgeworICAgICAgICBkZXB0aHN0ZW5jaWxidWZmZXIg
PSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgfQorCisgICAgaWYgKGRlcHRoc3Rl
bmNpbGJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJldHVybiBkZXB0aHN0ZW5jaWxidWZmZXItPmdl
dERlcHRoU3RlbmNpbCgpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCiB1bnNpZ25l
ZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyU2VyaWFsKCkKIHsKLSAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0gICAgRGVwdGhidWZmZXIgKmRlcHRo
YnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIobURlcHRoYnVmZmVySGFuZGxlKTsKKyAg
ICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsK
IAogICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICB7CkBAIC0xMjksNzAgKzE2OSw1OCBAQCB1bnNp
Z25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyCiAgICAgcmV0dXJuIDA7CiB9CiAK
LUlEaXJlY3QzRFN1cmZhY2U5ICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3Vuc2ln
bmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpCiB7Ci0gICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIERlcHRoYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IGNvbnRleHQtPmdldERlcHRoYnVmZmVyKG1EZXB0aGJ1ZmZlckhhbmRsZSk7
CisgICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVy
LmdldCgpOwogCi0gICAgaWYgKGRlcHRoYnVmZmVyKQorICAgIGlmIChzdGVuY2lsYnVmZmVyKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGRlcHRoYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZW5jaWxidWZmZXItPmdldFNlcmlhbCgpOwogICAgIH0KIAotICAgIHJl
dHVybiBOVUxMOworICAgIHJldHVybiAwOwogfQogCiBDb2xvcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldENvbG9yYnVmZmVyKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7Ci0gICAgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyID0gTlVMTDsKKyAgICBSZW5k
ZXJidWZmZXIgKnJiID0gbUNvbG9yYnVmZmVyUG9pbnRlci5nZXQoKTsKIAotICAgIGlmIChtQ29s
b3JidWZmZXJUeXBlID09IEdMX05PTkUpCisgICAgaWYgKHJiICE9IE5VTEwgJiYgcmItPmlzQ29s
b3JidWZmZXIoKSkKICAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIGNvbG9y
YnVmZmVyID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCi0gICAgewotICAgICAgICBjb2xvcmJ1ZmZlciA9IGNvbnRleHQtPmdl
dENvbG9yYnVmZmVyKG1Db2xvcmJ1ZmZlckhhbmRsZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDb2xvcmJ1ZmZlcio+KHJiLT5nZXRTdG9yYWdlKCkpOwogICAgIH0KICAgICBlbHNlCiAg
ICAgewotICAgICAgICBjb2xvcmJ1ZmZlciA9IGNvbnRleHQtPmdldFRleHR1cmUobUNvbG9yYnVm
ZmVySGFuZGxlKS0+Z2V0Q29sb3JidWZmZXIobUNvbG9yYnVmZmVyVHlwZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gY29sb3JidWZmZXI7CisgICAgICAgIHJldHVybiBOVUxMOwogICAg
IH0KLQotICAgIHJldHVybiBOVUxMOwogfQogCi1EZXB0aGJ1ZmZlciAqRnJhbWVidWZmZXI6Omdl
dERlcHRoYnVmZmVyKCkKK0RlcHRoU3RlbmNpbGJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRo
YnVmZmVyKCkKIHsKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7
Ci0gICAgRGVwdGhidWZmZXIgKmRlcHRoYnVmZmVyID0gY29udGV4dC0+Z2V0RGVwdGhidWZmZXIo
bURlcHRoYnVmZmVySGFuZGxlKTsKKyAgICBSZW5kZXJidWZmZXIgKnJiID0gbURlcHRoYnVmZmVy
UG9pbnRlci5nZXQoKTsKIAotICAgIGlmIChkZXB0aGJ1ZmZlciAmJiBkZXB0aGJ1ZmZlci0+aXNE
ZXB0aGJ1ZmZlcigpKQorICAgIGlmIChyYiAhPSBOVUxMICYmIHJiLT5pc0RlcHRoYnVmZmVyKCkp
CiAgICAgewotICAgICAgICByZXR1cm4gZGVwdGhidWZmZXI7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxEZXB0aFN0ZW5jaWxidWZmZXIqPihyYi0+Z2V0U3RvcmFnZSgpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gICAgcmV0dXJu
IE5VTEw7CiB9CiAKLVN0ZW5jaWxidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVy
KCkKK0RlcHRoU3RlbmNpbGJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKQog
ewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBTdGVu
Y2lsYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZlcihtU3Rl
bmNpbGJ1ZmZlckhhbmRsZSk7CisgICAgUmVuZGVyYnVmZmVyICpyYiA9IG1TdGVuY2lsYnVmZmVy
UG9pbnRlci5nZXQoKTsKIAotICAgIGlmIChzdGVuY2lsYnVmZmVyICYmIHN0ZW5jaWxidWZmZXIt
PmlzU3RlbmNpbGJ1ZmZlcigpKQorICAgIGlmIChyYiAhPSBOVUxMICYmIHJiLT5pc1N0ZW5jaWxi
dWZmZXIoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGVuY2lsYnVmZmVyOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGVwdGhTdGVuY2lsYnVmZmVyKj4ocmItPmdldFN0b3JhZ2UoKSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQot
ICAgIHJldHVybiBOVUxMOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVy
VHlwZSgpCkBAIC0yMTIsMjUgKzI0MCw1NiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5j
aWxidWZmZXJUeXBlCiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5kbGUo
KQogewotICAgIHJldHVybiBtQ29sb3JidWZmZXJIYW5kbGU7CisgICAgcmV0dXJuIG1Db2xvcmJ1
ZmZlclBvaW50ZXIuaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZl
ckhhbmRsZSgpCiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlckhhbmRsZTsKKyAgICByZXR1cm4g
bURlcHRoYnVmZmVyUG9pbnRlci5pZCgpOwogfQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKQogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlckhhbmRsZTsK
KyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCk7CiB9CiAKLUdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKK2Jvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKQog
ewotICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKyAgICBpZiAo
bVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgeworICAgICAgICBEZXB0aFN0ZW5j
aWxidWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKKyAg
ICAgICAgaWYgKHN0ZW5jaWxidWZmZXJPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGVuY2lsYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsU2l6ZSgpID4gMDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZWJ1ZmZlcjo6aXNN
dWx0aXNhbXBsZSgpCit7CisgICAgLy8gSWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0
ZSwgYXR0YWNobWVudCBzYW1wbGVzIG1heSBiZSBtaXNtYXRjaGVkLCBhbmQgaXQKKyAgICAvLyBj
YW5ub3QgYmUgdXNlZCBhcyBhIG11bHRpc2FtcGxlIGZyYW1lYnVmZmVyLiBJZiBpdCBpcyBjb21w
bGV0ZSwgaXQgaXMgcmVxdWlyZWQgdG8KKyAgICAvLyBoYXZlIGEgY29sb3IgYXR0YWNobWVudCwg
YW5kIGFsbCBpdHMgYXR0YWNobWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBzYW1w
bGVzLAorICAgIC8vIHNvIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhlIGNvbG9yYnVmZmVy
IHdpbGwgaW5kaWNhdGUgd2hldGhlciB0aGUgZnJhbWVidWZmZXIgaXMKKyAgICAvLyBtdWx0aXNh
bXBsZWQuCisgICAgaWYgKGNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
ICYmIGdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKSA+IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQorewogICAg
IGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhlaWdodCA9IDA7CisgICAgaW50IHNhbXBsZXMgPSAt
MTsKIAogICAgIGlmIChtQ29sb3JidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewpAQCAtMjQ2
LDEzICszMDUsMjkgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAg
ICAgfQogCisgICAgICAgIGlmIChJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdldEZv
cm1hdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB3
aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1
ZmZlci0+Z2V0SGVpZ2h0KCk7CisgICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2Ft
cGxlcygpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CisgICAgfQorCisgICAgRGVwdGhT
dGVuY2lsYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CisgICAgRGVwdGhTdGVuY2lsYnVmZmVy
ICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdM
X05PTkUpCiAgICAgewotICAgICAgICBEZXB0aGJ1ZmZlciAqZGVwdGhidWZmZXIgPSBjb250ZXh0
LT5nZXREZXB0aGJ1ZmZlcihtRGVwdGhidWZmZXJIYW5kbGUpOworICAgICAgICBkZXB0aGJ1ZmZl
ciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYgKCFkZXB0aGJ1ZmZlcikKICAgICAg
ICAgewpAQCAtMjczLDExICszNDgsMjggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9ESU1FTlNJT05TOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHNhbXBsZXMgPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHNhbXBsZXMgPSBkZXB0aGJ1ZmZlci0+Z2V0U2FtcGxl
cygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gZGVwdGhidWZmZXIt
PmdldFNhbXBsZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfQU5HTEU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChJc1RleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoZGVwdGhidWZmZXItPmdldEZvcm1hdCgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobVN0
ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBTdGVuY2lsYnVmZmVy
ICpzdGVuY2lsYnVmZmVyID0gY29udGV4dC0+Z2V0U3RlbmNpbGJ1ZmZlcihtU3RlbmNpbGJ1ZmZl
ckhhbmRsZSk7CisgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAK
ICAgICAgICAgaWYgKCFzdGVuY2lsYnVmZmVyKQogICAgICAgICB7CkBAIC0yOTgsOCArMzkwLDY2
IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChzYW1wbGVzID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICBzYW1wbGVzID0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHNhbXBsZXMgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2FtcGxlcygpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxU
SVNBTVBMRV9BTkdMRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKElzVGV4dHVy
ZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
SXNDb21wcmVzc2VkKHN0ZW5jaWxidWZmZXItPmdldEZvcm1hdCgpKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZF
UikKKyAgICB7CisgICAgICAgIGlmIChkZXB0aGJ1ZmZlci0+Z2V0Rm9ybWF0KCkgIT0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVMgfHwKKyAgICAgICAgICAgIHN0ZW5jaWxidWZmZXItPmdldEZvcm1h
dCgpICE9IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTIHx8CisgICAgICAgICAgICBkZXB0aGJ1ZmZl
ci0+Z2V0U2VyaWFsKCkgIT0gc3RlbmNpbGJ1ZmZlci0+Z2V0U2VyaWFsKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsKK30KKworRGVm
YXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3JidWZmZXIgKmNvbG9yLCBE
ZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCkKK3sKKyAgICBtQ29sb3JidWZmZXJUeXBl
ID0gR0xfUkVOREVSQlVGRkVSOworICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZG
RVI7CisgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfUkVOREVSQlVGRkVSOworCisgICAgbUNv
bG9yYnVmZmVyUG9pbnRlci5zZXQobmV3IFJlbmRlcmJ1ZmZlcigwLCBjb2xvcikpOworCisgICAg
UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVy
KDAsIGRlcHRoU3RlbmNpbCk7CisgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVu
Y2lsUmVuZGVyYnVmZmVyKTsKKyAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGRlcHRoU3Rl
bmNpbFJlbmRlcmJ1ZmZlcik7Cit9CisKK2ludCBGcmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpCit7
CisgICAgaWYgKGNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVyKCktPmdldFNhbXBsZXMoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorfQogCitHTGVudW0g
RGVmYXVsdEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQorewogICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURTsKIH0KKwogfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFt
ZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
aAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1LDE5ICsxNSwyMiBAQAogI2luY2x1ZGUgPGQzZDkuaD4KIAog
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlZkNv
dW50T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBnbAogeworY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xh
c3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5jaWxidWZmZXI7
CitjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7CiAKIGNsYXNzIEZyYW1lYnVmZmVyCiB7CiAgIHB1
YmxpYzoKICAgICBGcmFtZWJ1ZmZlcigpOwogCi0gICAgfkZyYW1lYnVmZmVyKCk7CisgICAgdmly
dHVhbCB+RnJhbWVidWZmZXIoKTsKIAogICAgIHZvaWQgc2V0Q29sb3JidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7CiAgICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0g
dHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKQEAgLTQxLDEwICs0NCwxMSBAQCBjbGFzcyBGcmFt
ZWJ1ZmZlcgogCiAgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbCgpOwogICAg
IHVuc2lnbmVkIGludCBnZXREZXB0aGJ1ZmZlclNlcmlhbCgpOworICAgIHVuc2lnbmVkIGludCBn
ZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCk7CiAKICAgICBDb2xvcmJ1ZmZlciAqZ2V0Q29sb3JidWZm
ZXIoKTsKLSAgICBEZXB0aGJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKTsKLSAgICBTdGVuY2lsYnVm
ZmVyICpnZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgRGVwdGhTdGVuY2lsYnVmZmVyICpnZXREZXB0
aGJ1ZmZlcigpOworICAgIERlcHRoU3RlbmNpbGJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CiAgICAgR0xlbnVtIGdldENvbG9yYnVmZmVyVHlwZSgpOwogICAgIEdMZW51bSBnZXREZXB0aGJ1
ZmZlclR5cGUoKTsKQEAgLTU0LDIwICs1OCwzOSBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIEdM
dWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwogICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVy
SGFuZGxlKCk7CiAKLSAgICBHTGVudW0gY29tcGxldGVuZXNzKCk7CisgICAgYm9vbCBoYXNTdGVu
Y2lsKCk7CisgICAgYm9vbCBpc011bHRpc2FtcGxlKCk7CisgICAgaW50IGdldFNhbXBsZXMoKTsK
IAotICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7
CisgICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCk7CiAKLSAgICBHTHVpbnQgbUNvbG9y
YnVmZmVySGFuZGxlOworICBwcm90ZWN0ZWQ6CiAgICAgR0xlbnVtIG1Db2xvcmJ1ZmZlclR5cGU7
CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyOwog
Ci0gICAgR0x1aW50IG1EZXB0aGJ1ZmZlckhhbmRsZTsKICAgICBHTGVudW0gbURlcHRoYnVmZmVy
VHlwZTsKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50
ZXI7CiAKLSAgICBHTHVpbnQgbVN0ZW5jaWxidWZmZXJIYW5kbGU7CiAgICAgR0xlbnVtIG1TdGVu
Y2lsYnVmZmVyVHlwZTsKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2ls
YnVmZmVyUG9pbnRlcjsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihGcmFtZWJ1ZmZlcik7CisKKyAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRlcmJ1ZmZlcihH
TGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7Cit9OworCitjbGFzcyBEZWZhdWx0RnJh
bWVidWZmZXIgOiBwdWJsaWMgRnJhbWVidWZmZXIKK3sKKyAgcHVibGljOgorICAgIERlZmF1bHRG
cmFtZWJ1ZmZlcihDb2xvcmJ1ZmZlciAqY29sb3IsIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhT
dGVuY2lsKTsKKworICAgIHZpcnR1YWwgR0xlbnVtIGNvbXBsZXRlbmVzcygpOworCisgIHByaXZh
dGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlZmF1bHRGcmFtZWJ1ZmZlcik7CiB9
OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9GUkFNRUJVRkZFUl9IXwpJbmRleDogQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgVW5pZm9ybUxv
Y2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3QgcwogewogfQogCi1Qcm9ncmFtOjpQcm9ncmFt
KCkKK1Byb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFu
ZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKQogewogICAg
IG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7CkBAIC02
Miw2ICs2Miw4IEBAIFByb2dyYW06OlByb2dyYW0oKQogCiAgICAgbURlbGV0ZVN0YXR1cyA9IGZh
bHNlOwogCisgICAgbVJlZkNvdW50ID0gMDsKKwogICAgIG1TZXJpYWwgPSBpc3N1ZVNlcmlhbCgp
OwogfQogCkBAIC03MSwxMiArNzMsMTIgQEAgUHJvZ3JhbTo6flByb2dyYW0oKQogCiAgICAgaWYg
KG1WZXJ0ZXhTaGFkZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmRl
dGFjaCgpOworICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAg
aWYgKG1GcmFnbWVudFNoYWRlciAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbUZyYWdtZW50U2hh
ZGVyLT5kZXRhY2goKTsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAg
fQogfQogCkBAIC05MCw3ICs5Miw3IEBAIGJvb2wgUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFNoYWRl
ciAqc2hhZGUKICAgICAgICAgfQogCiAgICAgICAgIG1WZXJ0ZXhTaGFkZXIgPSAoVmVydGV4U2hh
ZGVyKilzaGFkZXI7Ci0gICAgICAgIG1WZXJ0ZXhTaGFkZXItPmF0dGFjaCgpOworICAgICAgICBt
VmVydGV4U2hhZGVyLT5hZGRSZWYoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoc2hhZGVyLT5nZXRU
eXBlKCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKQogICAgIHsKQEAgLTEwMCw3ICsxMDIsNyBAQCBi
b29sIFByb2dyYW06OmF0dGFjaFNoYWRlcihTaGFkZXIgKnNoYWRlCiAgICAgICAgIH0KIAogICAg
ICAgICBtRnJhZ21lbnRTaGFkZXIgPSAoRnJhZ21lbnRTaGFkZXIqKXNoYWRlcjsKLSAgICAgICAg
bUZyYWdtZW50U2hhZGVyLT5hdHRhY2goKTsKKyAgICAgICAgbUZyYWdtZW50U2hhZGVyLT5hZGRS
ZWYoKTsKICAgICB9CiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCkBAIC0xMTYsNyArMTE4LDcg
QEAgYm9vbCBQcm9ncmFtOjpkZXRhY2hTaGFkZXIoU2hhZGVyICpzaGFkZQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNo
KCk7CisgICAgICAgIG1WZXJ0ZXhTaGFkZXItPnJlbGVhc2UoKTsKICAgICAgICAgbVZlcnRleFNo
YWRlciA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgaWYgKHNoYWRlci0+Z2V0VHlwZSgpID09IEdM
X0ZSQUdNRU5UX1NIQURFUikKQEAgLTEyNiw3ICsxMjgsNyBAQCBib29sIFByb2dyYW06OmRldGFj
aFNoYWRlcihTaGFkZXIgKnNoYWRlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KIAotICAgICAgICBtRnJhZ21lbnRTaGFkZXItPmRldGFjaCgpOworICAgICAgICBtRnJhZ21l
bnRTaGFkZXItPnJlbGVhc2UoKTsKICAgICAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKICAg
ICB9CiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwpAQCAtMTE5NSw2ICsxMTk3LDEwIEBAIGJvb2wg
UHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIENvbnRleHQg
KmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgYm9vbCBzbTMgPSBjb250ZXh0LT5zdXBwb3J0
c1NoYWRlck1vZGVsMygpOworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChzbTMg
PyAiQ09MT1IiIDogIlRFWENPT1JEIik7CisKICAgICBtVmVydGV4SExTTCArPSAic3RydWN0IFZT
X0lOUFVUXG4iCiAgICAgICAgICAgICAgICAgICAgIntcbiI7CiAKQEAgLTEyMjgsMTIgKzEyMzQs
MTcgQEAgYm9vbCBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKQogICAgIHsKICAgICAgICAgaW50IHJl
Z2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBh
Y2tpbmdbcl1bMV0gPyAyIDogMSkpOwogCi0gICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihyKSArICI7XG4iOworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0
cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGlj
ICsgc3RyKHIpICsgIjtcbiI7CiAgICAgfQogCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQpCiAgICAgewotICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9GcmFnQ29vcmQgOiBURVhDT09SRCIgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgICAg
ICBtVmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1Nl
bWFudGljICsgc3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAobVZlcnRl
eFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc20zKQorICAgIHsKKyAgICAgICAgbVZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CiAgICAgfQogCiAgICAg
bVZlcnRleEhMU0wgKz0gIn07XG4iCkBAIC0xMjYyLDYgKzEyNzMsMTEgQEAgYm9vbCBQcm9ncmFt
OjpsaW5rVmFyeWluZ3MoKQogICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgogICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKIAorICAgIGlmIChtVmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzbTMpCisgICAg
eworICAgICAgICBtVmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBjbGFt
cChnbF9Qb2ludFNpemUsIDEuMCwgIiArIHN0cigoaW50KUFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NQVhfU00zKSArICIpO1xuIjsKKyAgICB9CisKICAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKICAgICB7CiAgICAgICAgIG1WZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0
LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKQEAgLTEzNDUsNyArMTM2MSw3IEBAIGJv
b2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHJvd3M7IGorKykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAg
ICAgICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0NCB2IiArIG4gKyAiIDogVEVY
Q09PUkQiICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIg
ICAgZmxvYXQ0IHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTM1NCw5ICsx
MzcwLDE0IEBAIGJvb2wgUHJvZ3JhbTo6bGlua1ZhcnlpbmdzKCkKIAogICAgIGlmIChtRnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKLSAgICAgICAgbVBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiBURVhDT09SRCIgKyBzdHIocmVnaXN0ZXJzKSArICI7
XG4iOworICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIg
KyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVnaXN0ZXJzKSArICI7XG4iOworICAgIH0KKworICAg
IGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzbTMpCisgICAgeworICAg
ICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiBURVhDT09SRDA7
XG4iOwogICAgIH0KLSAgICAgICAgCisKICAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
b250RmFjaW5nKQogICAgIHsKICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHZGYWNl
IDogVkZBQ0U7XG4iOwpAQCAtMTM3NSwxMiArMTM5NiwxNyBAQCBib29sIFByb2dyYW06OmxpbmtW
YXJ5aW5ncygpCiAgICAgaWYgKG1GcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCiAgICAg
ewogICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnc7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQu
eCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9XaW5kb3cueCArIGR4X1dpbmRv
dy56O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfV2luZG93LnkgKyBkeF9XaW5kb3cudztcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0Zy
YWdDb29yZC54ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnggKyBkeF9WaWV3cG9ydC56O1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnkgKiByaHcpICogZHhfVmlld3BvcnQueSArIGR4X1ZpZXdwb3J0Lnc7XG4iCiAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQu
eiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKICAgICB9CiAKKyAgICBpZiAobUZy
YWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20zKQorICAgIHsKKyAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQgPSBmbG9hdDIoaW5wdXQuZ2xfUG9pbnRDb29y
ZC54LCAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnkpO1xuIjsKKyAgICB9CisKICAgICBpZiAo
bUZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQogICAgIHsKICAgICAgICAgbVBpeGVs
SExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gZHhfUG9pbnRzT3JMaW5lcyB8fCAoZHhfRnJv
bnRDQ1cgPyAoaW5wdXQudkZhY2UgPj0gMC4wKSA6IChpbnB1dC52RmFjZSA8PSAwLjApKTtcbiI7
CkBAIC0xNDQ3LDEwICsxNDczLDYgQEAgdm9pZCBQcm9ncmFtOjpsaW5rKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7Ci0gICAg
Y29uc3QgY2hhciAqdmVydGV4UHJvZmlsZSA9IGNvbnRleHQtPmdldFZlcnRleFNoYWRlclByb2Zp
bGUoKTsKLSAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250ZXh0LT5nZXRQaXhlbFNo
YWRlclByb2ZpbGUoKTsKLQogICAgIG1QaXhlbEhMU0wgPSBtRnJhZ21lbnRTaGFkZXItPmdldEhM
U0woKTsKICAgICBtVmVydGV4SExTTCA9IG1WZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKIApAQCAt
MTQ1OSw2ICsxNDgxLDEwIEBAIHZvaWQgUHJvZ3JhbTo6bGluaygpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0
IGNoYXIgKnZlcnRleFByb2ZpbGUgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8g
InZzXzNfMCIgOiAidnNfMl8wIjsKKyAgICBjb25zdCBjaGFyICpwaXhlbFByb2ZpbGUgPSBjb250
ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpID8gInBzXzNfMCIgOiAicHNfMl8wIjsKKwogICAg
IElEM0RYQnVmZmVyICp2ZXJ0ZXhCaW5hcnkgPSBjb21waWxlVG9CaW5hcnkobVZlcnRleEhMU0wu
Y19zdHIoKSwgdmVydGV4UHJvZmlsZSwgJm1Db25zdGFudFRhYmxlVlMpOwogICAgIElEM0RYQnVm
ZmVyICpwaXhlbEJpbmFyeSA9IGNvbXBpbGVUb0JpbmFyeShtUGl4ZWxITFNMLmNfc3RyKCksIHBp
eGVsUHJvZmlsZSwgJm1Db25zdGFudFRhYmxlUFMpOwogCkBAIC0xNTAzLDcgKzE1MjksNyBAQCB2
b2lkIFByb2dyYW06OmxpbmsoKQogICAgICAgICAgICAgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbiA9
IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5mYXIiLCB0cnVlKTsKICAgICAgICAg
ICAgIG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJnbF9EZXB0
aFJhbmdlLmRpZmYiLCB0cnVlKTsKICAgICAgICAgICAgIG1EeERlcHRoTG9jYXRpb24gPSBnZXRV
bmlmb3JtTG9jYXRpb24oImR4X0RlcHRoIiwgdHJ1ZSk7Ci0gICAgICAgICAgICBtRHhXaW5kb3dM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfV2luZG93IiwgdHJ1ZSk7CisgICAgICAg
ICAgICBtRHhWaWV3cG9ydExvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9WaWV3cG9y
dCIsIHRydWUpOwogICAgICAgICAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJkeF9IYWxmUGl4ZWxTaXplIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhG
cm9udENDV0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9Gcm9udENDVyIsIHRydWUp
OwogICAgICAgICAgICAgbUR4UG9pbnRzT3JMaW5lc0xvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0
aW9uKCJkeF9Qb2ludHNPckxpbmVzIiwgdHJ1ZSk7CkBAIC0yMzU1LDEzICsyMzgxLDEzIEBAIHZv
aWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKICAgICB7CiAgICAgICAgIGlmIChtRnJh
Z21lbnRTaGFkZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1GcmFnbWVudFNoYWRlci0+ZGV0
YWNoKCk7CisgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXItPnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobVZl
cnRleFNoYWRlcikKICAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleFNoYWRlci0+ZGV0YWNo
KCk7CisgICAgICAgICAgICBtVmVydGV4U2hhZGVyLT5yZWxlYXNlKCk7CiAgICAgICAgICAgICBt
VmVydGV4U2hhZGVyID0gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTI0MTIsNyArMjQzOCw3
IEBAIHZvaWQgUHJvZ3JhbTo6dW5saW5rKGJvb2wgZGVzdHJveSkKICAgICBtRGVwdGhSYW5nZU5l
YXJMb2NhdGlvbiA9IC0xOwogICAgIG1EZXB0aFJhbmdlRmFyTG9jYXRpb24gPSAtMTsKICAgICBt
RHhEZXB0aExvY2F0aW9uID0gLTE7Ci0gICAgbUR4V2luZG93TG9jYXRpb24gPSAtMTsKKyAgICBt
RHhWaWV3cG9ydExvY2F0aW9uID0gLTE7CiAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0g
LTE7CiAgICAgbUR4RnJvbnRDQ1dMb2NhdGlvbiA9IC0xOwogICAgIG1EeFBvaW50c09yTGluZXNM
b2NhdGlvbiA9IC0xOwpAQCAtMjQzOCw2ICsyNDY0LDI2IEBAIGJvb2wgUHJvZ3JhbTo6aXNWYWxp
ZGF0ZWQoKSBjb25zdCAKICAgICByZXR1cm4gbVZhbGlkYXRlZDsKIH0KIAordm9pZCBQcm9ncmFt
OjpyZWxlYXNlKCkKK3sKKyAgICBtUmVmQ291bnQtLTsKKworICAgIGlmIChtUmVmQ291bnQgPT0g
MCAmJiBtRGVsZXRlU3RhdHVzKQorICAgIHsKKyAgICAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVs
ZXRlUHJvZ3JhbShtSGFuZGxlKTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YWRkUmVmKCkK
K3sKKyAgICBtUmVmQ291bnQrKzsKK30KKwordW5zaWduZWQgaW50IFByb2dyYW06OmdldFJlZkNv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlZkNvdW50OworfQorCiB1bnNpZ25lZCBpbnQg
UHJvZ3JhbTo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNlcmlhbDsKQEAgLTI3
MzcsOSArMjc4Myw5IEBAIEdMaW50IFByb2dyYW06OmdldER4RGVwdGhMb2NhdGlvbigpIGNvbnMK
ICAgICByZXR1cm4gbUR4RGVwdGhMb2NhdGlvbjsKIH0KIAotR0xpbnQgUHJvZ3JhbTo6Z2V0RHhX
aW5kb3dMb2NhdGlvbigpIGNvbnN0CitHTGludCBQcm9ncmFtOjpnZXREeFZpZXdwb3J0TG9jYXRp
b24oKSBjb25zdAogewotICAgIHJldHVybiBtRHhXaW5kb3dMb2NhdGlvbjsKKyAgICByZXR1cm4g
bUR4Vmlld3BvcnRMb2NhdGlvbjsKIH0KIAogR0xpbnQgUHJvZ3JhbTo6Z2V0RHhIYWxmUGl4ZWxT
aXplTG9jYXRpb24oKSBjb25zdApJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDY2
NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDYgKzIwLDcgQEAKIAogbmFtZXNwYWNlIGdsCiB7CitjbGFzcyBSZXNvdXJjZU1hbmFnZXI7
CiBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIApAQCAtNTUsNyAr
NTYsNyBAQCBzdHJ1Y3QgVW5pZm9ybUxvY2F0aW9uCiBjbGFzcyBQcm9ncmFtCiB7CiAgIHB1Ymxp
YzoKLSAgICBQcm9ncmFtKCk7CisgICAgUHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIs
IEdMdWludCBoYW5kbGUpOwogCiAgICAgflByb2dyYW0oKTsKIApAQCAtOTcsNyArOTgsNyBAQCBj
bGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgZ2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpIGNvbnN0
OwogICAgIEdMaW50IGdldERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0OwogICAgIEdMaW50
IGdldER4RGVwdGhMb2NhdGlvbigpIGNvbnN0OwotICAgIEdMaW50IGdldER4V2luZG93TG9jYXRp
b24oKSBjb25zdDsKKyAgICBHTGludCBnZXREeFZpZXdwb3J0TG9jYXRpb24oKSBjb25zdDsKICAg
ICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OwogICAgIEdMaW50IGdl
dER4RnJvbnRDQ1dMb2NhdGlvbigpIGNvbnN0OwogICAgIEdMaW50IGdldER4UG9pbnRzT3JMaW5l
c0xvY2F0aW9uKCkgY29uc3Q7CkBAIC0xMTksNiArMTIwLDkgQEAgY2xhc3MgUHJvZ3JhbQogICAg
IEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1NYXhMZW5ndGgoKTsKIAorICAgIHZvaWQgYWRkUmVmKCk7CisgICAgdm9pZCByZWxlYXNlKCk7
CisgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgdm9pZCBmbGFnRm9y
RGVsZXRpb24oKTsKICAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAKQEAg
LTIwNCw3ICsyMDgsNyBAQCBjbGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgbURlcHRoUmFuZ2VOZWFy
TG9jYXRpb247CiAgICAgR0xpbnQgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbjsKICAgICBHTGludCBt
RHhEZXB0aExvY2F0aW9uOwotICAgIEdMaW50IG1EeFdpbmRvd0xvY2F0aW9uOworICAgIEdMaW50
IG1EeFZpZXdwb3J0TG9jYXRpb247CiAgICAgR0xpbnQgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9u
OwogICAgIEdMaW50IG1EeEZyb250Q0NXTG9jYXRpb247CiAgICAgR0xpbnQgbUR4UG9pbnRzT3JM
aW5lc0xvY2F0aW9uOwpAQCAtMjE0LDkgKzIxOCwxNCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgY2hh
ciAqbUluZm9Mb2c7CiAgICAgYm9vbCBtVmFsaWRhdGVkOwogCisgICAgdW5zaWduZWQgaW50IG1S
ZWZDb3VudDsKKwogICAgIHVuc2lnbmVkIGludCBtU2VyaWFsOwogCiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBtQ3VycmVudFNlcmlhbDsKKworICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNl
TWFuYWdlcjsKKyAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKIH07CiB9CiAKSW5kZXg6IEFOR0xF
L3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlZkNvdW50T2JqZWN0LmNwcDogRGVmaW5lcyB0
aGUgZ2w6OlJlZkNvdW50T2JqZWN0IGJhc2UgY2xhc3MgdGhhdCBwcm92aWRlcworLy8gbGlmZWN5
Y2xlIHN1cHBvcnQgZm9yIEdMIG9iamVjdHMgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIEJpbmRPYmpl
Y3Qgc2NoZW1lLCBidXQKKy8vIHRoYXQgbmVlZCB0byBiZSByZWZlcmVuY2UgY291bnRlZCBmb3Ig
Y29ycmVjdCBjcm9zcy1jb250ZXh0IGRlbGV0aW9uLgorLy8gKENvbmNyZXRlbHksIHRleHR1cmVz
LCBidWZmZXJzIGFuZCByZW5kZXJidWZmZXJzLikKKworI2luY2x1ZGUgIlJlZkNvdW50T2JqZWN0
LmgiCisKK25hbWVzcGFjZSBnbAoreworCitSZWZDb3VudE9iamVjdDo6UmVmQ291bnRPYmplY3Qo
R0x1aW50IGlkKQoreworICAgIG1JZCA9IGlkOworICAgIG1SZWZDb3VudCA9IDA7Cit9CisKK1Jl
ZkNvdW50T2JqZWN0Ojp+UmVmQ291bnRPYmplY3QoKQoreworfQorCit2b2lkIFJlZkNvdW50T2Jq
ZWN0OjphZGRSZWYoKSBjb25zdAoreworICAgIG1SZWZDb3VudCsrOworfQorCit2b2lkIFJlZkNv
dW50T2JqZWN0OjpyZWxlYXNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobVJlZkNvdW50ID4gMCk7
CisKKyAgICBpZiAoLS1tUmVmQ291bnQgPT0gMCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlz
OworICAgIH0KK30KKwordm9pZCBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQoUmVm
Q291bnRPYmplY3QgKm5ld09iamVjdCkKK3sKKyAgICAvLyBhZGRSZWYgZmlyc3QgaW4gY2FzZSBu
ZXdPYmplY3QgPT0gbU9iamVjdCBhbmQgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gaXQu
CisgICAgaWYgKG5ld09iamVjdCAhPSBOVUxMKSBuZXdPYmplY3QtPmFkZFJlZigpOworICAgIGlm
IChtT2JqZWN0ICE9IE5VTEwpIG1PYmplY3QtPnJlbGVhc2UoKTsKKworICAgIG1PYmplY3QgPSBu
ZXdPYmplY3Q7Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgJ
KHJldmlzaW9uIDApCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlZkNv
dW50T2JqZWN0Lmg6IERlZmluZXMgdGhlIGdsOjpSZWZDb3VudE9iamVjdCBiYXNlIGNsYXNzIHRo
YXQgcHJvdmlkZXMKKy8vIGxpZmVjeWNsZSBzdXBwb3J0IGZvciBHTCBvYmplY3RzIHVzaW5nIHRo
ZSB0cmFkaXRpb25hbCBCaW5kT2JqZWN0IHNjaGVtZSwgYnV0CisvLyB0aGF0IG5lZWQgdG8gYmUg
cmVmZXJlbmNlIGNvdW50ZWQgZm9yIGNvcnJlY3QgY3Jvc3MtY29udGV4dCBkZWxldGlvbi4KKy8v
IChDb25jcmV0ZWx5LCB0ZXh0dXJlcywgYnVmZmVycyBhbmQgcmVuZGVyYnVmZmVycy4pCisKKyNp
Zm5kZWYgTElCR0xFU1YyX1JFRkNPVU5UT0JKRUNUX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRUZD
T1VOVE9CSkVDVF9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBSZWZDb3VudE9iamVjdChHTHVpbnQgaWQpOworICAgIHZpcnR1YWwgflJlZkNv
dW50T2JqZWN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUmVmKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2UoKSBjb25zdDsKKworICAgIEdMdWludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1JZDsgfQorICAgIAorICBwcml2YXRlOgorICAgIEdMdWludCBtSWQ7CisKKyAgICBtdXRh
YmxlIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKK307CisKK2NsYXNzIFJlZkNvdW50T2JqZWN0Qmlu
ZGluZ1BvaW50ZXIKK3sKKyAgcHJvdGVjdGVkOgorICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1Bv
aW50ZXIoKSA6IG1PYmplY3QoTlVMTCkgeyB9CisgICAgflJlZkNvdW50T2JqZWN0QmluZGluZ1Bv
aW50ZXIoKSB7IEFTU0VSVChtT2JqZWN0ID09IE5VTEwpOyB9IC8vIE9iamVjdHMgaGF2ZSB0byBi
ZSByZWxlYXNlZCBiZWZvcmUgdGhlIHJlc291cmNlIG1hbmFnZXIgaXMgZGVzdHJveWVkLCBzbyB0
aGV5IG11c3QgYmUgZXhwbGljaXRseSBjbGVhbmVkIHVwLgorCisgICAgdm9pZCBzZXQoUmVmQ291
bnRPYmplY3QgKm5ld09iamVjdCk7CisgICAgUmVmQ291bnRPYmplY3QgKmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1PYmplY3Q7IH0KKworICBwdWJsaWM6CisgICAgR0x1aW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gKG1PYmplY3QgIT0gTlVMTCkgPyBtT2JqZWN0LT5pZCgpIDogMDsgfQorICAgIGJvb2wg
b3BlcmF0b3IgISAoKSBjb25zdCB7IHJldHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KKworICBwcml2
YXRlOgorICAgIFJlZkNvdW50T2JqZWN0ICptT2JqZWN0OworfTsKKwordGVtcGxhdGUgPGNsYXNz
IE9iamVjdFR5cGU+CitjbGFzcyBCaW5kaW5nUG9pbnRlciA6IHB1YmxpYyBSZWZDb3VudE9iamVj
dEJpbmRpbmdQb2ludGVyCit7CisgIHB1YmxpYzoKKyAgICB2b2lkIHNldChPYmplY3RUeXBlICpu
ZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7
IH0KKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmpl
Y3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2Jq
ZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307CisKK30K
KworI2VuZGlmICAgLy8gTElCR0xFU1YyX1JFRkNPVU5UT0JKRUNUX0hfCkluZGV4OiBBTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNzMgKzE1LDE0
OCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6Om1DdXJy
ZW50U2VyaWFsID0gMTsKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjptQ3VycmVu
dFNlcmlhbCA9IDE7CiAKLVJlbmRlcmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKCkKK1JlbmRlcmJ1ZmZl
cjo6UmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc3RvcmFnZSkg
OiBSZWZDb3VudE9iamVjdChpZCkKIHsKLSAgICBtV2lkdGggPSAwOwotICAgIG1IZWlnaHQgPSAw
OwotICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy8gZGVmYXVsdCBmb3JtYXQsIG5lZWRzIHRvIGJl
IG9uZSBvZiB0aGUgZXhwZWN0ZWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMKLSAgICBtU2VyaWFsID0g
aXNzdWVTZXJpYWwoKTsKKyAgICBBU1NFUlQoc3RvcmFnZSAhPSBOVUxMKTsKKyAgICBtU3RvcmFn
ZSA9IHN0b3JhZ2U7CiB9CiAKIFJlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCiB7CisgICAg
ZGVsZXRlIG1TdG9yYWdlOworfQorCitib29sIFJlbmRlcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5pc0NvbG9yYnVmZmVyKCk7Cit9CisKK2Jv
b2wgUmVuZGVyYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
b3JhZ2UtPmlzRGVwdGhidWZmZXIoKTsKK30KKworYm9vbCBSZW5kZXJidWZmZXI6OmlzU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5pc1N0ZW5jaWxidWZmZXIo
KTsKK30KKworSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0
KCkKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOworfQorCitJRGly
ZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJl
dHVybiBtU3RvcmFnZS0+Z2V0RGVwdGhTdGVuY2lsKCk7Cit9CisKK2ludCBSZW5kZXJidWZmZXI6
OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldFdpZHRoKCk7Cit9
CisKK2ludCBSZW5kZXJidWZmZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dG9yYWdlLT5nZXRIZWlnaHQoKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Rm9ybWF0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0b3JhZ2UtPmdldEZvcm1hdCgpOworfQorCitEM0RG
T1JNQVQgUmVuZGVyYnVmZmVyOjpnZXREM0RGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
U3RvcmFnZS0+Z2V0RDNERm9ybWF0KCk7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6
OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdG9yYWdlLT5nZXRTZXJpYWwoKTsK
K30KKwordm9pZCBSZW5kZXJidWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVyYnVmZmVyU3RvcmFnZSAq
bmV3U3RvcmFnZSkKK3sKKyAgICBBU1NFUlQobmV3U3RvcmFnZSAhPSBOVUxMKTsKKworICAgIGRl
bGV0ZSBtU3RvcmFnZTsKKyAgICBtU3RvcmFnZSA9IG5ld1N0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1
ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQoreworICAgIG1TZXJpYWwgPSBpc3N1
ZVNlcmlhbCgpOworfQorCitSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFn
ZSgpCit7CiB9CiAKLWJvb2wgUmVuZGVyYnVmZmVyOjppc0NvbG9yYnVmZmVyKCkKK2Jvb2wgUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFJlbmRlcmJ1ZmZlcjo6aXNEZXB0aGJ1ZmZlcigpCitib29sIFJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmlzRGVwdGhidWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJidWZmZXI6OmlzU3RlbmNpbGJ1ZmZlcigpCitib29sIFJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQorSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFJlbmRlclRh
cmdldCgpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLUlEaXJlY3QzRFN1cmZhY2U5ICpSZW5k
ZXJidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCitJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyYnVm
ZmVyU3RvcmFnZTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKICAgICByZXR1cm4gTlVMTDsKIH0KIAot
aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKQoraW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omdl
dFdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVdpZHRoOwogfQogCi1pbnQgUmVuZGVyYnVm
ZmVyOjpnZXRIZWlnaHQoKQoraW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEhlaWdodCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1IZWlnaHQ7CiB9CiAKLXZvaWQgUmVuZGVyYnVmZmVyOjpzZXRT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6c2V0
U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAg
bUhlaWdodCA9IGhlaWdodDsKIH0KIAotCi1HTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRGb3JtYXQo
KQorR0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1Gb3JtYXQ7CiB9CiAKLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXI6OmdldFNlcmlh
bCgpIGNvbnN0CitEM0RGT1JNQVQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0RDNERm9ybWF0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUQzREZvcm1hdDsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXM7Cit9
CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXJpYWwoKSBjb25zdAog
ewogICAgIHJldHVybiBtU2VyaWFsOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyOjpp
c3N1ZVNlcmlhbCgpCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJp
YWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwogfQpAQCAtOTYsMzYgKzE3MSw1
OSBAQCBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoSURpcmVjdDNEU3VyZmFjCiAgICAgICAgIHJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwogCiAgICAgICAgIHNldFNpemUoZGVz
Y3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7CisgICAgICAgIG1EM0RGb3JtYXQg
PSBkZXNjcmlwdGlvbi5Gb3JtYXQ7CisgICAgICAgIG1TYW1wbGVzID0gZXMyZHg6OkdldFNhbXBs
ZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsK
KyAgICAgICAgbVNhbXBsZXMgPSAwOwogICAgIH0KLQogfQogCi1Db2xvcmJ1ZmZlcjo6Q29sb3Ji
dWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0KQorQ29sb3JidWZmZXI6
OkNvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBzYW1wbGVzKQogewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwogCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBlczJkeDo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChmb3JtYXQpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbVJlbmRlclRh
cmdldCwgTlVMTCk7CisgICAgRDNERk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGVzMmR4OjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisgICAgaW50IHN1cHBvcnRlZFNhbXBsZXMg
PSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1h
dCwgc2FtcGxlcyk7CiAKLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZ
IHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09
IC0xKQogICAgIHsKICAgICAgICAgZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYg
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQorICAgIHsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3Jt
YXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVzMmR4OjpHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwg
MCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKworICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICB9CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIHNldFNp
emUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIG1E
M0RGb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgIG1TYW1wbGVzID0gc3VwcG9ydGVk
U2FtcGxlczsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2V0U2l6ZSgwLCAwKTsK
ICAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OworICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1U
X1VOS05PV047CisgICAgICAgIG1TYW1wbGVzID0gMDsKICAgICB9CiB9CiAKQEAgLTEzNywxMiAr
MjM1LDEyIEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogICAgIH0KIH0KIAotYm9vbCBD
b2xvcmJ1ZmZlcjo6aXNDb2xvcmJ1ZmZlcigpCitib29sIENvbG9yYnVmZmVyOjppc0NvbG9yYnVm
ZmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotR0x1aW50IENvbG9yYnVmZmVy
OjpnZXRSZWRTaXplKCkKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpIGNvbnN0CiB7
CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMTU1LDcgKzI1Myw3IEBAIEdMdWlu
dCBDb2xvcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpCiAgICAgcmV0dXJuIDA7CiB9CiAKLUdMdWludCBD
b2xvcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkKK0dMdWludCBDb2xvcmJ1ZmZlcjo6Z2V0R3JlZW5T
aXplKCkgY29uc3QKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC0xNjgsNyAr
MjY2LDcgQEAgR0x1aW50IENvbG9yYnVmZmVyOjpnZXRHcmVlblNpemUoKQogICAgIHJldHVybiAw
OwogfQogCi1HTHVpbnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkKK0dMdWludCBDb2xvcmJ1
ZmZlcjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAg
IHsKQEAgLTE4MSw3ICsyNzksNyBAQCBHTHVpbnQgQ29sb3JidWZmZXI6OmdldEJsdWVTaXplKCkK
ICAgICByZXR1cm4gMDsKIH0KIAotR0x1aW50IENvbG9yYnVmZmVyOjpnZXRBbHBoYVNpemUoKQor
R0x1aW50IENvbG9yYnVmZmVyOjpnZXRBbHBoYVNpemUoKSBjb25zdAogewogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTE5OSw3ICsyOTcsNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAq
Q29sb3JidWZmZXI6OmdldFJlbmRlCiAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CiAKLURl
cHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKSA6
IG1EZXB0aFN0ZW5jaWwoZGVwdGhTdGVuY2lsKQorRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0
ZW5jaWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVu
Y2lsKGRlcHRoU3RlbmNpbCkKIHsKICAgICBpZiAoZGVwdGhTdGVuY2lsKQogICAgIHsKQEAgLTIw
OSwxOCArMzA3LDM0IEBAIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWMK
ICAgICAgICAgZGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CiAKICAgICAgICAg
c2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICAgICAg
bUZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBh
cmFtZXRlcnMgYXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxp
ZCByZW5kZXJidWZmZXIgZm9ybWF0cyBmb3IgdXNlIGluIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorICAgICAgICBtRm9y
bWF0ID0gKGRlc2NyaXB0aW9uLkZvcm1hdCA9PSBEM0RGTVRfRDE2ID8gR0xfREVQVEhfQ09NUE9O
RU5UMTYgOiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyk7CisgICAgICAgIG1TYW1wbGVzID0gZXMy
ZHg6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxl
VHlwZSk7IAorICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047IAor
ICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCi1EZXB0aGJ1ZmZlcjo6RGVwdGhidWZm
ZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5j
aWxidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAg
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CiAKICAgICBtRGVwdGhTdGVu
Y2lsID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIEQzRE1VTFRJU0FNUExFX05P
TkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgMCk7CisgICAgCisgICAgaW50IHN1cHBvcnRl
ZFNhbXBsZXMgPSBnZXRDb250ZXh0KCktPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZN
VF9EMjRTOCwgc2FtcGxlcyk7CisKKyAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKKyAg
ICB7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2ls
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBEM0RGTVRfRDI0UzgsIGVzMmR4OjpHZXRNdWx0aXNhbXBs
ZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5j
aWwsIDApOwogCiAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCBy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICB7CkBAIC0yMzQsMTggKzM0OCwyMCBAQCBEZXB0
aGJ1ZmZlcjo6RGVwdGhidWZmZXIoaW50IHdpZHRoLCBpbnQgCiAgICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCiAgICAgewogICAgICAgICBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtRm9y
bWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1l
dGVycyBhcmUgcXVlcmllZCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJl
bmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2UgaW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisgICAgICAgIG1Gb3JtYXQg
PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9E
MjRTODsKKyAgICAgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwogICAgIH0KICAgICBl
bHNlCiAgICAgewogICAgICAgICBzZXRTaXplKDAsIDApOwogICAgICAgICBtRm9ybWF0ID0gR0xf
UkdCQTQ7IC8vZGVmYXVsdCBmb3JtYXQKKyAgICAgICAgbUQzREZvcm1hdCA9IEQzREZNVF9VTktO
T1dOOworICAgICAgICBtU2FtcGxlcyA9IDA7CiAgICAgfQogfQogCi1EZXB0aGJ1ZmZlcjo6fkRl
cHRoYnVmZmVyKCkKK0RlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigpCiB7
CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewpAQCAtMjUzLDEyICszNjksMTcgQEAgRGVw
dGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCiAgICAgfQogfQogCi1ib29sIERlcHRoYnVmZmVyOjpp
c0RlcHRoYnVmZmVyKCkKK2Jvb2wgRGVwdGhTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZXB0aFN0ZW5jaWxidWZmZXI6
OmlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMdWlu
dCBEZXB0aGJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkKK0dMdWludCBEZXB0aFN0ZW5jaWxidWZmZXI6
OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewpA
QCAtMjcxLDg1ICszOTIsOTMgQEAgR0x1aW50IERlcHRoYnVmZmVyOjpnZXREZXB0aFNpemUoKQog
ICAgIHJldHVybiAwOwogfQogCi1JRGlyZWN0M0RTdXJmYWNlOSAqRGVwdGhidWZmZXI6OmdldERl
cHRoU3RlbmNpbCgpCitHTHVpbnQgRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXRTdGVuY2lsU2l6ZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCisgICAgeworICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRl
c2NyaXB0aW9uKTsKKworICAgICAgICByZXR1cm4gZXMyZHg6OkdldFN0ZW5jaWxTaXplKGRlc2Ny
aXB0aW9uLkZvcm1hdCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0lEaXJlY3QzRFN1
cmZhY2U5ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgcmV0
dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoSURp
cmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCkgOiBtRGVwdGhTdGVuY2lsKGRlcHRoU3RlbmNp
bCkKK0RlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVu
Y2lsKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCiB7CiAgICAgaWYgKGRlcHRo
U3RlbmNpbCkKICAgICB7Ci0gICAgICAgIGRlcHRoU3RlbmNpbC0+QWRkUmVmKCk7Ci0KLSAgICAg
ICAgRDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOwotICAgICAgICBkZXB0aFN0ZW5jaWwtPkdl
dERlc2MoJmRlc2NyaXB0aW9uKTsKLQotICAgICAgICBzZXRTaXplKGRlc2NyaXB0aW9uLldpZHRo
LCBkZXNjcmlwdGlvbi5IZWlnaHQpOwotICAgICAgICBtRm9ybWF0ID0gR0xfU1RFTkNJTF9JTkRF
WDg7IC8vIElmIHRoZSByZW5kZXJidWZmZXIgcGFyYW1ldGVycyBhcmUgcXVlcmllZCwgdGhlIGNh
bGxpbmcgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3
aWxsIGV4cGVjdCBvbmUgb2YgdGhlIHZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXRzIGZvciB1c2Ug
aW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlCisgICAgICAgIG1Gb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYg
dGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5j
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhw
ZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UKICAgICB9CiB9CiAKLVN0ZW5jaWxidWZmZXI6OlN0ZW5jaWxidWZmZXIoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQorRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKQogewotICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OwotCi0gICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgRDNERk1UX0QyNFM4
LCBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIDApOwotCi0g
ICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICBpZiAoZ2V0RGVwdGhTdGVuY2lsKCkpCiAgICAgewotICAgICAgICBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLQotICAgICAgICByZXR1cm47CisgICAgICAgIG1Gb3Jt
YXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0
ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVu
ZGVyYnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9Cit9CiAKLSAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworRGVwdGhidWZmZXI6On5EZXB0aGJ1ZmZlcigpCit7
Cit9CiAKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKK2Jvb2wgRGVwdGhidWZmZXI6OmlzRGVwdGhi
dWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERlcHRoYnVmZmVy
Ojppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworU3Rl
bmNpbGJ1ZmZlcjo6U3RlbmNpbGJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2ls
KSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihkZXB0aFN0ZW5jaWwpCit7CisgICAgaWYgKGRlcHRoU3Rl
bmNpbCkKICAgICB7Ci0gICAgICAgIHNldFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1G
b3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVYODsgLy8gSWYgdGhlIHJlbmRlcmJ1ZmZlciBwYXJhbWV0
ZXJzIGFyZSBxdWVyaWVkLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgZXhwZWN0IG9uZSBvZiB0aGUgdmFsaWQgcmVuZGVy
YnVmZmVyIGZvcm1hdHMgZm9yIHVzZSBpbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB9CiAgICAgZWxzZQogICAgIHsK
LSAgICAgICAgc2V0U2l6ZSgwLCAwKTsKICAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OyAvL2Rl
ZmF1bHQgZm9ybWF0CiAgICAgfQogfQogCi1TdGVuY2lsYnVmZmVyOjp+U3RlbmNpbGJ1ZmZlcigp
CitTdGVuY2lsYnVmZmVyOjpTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xz
aXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVz
KQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIGlmIChnZXREZXB0aFN0ZW5jaWwoKSkK
ICAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKKyAgICAgICAgbUZvcm1h
dCA9IEdMX1NURU5DSUxfSU5ERVg4OyAvLyBJZiB0aGUgcmVuZGVyYnVmZmVyIHBhcmFtZXRlcnMg
YXJlIHF1ZXJpZWQsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBleHBlY3Qgb25lIG9mIHRoZSB2YWxpZCByZW5kZXJidWZm
ZXIgZm9ybWF0cyBmb3IgdXNlIGluIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQogICAgIH0KIH0KIAotR0x1aW50IFN0ZW5jaWxi
dWZmZXI6OmdldFN0ZW5jaWxTaXplKCkKK1N0ZW5jaWxidWZmZXI6On5TdGVuY2lsYnVmZmVyKCkK
IHsKLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIEQzRFNVUkZBQ0VfREVT
QyBkZXNjcmlwdGlvbjsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzY3JpcHRp
b24pOwotCi0gICAgICAgIHJldHVybiBlczJkeDo6R2V0U3RlbmNpbFNpemUoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBTdGVuY2lsYnVmZmVy
Ojppc1N0ZW5jaWxidWZmZXIoKQorYm9vbCBTdGVuY2lsYnVmZmVyOjppc0RlcHRoYnVmZmVyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUlEaXJl
Y3QzRFN1cmZhY2U5ICpTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQorYm9vbCBTdGVu
Y2lsYnVmZmVyOjppc1N0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhT
dGVuY2lsOworICAgIHJldHVybiB0cnVlOwogfQogfQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQsOCArNCw5IEBACiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KIAotLy8gUmVuZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHZpcnR1
YWwgZ2w6OlJlbmRlcmJ1ZmZlciBjbGFzcyBhbmQgaXRzIGRlcml2ZWQKLS8vIGNsYXNzZXMgQ29s
b3JidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJbXBsZW1lbnRzIEdMIHJl
bmRlcmJ1ZmZlcgorLy8gUmVuZGVyYnVmZmVyLmg6IERlZmluZXMgdGhlIHdyYXBwZXIgY2xhc3Mg
Z2w6OlJlbmRlcmJ1ZmZlciwgYXMgd2VsbCBhcyB0aGUKKy8vIGNsYXNzIGhpZXJhcmNoeSB1c2Vk
IHRvIHN0b3JlIGl0cyBjb250ZW50czogUmVuZGVyYnVmZmVyU3RvcmFnZSwgQ29sb3JidWZmZXIs
CisvLyBEZXB0aFN0ZW5jaWxidWZmZXIsIERlcHRoYnVmZmVyIGFuZCBTdGVuY2lsYnVmZmVyLiBJ
bXBsZW1lbnRzIEdMIHJlbmRlcmJ1ZmZlcgogLy8gb2JqZWN0cyBhbmQgcmVsYXRlZCBmdW5jdGlv
bmFsaXR5LiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiA0LjQuMyBwYWdlIDEwOC4KIAogI2lm
bmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCkBAIC0xNiwyNiArMTcsMzMgQEAKICNpbmNs
dWRlIDxkM2Q5Lmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZWZDb3VudE9iamVjdC5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKLWNsYXNzIFJl
bmRlcmJ1ZmZlcgorCisvLyBBIGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdl
IGlzIGNyZWF0ZWQgd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisvLyBpcyBjYWxsZWQu
IFRoZSBzcGVjaWZpYyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJu
YWwgZm9ybWF0IGlzCisvLyBjb2xvdXIgZGVwdGgsIHN0ZW5jaWwgb3IgcGFja2VkIGRlcHRoL3N0
ZW5jaWwuCitjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5k
ZXJidWZmZXIoKTsKKyAgICBSZW5kZXJidWZmZXJTdG9yYWdlKCk7CiAKLSAgICB2aXJ0dWFsIH5S
ZW5kZXJidWZmZXIoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJTdG9yYWdlKCkgPSAwOwog
Ci0gICAgdmlydHVhbCBib29sIGlzQ29sb3JidWZmZXIoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNE
ZXB0aGJ1ZmZlcigpOwotICAgIHZpcnR1YWwgYm9vbCBpc1N0ZW5jaWxidWZmZXIoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb2xvcmJ1ZmZlcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0Rl
cHRoYnVmZmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CiAKLSAg
ICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpOwotICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpOwot
ICAgIEdMZW51bSBnZXRGb3JtYXQoKTsKKyAgICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVt
IGdldEZvcm1hdCgpIGNvbnN0OworICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsK
KyAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2Vy
aWFsKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CkBA
IC00MywxMCArNTEsMTIgQEAgY2xhc3MgUmVuZGVyYnVmZmVyCiAgIHByb3RlY3RlZDoKICAgICB2
b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBHTGVudW0gbUZvcm1hdDsK
KyAgICBEM0RGT1JNQVQgbUQzREZvcm1hdDsKKyAgICBHTHNpemVpIG1TYW1wbGVzOwogICAgIHVu
c2lnbmVkIGludCBtU2VyaWFsOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFJlbmRlcmJ1ZmZlcik7CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOwogCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlh
bDsKIApAQCAtNTQsMjAgKzY0LDUyIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlcgogICAgIGludCBtSGVp
Z2h0OwogfTsKIAotY2xhc3MgQ29sb3JidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCisvLyBS
ZW5kZXJidWZmZXIgaW1wbGVtZW50cyB0aGUgR0wgcmVuZGVyYnVmZmVyIG9iamVjdC4KKy8vIEl0
J3Mgb25seSBhIHdyYXBwZXIgZm9yIGEgUmVuZGVyYnVmZmVyU3RvcmFnZSwgYnV0IHRoZSBpbnRl
cm5hbCBvYmplY3QKKy8vIGNhbiBjaGFuZ2Ugd2hlbmV2ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
IGlzIGNhbGxlZC4KK2NsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAor
eworICBwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyKEdMdWludCBpZCwgUmVuZGVyYnVmZmVyU3Rv
cmFnZSAqc3RvcmFnZSk7CisKKyAgICB+UmVuZGVyYnVmZmVyKCk7CisKKyAgICBib29sIGlzQ29s
b3JidWZmZXIoKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKSBjb25zdDsKKyAgICBi
b29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdl
dFJlbmRlclRhcmdldCgpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXREZXB0aFN0ZW5jaWwo
KTsKKworICAgIGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIGludCBnZXRIZWlnaHQoKSBjb25z
dDsKKyAgICBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Q7CisgICAgRDNERk9STUFUIGdldEQzREZv
cm1hdCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKworICAg
IHZvaWQgc2V0U3RvcmFnZShSZW5kZXJidWZmZXJTdG9yYWdlICpuZXdTdG9yYWdlKTsKKyAgICBS
ZW5kZXJidWZmZXJTdG9yYWdlICpnZXRTdG9yYWdlKCkgeyByZXR1cm4gbVN0b3JhZ2U7IH0KKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwor
CisgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqbVN0b3JhZ2U7Cit9OworCitjbGFzcyBDb2xvcmJ1
ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1YmxpYzoKICAgICBleHBs
aWNpdCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKLSAgICBD
b2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOworICAgIENv
bG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBz
YW1wbGVzKTsKIAogICAgIH5Db2xvcmJ1ZmZlcigpOwogCi0gICAgYm9vbCBpc0NvbG9yYnVmZmVy
KCk7CisgICAgYm9vbCBpc0NvbG9yYnVmZmVyKCkgY29uc3Q7CiAKLSAgICBHTHVpbnQgZ2V0UmVk
U2l6ZSgpOwotICAgIEdMdWludCBnZXRHcmVlblNpemUoKTsKLSAgICBHTHVpbnQgZ2V0Qmx1ZVNp
emUoKTsKLSAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCk7CisgICAgR0x1aW50IGdldFJlZFNpemUo
KSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7CisgICAgR0x1aW50IGdl
dEJsdWVTaXplKCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwogCiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwogCkBAIC03OCw0MiArMTIw
LDU1IEBAIGNsYXNzIENvbG9yYnVmZmVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihDb2xvcmJ1ZmZlcik7CiB9OwogCi1jbGFzcyBEZXB0aGJ1ZmZl
ciA6IHB1YmxpYyBSZW5kZXJidWZmZXIKK2NsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlciA6IHB1Ymxp
YyBSZW5kZXJidWZmZXJTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXB0aGJ1
ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKLSAgICBEZXB0aGJ1ZmZlcihp
bnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGV4cGxpY2l0IERlcHRoU3RlbmNpbGJ1ZmZlcihJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsKTsKKyAgICBEZXB0aFN0ZW5jaWxidWZmZXIo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpOwogCi0gICAgfkRlcHRoYnVm
ZmVyKCk7CisgICAgfkRlcHRoU3RlbmNpbGJ1ZmZlcigpOwogCi0gICAgYm9vbCBpc0RlcHRoYnVm
ZmVyKCk7CisgICAgdmlydHVhbCBib29sIGlzRGVwdGhidWZmZXIoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7CiAKLSAgICBHTHVpbnQgZ2V0RGVwdGhT
aXplKCk7CisgICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
dGVuY2lsU2l6ZSgpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3Rl
bmNpbCgpOwogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRo
YnVmZmVyKTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVwdGhTdGVuY2lsYnVmZmVy
KTsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKIH07CiAKLWNsYXNzIFN0
ZW5jaWxidWZmZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVyCitjbGFzcyBEZXB0aGJ1ZmZlciA6IHB1
YmxpYyBEZXB0aFN0ZW5jaWxidWZmZXIKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IFN0ZW5j
aWxidWZmZXIoSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7Ci0gICAgU3RlbmNpbGJ1
ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIGV4cGxpY2l0IERlcHRoYnVmZmVyKElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwpOworICAgIERlcHRoYnVmZmVyKGludCB3aWR0
aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIH5TdGVuY2lsYnVmZmVyKCk7
CisgICAgfkRlcHRoYnVmZmVyKCk7CisKKyAgICBib29sIGlzRGVwdGhidWZmZXIoKSBjb25zdDsK
KyAgICBib29sIGlzU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlcHRoYnVmZmVyKTsKK307CiAKLSAgICBib29sIGlzU3Rl
bmNpbGJ1ZmZlcigpOworY2xhc3MgU3RlbmNpbGJ1ZmZlciA6IHB1YmxpYyBEZXB0aFN0ZW5jaWxi
dWZmZXIKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFN0ZW5jaWxidWZmZXIoSURpcmVjdDNE
U3VyZmFjZTkgKmRlcHRoU3RlbmNpbCk7CisgICAgU3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUo
KTsKKyAgICB+U3RlbmNpbGJ1ZmZlcigpOwogCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldERl
cHRoU3RlbmNpbCgpOworICAgIGJvb2wgaXNEZXB0aGJ1ZmZlcigpIGNvbnN0OworICAgIGJvb2wg
aXNTdGVuY2lsYnVmZmVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oU3RlbmNpbGJ1ZmZlcik7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0
aFN0ZW5jaWw7CiB9OwogfQogCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gUmVzb3VyY2VNYW5hZ2VyLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlc291cmNlTWFu
YWdlciBjbGFzcywgd2hpY2ggdHJhY2tzIGFuZCAKKy8vIHJldHJpZXZlcyBvYmplY3RzIHdoaWNo
IG1heSBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgQ29udGV4dHMuCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvUmVzb3VyY2VNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVy
QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCisKK25hbWVzcGFjZSBnbAoreworUmVzb3VyY2VNYW5hZ2VyOjpSZXNv
dXJjZU1hbmFnZXIoKQoreworICAgIG1SZWZDb3VudCA9IDE7Cit9CisKK1Jlc291cmNlTWFuYWdl
cjo6flJlc291cmNlTWFuYWdlcigpCit7CisgICAgd2hpbGUgKCFtQnVmZmVyTWFwLmVtcHR5KCkp
CisgICAgeworICAgICAgICBkZWxldGVCdWZmZXIobUJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7
CisgICAgfQorCisgICAgd2hpbGUgKCFtUHJvZ3JhbU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlUHJvZ3JhbShtUHJvZ3JhbU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisg
ICAgd2hpbGUgKCFtU2hhZGVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVTaGFk
ZXIobVNoYWRlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtUmVu
ZGVyYnVmZmVyTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIo
bVJlbmRlcmJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
VGV4dHVyZU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVy
ZU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6
YWRkUmVmKCkKK3sKKyAgICBtUmVmQ291bnQrKzsKK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6
OnJlbGVhc2UoKQoreworICAgIGlmICgtLW1SZWZDb3VudCA9PSAwKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIHRoaXM7CisgICAgfQorfQorCisvLyBSZXR1cm5zIGFuIHVudXNlZCBidWZmZXIgbmFt
ZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKSAh
PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7CisgICAgfQorCisg
ICAgbUJ1ZmZlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
Ky8vIFJldHVybnMgYW4gdW51c2VkIHNoYWRlci9wcm9ncmFtIG5hbWUKK0dMdWludCBSZXNvdXJj
ZU1hbmFnZXI6OmNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
aGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtU2hhZGVyTWFwLmZpbmQoaGFuZGxlKSAhPSBtU2hh
ZGVyTWFwLmVuZCgpIHx8IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKSAhPSBtUHJvZ3JhbU1hcC5l
bmQoKSkgICAvLyBTaGFyZWQgbmFtZSBzcGFjZQorICAgIHsKKyAgICAgICAgaGFuZGxlKys7Cisg
ICAgfQorCisgICAgaWYgKHR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IG1TaGFkZXJNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhTaGFkZXIodGhpcywgaGFuZGxlKTsKKyAg
ICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAg
ICAgICBtU2hhZGVyTWFwW2hhbmRsZV0gPSBuZXcgRnJhZ21lbnRTaGFkZXIodGhpcywgaGFuZGxl
KTsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIGhhbmRsZTsK
K30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgcHJvZ3JhbS9zaGFkZXIgbmFtZQorR0x1aW50IFJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgdW5zaWduZWQgaW50IGhhbmRs
ZSA9IDE7CisKKyAgICB3aGlsZSAobVByb2dyYW1NYXAuZmluZChoYW5kbGUpICE9IG1Qcm9ncmFt
TWFwLmVuZCgpIHx8IG1TaGFkZXJNYXAuZmluZChoYW5kbGUpICE9IG1TaGFkZXJNYXAuZW5kKCkp
ICAgLy8gU2hhcmVkIG5hbWUgc3BhY2UKKyAgICB7CisgICAgICAgIGhhbmRsZSsrOworICAgIH0K
KworICAgIG1Qcm9ncmFtTWFwW2hhbmRsZV0gPSBuZXcgUHJvZ3JhbSh0aGlzLCBoYW5kbGUpOwor
CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLy8gUmV0dXJucyBhbiB1bnVzZWQgdGV4dHVyZSBu
YW1lCitHTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICB1bnNp
Z25lZCBpbnQgaGFuZGxlID0gMTsKKworICAgIHdoaWxlIChtVGV4dHVyZU1hcC5maW5kKGhhbmRs
ZSkgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9
CisKKyAgICBtVGV4dHVyZU1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7
Cit9CisKKy8vIFJldHVybnMgYW4gdW51c2VkIHJlbmRlcmJ1ZmZlciBuYW1lCitHTHVpbnQgUmVz
b3VyY2VNYW5hZ2VyOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIHVuc2lnbmVkIGludCBo
YW5kbGUgPSAxOworCisgICAgd2hpbGUgKG1SZW5kZXJidWZmZXJNYXAuZmluZChoYW5kbGUpICE9
IG1SZW5kZXJidWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9
CisKKyAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhh
bmRsZTsKK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKQoreworICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZlck1h
cC5maW5kKGJ1ZmZlcik7CisKKyAgICBpZiAoYnVmZmVyT2JqZWN0ICE9IG1CdWZmZXJNYXAuZW5k
KCkpCisgICAgeworICAgICAgICBpZiAoYnVmZmVyT2JqZWN0LT5zZWNvbmQpIGJ1ZmZlck9iamVj
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1CdWZmZXJNYXAuZXJhc2UoYnVmZmVyT2Jq
ZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVTaGFkZXIoR0x1
aW50IHNoYWRlcikKK3sKKyAgICBTaGFkZXJNYXA6Oml0ZXJhdG9yIHNoYWRlck9iamVjdCA9IG1T
aGFkZXJNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHNoYWRlck9iamVjdCAhPSBtU2hhZGVy
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlck9iamVjdC0+c2Vjb25kLT5nZXRS
ZWZDb3VudCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBzaGFkZXJPYmpl
Y3QtPnNlY29uZDsKKyAgICAgICAgICAgIG1TaGFkZXJNYXAuZXJhc2Uoc2hhZGVyT2JqZWN0KTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoYWRlck9i
amVjdC0+c2Vjb25kLT5mbGFnRm9yRGVsZXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit7Cisg
ICAgUHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbU9iamVjdCA9IG1Qcm9ncmFtTWFwLmZpbmQo
cHJvZ3JhbSk7CisKKyAgICBpZiAocHJvZ3JhbU9iamVjdCAhPSBtUHJvZ3JhbU1hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIGlmIChwcm9ncmFtT2JqZWN0LT5zZWNvbmQtPmdldFJlZkNvdW50KCkg
PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1PYmplY3QtPnNlY29u
ZDsKKyAgICAgICAgICAgIG1Qcm9ncmFtTWFwLmVyYXNlKHByb2dyYW1PYmplY3QpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3Qt
PnNlY29uZC0+ZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQoreworICAgIFRl
eHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmVPYmplY3QgPSBtVGV4dHVyZU1hcC5maW5kKHRleHR1
cmUpOworCisgICAgaWYgKHRleHR1cmVPYmplY3QgIT0gbVRleHR1cmVNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+c2Vjb25kKSB0ZXh0dXJlT2JqZWN0LT5zZWNv
bmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRleHR1cmVNYXAuZXJhc2UodGV4dHVyZU9iamVjdCk7
CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyKEdM
dWludCByZW5kZXJidWZmZXIpCit7CisgICAgUmVuZGVyYnVmZmVyTWFwOjppdGVyYXRvciByZW5k
ZXJidWZmZXJPYmplY3QgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQocmVuZGVyYnVmZmVyKTsKKwor
ICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QgIT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QtPnNlY29uZCkgcmVuZGVyYnVmZmVy
T2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlck1hcC5lcmFz
ZShyZW5kZXJidWZmZXJPYmplY3QpOworICAgIH0KK30KKworQnVmZmVyICpSZXNvdXJjZU1hbmFn
ZXI6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIEJ1ZmZlck1hcDo6aXRl
cmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoYnVmZmVy
ID09IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+c2Vjb25kOworICAgIH0K
K30KKworU2hhZGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNoYWRlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIFNoYWRlck1hcDo6aXRlcmF0b3Igc2hhZGVyID0gbVNoYWRlck1hcC5maW5k
KGhhbmRsZSk7CisKKyAgICBpZiAoc2hhZGVyID09IG1TaGFkZXJNYXAuZW5kKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHNoYWRlci0+c2Vjb25kOworICAgIH0KK30KKworVGV4dHVyZSAqUmVzb3VyY2VNYW5hZ2Vy
OjpnZXRUZXh0dXJlKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgaWYgKGhhbmRsZSA9PSAw
KSByZXR1cm4gTlVMTDsKKworICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIHRleHR1cmUgPSBtVGV4
dHVyZU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAodGV4dHVyZSA9PSBtVGV4dHVyZU1hcC5l
bmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gdGV4dHVyZS0+c2Vjb25kOworICAgIH0KK30KKworUHJvZ3JhbSAq
UmVzb3VyY2VNYW5hZ2VyOjpnZXRQcm9ncmFtKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAg
UHJvZ3JhbU1hcDo6aXRlcmF0b3IgcHJvZ3JhbSA9IG1Qcm9ncmFtTWFwLmZpbmQoaGFuZGxlKTsK
KworICAgIGlmIChwcm9ncmFtID09IG1Qcm9ncmFtTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9n
cmFtLT5zZWNvbmQ7CisgICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6
Z2V0UmVuZGVyYnVmZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgUmVuZGVyYnVmZmVy
TWFwOjppdGVyYXRvciByZW5kZXJidWZmZXIgPSBtUmVuZGVyYnVmZmVyTWFwLmZpbmQoaGFuZGxl
KTsKKworICAgIGlmIChyZW5kZXJidWZmZXIgPT0gbVJlbmRlcmJ1ZmZlck1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gcmVuZGVyYnVmZmVyLT5zZWNvbmQ7CisgICAgfQorfQorCit2b2lkIFJlc291cmNl
TWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVm
ZmVyKQoreworICAgIG1SZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IGJ1ZmZlcjsKK30KKwordm9p
ZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVm
ZmVyKQoreworICAgIGlmIChidWZmZXIgIT0gMCAmJiAhZ2V0QnVmZmVyKGJ1ZmZlcikpCisgICAg
eworICAgICAgICBCdWZmZXIgKmJ1ZmZlck9iamVjdCA9IG5ldyBCdWZmZXIoYnVmZmVyKTsKKyAg
ICAgICAgbUJ1ZmZlck1hcFtidWZmZXJdID0gYnVmZmVyT2JqZWN0OworICAgICAgICBidWZmZXJP
YmplY3QtPmFkZFJlZigpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNr
VGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFNhbXBsZXJUeXBlIHR5cGUpCit7Cisg
ICAgaWYgKCFnZXRUZXh0dXJlKHRleHR1cmUpICYmIHRleHR1cmUgIT0gMCkKKyAgICB7CisgICAg
ICAgIFRleHR1cmUgKnRleHR1cmVPYmplY3Q7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gU0FNUExF
Ul8yRCkKKyAgICAgICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJl
MkQodGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBTQU1QTEVS
X0NVQkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVy
ZUN1YmVNYXAodGV4dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbVRleHR1cmVNYXBbdGV4dHVyZV0gPSB0ZXh0dXJlT2JqZWN0OworICAgICAg
ICB0ZXh0dXJlT2JqZWN0LT5hZGRSZWYoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5h
Z2VyOjpjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcikKK3sK
KyAgICBpZiAocmVuZGVyYnVmZmVyICE9IDAgJiYgIWdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXIpKQorICAgIHsKKyAgICAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBu
ZXcgUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlciwgbmV3IENvbG9yYnVmZmVyKDAsIDAsIEdMX1JH
QkE0LCAwKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJNYXBbcmVuZGVyYnVmZmVyXSA9IHJlbmRl
cmJ1ZmZlck9iamVjdDsKKyAgICAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5hZGRSZWYoKTsKKyAg
ICB9Cit9CisKK30KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAkocmV2
aXNpb24gMCkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlc291cmNl
TWFuYWdlci5oIDogRGVmaW5lcyB0aGUgUmVzb3VyY2VNYW5hZ2VyIGNsYXNzLCB3aGljaCB0cmFj
a3Mgb2JqZWN0cworLy8gc2hhcmVkIGJ5IG11bHRpcGxlIEdMIGNvbnRleHRzLgorCisjaWZuZGVm
IExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNF
TUFOQUdFUl9IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
KworI2luY2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25h
bWVzcGFjZSBnbAoreworY2xhc3MgQnVmZmVyOworY2xhc3MgU2hhZGVyOworY2xhc3MgUHJvZ3Jh
bTsKK2NsYXNzIFRleHR1cmU7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2VudW0gU2FtcGxlclR5
cGUKK3sKKyAgICBTQU1QTEVSXzJELAorICAgIFNBTVBMRVJfQ1VCRSwKKworICAgIFNBTVBMRVJf
VFlQRV9DT1VOVAorfTsKKworY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCit7CisgIHB1YmxpYzoKKyAg
ICBSZXNvdXJjZU1hbmFnZXIoKTsKKyAgICB+UmVzb3VyY2VNYW5hZ2VyKCk7CisKKyAgICB2b2lk
IGFkZFJlZigpOworICAgIHZvaWQgcmVsZWFzZSgpOworCisgICAgR0x1aW50IGNyZWF0ZUJ1ZmZl
cigpOworICAgIEdMdWludCBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIEdMdWludCBj
cmVhdGVQcm9ncmFtKCk7CisgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQg
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKKyAgICB2b2lkIGRl
bGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOworICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSk7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1
ZmZlcik7CisKKyAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTaGFk
ZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdM
dWludCBoYW5kbGUpOworICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgCisg
ICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5k
ZXJidWZmZXIpOworCisgICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50
IGJ1ZmZlcik7CisgICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJl
LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlv
bihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOworCisgICAgc3RkOjpzaXplX3QgbVJlZkNvdW50
OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAg
ICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBT
aGFkZXIqPiBTaGFkZXJNYXA7CisgICAgU2hhZGVyTWFwIG1TaGFkZXJNYXA7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6bWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7CisgICAgUHJvZ3JhbU1h
cCBtUHJvZ3JhbU1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8R0x1aW50LCBUZXh0dXJlKj4g
VGV4dHVyZU1hcDsKKyAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOworCisgICAgdHlwZWRlZiBz
dGQ6Om1hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKKyAgICBSZW5k
ZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw3ICsyMSw3IEBAIG5hbWVzcGFjZSBnbAogdm9pZCAqU2hhZGVyOjptRnJhZ21l
bnRDb21waWxlciA9IE5VTEw7CiB2b2lkICpTaGFkZXI6Om1WZXJ0ZXhDb21waWxlciA9IE5VTEw7
CiAKLVNoYWRlcjo6U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogbUhh
bmRsZShoYW5kbGUpLCBtQ29udGV4dChjb250ZXh0KQorU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1IYW5kbGUoaGFuZGxlKSwgbVJlc291
cmNlTWFuYWdlcihtYW5hZ2VyKQogewogICAgIG1Tb3VyY2UgPSBOVUxMOwogICAgIG1IbHNsID0g
TlVMTDsKQEAgLTM1LDIxICszNSwyMiBAQCBTaGFkZXI6OlNoYWRlcihDb250ZXh0ICpjb250ZXh0
LCBHTHVpbnQgCiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRC
dWlsdEluUmVzb3VyY2UgcmVzb3VyY2VzOwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heFZlcnRl
eEF0dHJpYnMgPSBNQVhfVkVSVEVYX0FUVFJJQlM7Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsKLSAgICAg
ICAgICAgIHJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9ycyA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7
Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
OwotICAgICAgICAgICAgcmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyA9IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7Ci0gICAgICAgICAgICByZXNv
dXJjZXMubWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJTOworICAgICAgICAgICAgU2hJ
bml0QnVpbHRJblJlc291cmNlKCZyZXNvdXJjZXMpOworICAgICAgICAgICAgcmVzb3VyY2VzLk1h
eFZlcnRleEF0dHJpYnMgPSBNQVhfVkVSVEVYX0FUVFJJQlM7CisgICAgICAgICAgICByZXNvdXJj
ZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzsK
KyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IE1BWF9WQVJZSU5HX1ZF
Q1RPUlM7CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMg
PSBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAgICAgICAgICByZXNvdXJjZXMu
TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0gTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFM7CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRV
bmlmb3JtVmVjdG9ycyA9IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgICAgICAg
ICByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJTOwogCiAgICAgICAg
ICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ0ZyYWdt
ZW50LCBFU2hTcGVjR0xFUzIsICZyZXNvdXJjZXMpOwogICAgICAgICAgICAgbVZlcnRleENvbXBp
bGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nVmVydGV4LCBFU2hTcGVjR0xFUzIsICZy
ZXNvdXJjZXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbUF0dGFjaENvdW50ID0gMDsKKyAg
ICBtUmVmQ291bnQgPSAwOwogICAgIG1EZWxldGVTdGF0dXMgPSBmYWxzZTsKIH0KIApAQCAtMTg3
LDI0ICsxODgsMjQgQEAgY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKICAgICByZXR1cm4g
bUhsc2w7CiB9CiAKLXZvaWQgU2hhZGVyOjphdHRhY2goKQordm9pZCBTaGFkZXI6OmFkZFJlZigp
CiB7Ci0gICAgbUF0dGFjaENvdW50Kys7CisgICAgbVJlZkNvdW50Kys7CiB9CiAKLXZvaWQgU2hh
ZGVyOjpkZXRhY2goKQordm9pZCBTaGFkZXI6OnJlbGVhc2UoKQogewotICAgIG1BdHRhY2hDb3Vu
dC0tOworICAgIG1SZWZDb3VudC0tOwogCi0gICAgaWYgKG1BdHRhY2hDb3VudCA9PSAwICYmIG1E
ZWxldGVTdGF0dXMpCisgICAgaWYgKG1SZWZDb3VudCA9PSAwICYmIG1EZWxldGVTdGF0dXMpCiAg
ICAgewotICAgICAgICBtQ29udGV4dC0+ZGVsZXRlU2hhZGVyKG1IYW5kbGUpOworICAgICAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTaGFkZXIobUhhbmRsZSk7CiAgICAgfQogfQogCi1ib29s
IFNoYWRlcjo6aXNBdHRhY2hlZCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgU2hhZGVyOjpnZXRSZWZD
b3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1BdHRhY2hDb3VudCA+IDA7CisgICAgcmV0dXJu
IG1SZWZDb3VudDsKIH0KIAogYm9vbCBTaGFkZXI6OmlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29u
c3QKQEAgLTI2Miw2ICsyNjMsOCBAQCB2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCiAKICAg
ICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09PUkQi
KSAhPSBOVUxMOwogICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAiR0xf
VVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOworICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHN0
cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7CisgICAgICAgIG1Vc2Vz
UG9pbnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09PUkQiKSAhPSBOVUxM
OwogICAgIH0KIH0KIApAQCAtNDE1LDcgKzQxOCw3IEBAIGJvb2wgU2hhZGVyOjpjb21wYXJlVmFy
eWluZyhjb25zdCBWYXJ5aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZlcnRleFNoYWRlcjo6
VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpIDogU2hhZGVyKGNv
bnRleHQsIGhhbmRsZSkKK1ZlcnRleFNoYWRlcjo6VmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdl
ciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIobWFuYWdlciwgaGFuZGxlKQogewog
fQogCkBAIC00NzksNyArNDgyLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRl
cygpCiAgICAgfQogfQogCi1GcmFnbWVudFNoYWRlcjo6RnJhZ21lbnRTaGFkZXIoQ29udGV4dCAq
Y29udGV4dCwgR0x1aW50IGhhbmRsZSkgOiBTaGFkZXIoY29udGV4dCwgaGFuZGxlKQorRnJhZ21l
bnRTaGFkZXI6OkZyYWdtZW50U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50
IGhhbmRsZSkgOiBTaGFkZXIobWFuYWdlciwgaGFuZGxlKQogewogfQogCkluZGV4OiBBTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpc3Q+CiAjaW5j
bHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBnbAogewpAQCAtNDUs
NyArNDUsNyBAQCBjbGFzcyBTaGFkZXIKICAgICBmcmllbmQgUHJvZ3JhbTsKIAogICBwdWJsaWM6
Ci0gICAgU2hhZGVyKENvbnRleHQgKmNvbnRleHQsIEdMdWludCBoYW5kbGUpOworICAgIFNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUpOwogCiAgICAgdmlydHVh
bCB+U2hhZGVyKCk7CiAKQEAgLTYzLDkgKzYzLDkgQEAgY2xhc3MgU2hhZGVyCiAgICAgYm9vbCBp
c0NvbXBpbGVkKCk7CiAgICAgY29uc3QgY2hhciAqZ2V0SExTTCgpOwogCi0gICAgdm9pZCBhdHRh
Y2goKTsKLSAgICB2b2lkIGRldGFjaCgpOwotICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNvbnN0Owor
ICAgIHZvaWQgYWRkUmVmKCk7CisgICAgdm9pZCByZWxlYXNlKCk7CisgICAgdW5zaWduZWQgaW50
IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNv
bnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CiAKQEAgLTgyLDggKzgyLDggQEAgY2xh
c3MgU2hhZGVyCiAgICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAm
eCwgY29uc3QgVmFyeWluZyAmeSk7CiAKICAgICBjb25zdCBHTHVpbnQgbUhhbmRsZTsKLSAgICBp
bnQgbUF0dGFjaENvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dyYW0gb2JqZWN0cyB0aGlzIHNo
YWRlciBpcyBhdHRhY2hlZCB0bwotICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRv
IGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBp
biB1c2UKKyAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dy
YW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bworICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUg
ZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKIAogICAgIGNoYXIgKm1Tb3VyY2U7CiAgICAg
Y2hhciAqbUhsc2w7CkBAIC05Myw4ICs5MywxMCBAQCBjbGFzcyBTaGFkZXIKIAogICAgIGJvb2wg
bVVzZXNGcmFnQ29vcmQ7CiAgICAgYm9vbCBtVXNlc0Zyb250RmFjaW5nOworICAgIGJvb2wgbVVz
ZXNQb2ludFNpemU7CisgICAgYm9vbCBtVXNlc1BvaW50Q29vcmQ7CiAKLSAgICBDb250ZXh0ICpt
Q29udGV4dDsKKyAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiAKICAgICBz
dGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZvaWQgKm1WZXJ0ZXhD
b21waWxlcjsKQEAgLTEyMSw3ICsxMjMsNyBAQCBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMg
U2hhZGVyCiAgICAgZnJpZW5kIFByb2dyYW07CiAKICAgcHVibGljOgotICAgIFZlcnRleFNoYWRl
cihDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgaGFuZGxlKTsKKyAgICBWZXJ0ZXhTaGFkZXIoUmVz
b3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKTsKIAogICAgIH5WZXJ0ZXhTaGFk
ZXIoKTsKIApAQCAtMTQwLDcgKzE0Miw3IEBAIGNsYXNzIFZlcnRleFNoYWRlciA6IHB1YmxpYyBT
aGFkZXIKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgogewogICBwdWJsaWM6
Ci0gICAgRnJhZ21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwgR0x1aW50IGhhbmRsZSk7Cisg
ICAgRnJhZ21lbnRTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxl
KTsKIAogICAgIH5GcmFnbWVudFNoYWRlcigpOwogCkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQCBuYW1lc3BhY2UgZ2wKIHsKIAogVGV4dHVy
ZTo6SW1hZ2U6OkltYWdlKCkKLSAgOiB3aWR0aCgwKSwgaGVpZ2h0KDApLCBkaXJ0eShmYWxzZSks
IHN1cmZhY2UoTlVMTCkKKyAgOiB3aWR0aCgwKSwgaGVpZ2h0KDApLCBkaXJ0eShmYWxzZSksIHN1
cmZhY2UoTlVMTCksIGZvcm1hdChHTF9OT05FKQogewogfQogCkBAIC0zMiwxMyArMzIsMTYgQEAg
VGV4dHVyZTo6SW1hZ2U6On5JbWFnZSgpCiAgIGlmIChzdXJmYWNlKSBzdXJmYWNlLT5SZWxlYXNl
KCk7CiB9CiAKLVRleHR1cmU6OlRleHR1cmUoQ29udGV4dCAqY29udGV4dCkgOiBtQ29udGV4dChj
b250ZXh0KQorVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQgaWQpIDogUmVmQ291bnRPYmplY3QoaWQp
CiB7CiAgICAgbU1pbkZpbHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKICAgICBtTWFn
RmlsdGVyID0gR0xfTElORUFSOwogICAgIG1XcmFwUyA9IEdMX1JFUEVBVDsKICAgICBtV3JhcFQg
PSBHTF9SRVBFQVQ7CiAKKyAgICBtV2lkdGggPSAwOworICAgIG1IZWlnaHQgPSAwOworCiAgICAg
bURpcnR5TWV0YURhdGEgPSB0cnVlOwogICAgIG1EaXJ0eSA9IHRydWU7CiAgICAgbUlzUmVuZGVy
YWJsZSA9IGZhbHNlOwpAQCAtNTEsNyArNTQsOCBAQCBUZXh0dXJlOjp+VGV4dHVyZSgpCiAKIEJs
aXQgKlRleHR1cmU6OmdldEJsaXR0ZXIoKQogewotICAgIHJldHVybiBtQ29udGV4dC0+Z2V0Qmxp
dHRlcigpOworICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgcmV0dXJu
IGNvbnRleHQtPmdldEJsaXR0ZXIoKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3Nm
dWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCkBAIC0xNzMsNyAr
MTc3LDE1IEBAIEdMdWludCBUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAogLy8gU2VsZWN0cyBh
biBpbnRlcm5hbCBEaXJlY3QzRCA5IGZvcm1hdCBmb3Igc3RvcmluZyBhbiBJbWFnZQogRDNERk9S
TUFUIFRleHR1cmU6OnNlbGVjdEZvcm1hdChHTGVudW0gZm9ybWF0KQogewotICAgIHJldHVybiBE
M0RGTVRfQThSOEc4Qjg7CisgICAgaWYgKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUIHx8CisgICAgICAgIGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RGTVRfRFhUMTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKKyAgICB9CiB9CiAK
IGludCBUZXh0dXJlOjppbWFnZVBpdGNoKGNvbnN0IEltYWdlICZpbWcpIGNvbnN0CkBAIC0xODgs
MTI2ICsyMDAsMjgyIEBAIHZvaWQgVGV4dHVyZTo6bG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2UK
IHsKICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50KTsKIAorICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAgIGxvYWRBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAg
ICAgbG9hZEx1bWluYW5jZUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgIGJyZWFr
OworCisgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2UgR0xfUkdCOgorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICBsb2FkUkdCVUJ5dGVJbWFnZURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICAgICAgbG9hZFJHQjU2NUltYWdlRGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2UgR0xfUkdCQToKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZUltYWdlRGF0
YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0
cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgICAgIGxvYWRSR0JBNDQ0NEltYWdl
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgIGxvYWRSR0JBNTU1MUlt
YWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgorICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICBsb2FkQkdSQUltYWdl
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpsb2FkQWxw
aGFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CisgICAgCiAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZTE2ID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHNvdXJjZSk7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
ICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7CisgICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IDA7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOworICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IHNvdXJjZVt4XTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpsb2Fk
THVtaW5hbmNlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAorICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Cisg
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OwogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgcjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZzsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTsKKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNv
dXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKKyAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAgIGEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICAgICAgciA9IDA7Ci0gICAgICAgICAgICAgICAgZyA9IDA7Ci0gICAgICAgICAgICAgICAgYiA9
IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0U6Ci0gICAgICAgICAgICAgICAgciA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBn
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGIgPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICAgICAgYSA9IDB4RkY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgICAgciA9IHNvdXJjZVsyKngr
MF07Ci0gICAgICAgICAgICAgICAgZyA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAg
YiA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgYSA9IHNvdXJjZVsyKngrMV07Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Cit2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBoYUlt
YWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAotICAgICAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICAgICAgICByID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4ICog
MyArIDJdOwotICAgICAgICAgICAgICAgICAgICBhID0gMHhGRjsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7Cisg
ICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNl
WzIqeCsxXTsKKyAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOwordm9pZCBU
ZXh0dXJlOjpsb2FkUkdCVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAweEZGOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYiA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZyA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJn
YmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgICAgICAgICAgICAgciA9ICgocmdiYSAm
IDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07
CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAgICB9CisgICAgfQor
fQogCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKK3ZvaWQgVGV4dHVyZTo6bG9hZFJHQjU2
NUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0gICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICAgICAgICByID0gc291cmNlW3ggKiA0ICsgMF07Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBz
b3VyY2VbeCAqIDQgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IHNvdXJjZVt4ICogNCAr
IDJdOwotICAgICAgICAgICAgICAgICAgICBhID0gc291cmNlW3ggKiA0ICsgM107Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
CisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIp
OworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8
ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAo
KHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAgICB9CisgICAgfQorfQogCi0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEg
PSBzb3VyY2UxNlt4XTsKK3ZvaWQgVGV4dHVyZTo6bG9hZFJHQkFVQnl0ZUltYWdlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25z
dAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAoKHJn
YmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGIgPSAoKHJnYmEgJiAweDAwRjApIDw8IDApIHwgKChyZ2JhICYgMHgwMEYw
KSA+PiA0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoKHJnYmEgJiAweDBGMDApID4+
IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIg
PSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKKyAg
ICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3ggKiA0ICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBz
b3VyY2VbeCAqIDQgKyAxXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4
ICogNCArIDBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3ggKiA0ICsg
M107CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZTE2W3hdOwordm9pZCBUZXh0
dXJlOjpsb2FkUkdCQTQ0NDRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwogCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdi
YSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKChyZ2JhICYg
MHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4g
MTMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0
KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDQ7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdi
YSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4
MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOworICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4g
OCk7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgp
IHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10g
PSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKKyAgICAg
ICAgfQorICAgIH0KK30KIAotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Cit2b2lkIFRleHR1cmU6
OmxvYWRSR0JBNTU1MUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
KnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IGI7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBnOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gcjsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IGE7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAg
ICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Cisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChy
Z2JhICYgMHgwN0MwKSA+PiA4KTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdi
YSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit2b2lkIFRleHR1cmU6OmxvYWRC
R1JBSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdAogeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOworICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICog
b3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGgqNCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6OmNyZWF0ZVN1cmZhY2UoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEltYWdlICppbWcpCit7Cisg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKIAogICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdo
dCAhPSAwKQogICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3Jl
YXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHNlbGVjdEZvcm1hdChmb3Jt
YXQpLCBEM0RQT09MX1NZU1RFTU1FTSwgJm5ld1N1cmZhY2UsIE5VTEwpOworICAgICAgICBpbnQg
bGV2ZWxUb0ZldGNoID0gMDsKKyAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGggPSB3aWR0aDsK
KyAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBpZiAoSXND
b21wcmVzc2VkKGZvcm1hdCkgJiYgKHdpZHRoICUgNCAhPSAwIHx8IGhlaWdodCAlIDQgIT0gMCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgaXNNdWx0NCA9IGZhbHNlOworICAgICAgICAg
ICAgaW50IHVwc2FtcGxlQ291bnQgPSAwOworICAgICAgICAgICAgd2hpbGUgKCFpc011bHQ0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlcXVlc3RXaWR0aCA8PD0gMTsKKyAgICAg
ICAgICAgICAgICByZXF1ZXN0SGVpZ2h0IDw8PSAxOworICAgICAgICAgICAgICAgIHVwc2FtcGxl
Q291bnQrKzsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFdpZHRoICUgNCA9PSAwICYmIHJl
cXVlc3RIZWlnaHQgJSA0ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpc011bHQ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNvdW50OworICAgICAgICB9CisKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0
V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIHNlbGVjdEZvcm1h
dChmb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFBPT0xfU1lTVEVNTUVNLCAmbmV3VGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQor
CisgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdT
dXJmYWNlKTsKKyAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlm
IChpbWctPnN1cmZhY2UpIGltZy0+c3VyZmFjZS0+UmVsZWFzZSgpOwpAQCAtMzE2LDE4ICs0ODQs
MjMgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBHTAogICAgIGltZy0+
d2lkdGggPSB3aWR0aDsKICAgICBpbWctPmhlaWdodCA9IGhlaWdodDsKICAgICBpbWctPmZvcm1h
dCA9IGZvcm1hdDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQoreworICAgIGNyZWF0ZVN1
cmZhY2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWcpOwogCi0gICAgaWYgKHBpeGVscyAhPSBO
VUxMICYmIG5ld1N1cmZhY2UgIT0gTlVMTCkKKyAgICBpZiAocGl4ZWxzICE9IE5VTEwgJiYgaW1n
LT5zdXJmYWNlICE9IE5VTEwpCiAgICAgewogICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7
Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbmV3U3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZCwg
TlVMTCwgMCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVj
dCgmbG9ja2VkLCBOVUxMLCAwKTsKIAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwogCiAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAg
ICAgbG9hZEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
ICAgICBuZXdTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgICAgICBpbWctPnN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKICAgICAgICAgfQogCiAgICAgICAgIGltZy0+ZGlydHkgPSB0cnVlOwpA
QCAtMzM2LDkgKzUwOSwzNiBAQCB2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6ZWkgd2lkdGgs
IEdMCiAgICAgbURpcnR5TWV0YURhdGEgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmU6OnN1Yklt
YWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCit2b2lkIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKIHsKLSAg
ICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5b2Zmc2V0ID4g
aW1nLT5oZWlnaHQpIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICBjcmVhdGVT
dXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKKworICAgIGlmIChwaXhlbHMgIT0g
TlVMTCAmJiBpbWctPnN1cmZhY2UgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIEQzRExPQ0tFRF9S
RUNUIGxvY2tlZDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tS
ZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtZW1jcHkobG9ja2VkLnBCaXRzLCBwaXhlbHMsIGltYWdlU2l6ZSk7CisgICAgICAgICAg
ICBpbWctPnN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGltZy0+
ZGlydHkgPSB0cnVlOworICAgIH0KKworICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKK30KKwor
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKQorewor
ICAgIGlmICh3aWR0aCArIHhvZmZzZXQgPiBpbWctPndpZHRoIHx8IGhlaWdodCArIHlvZmZzZXQg
PiBpbWctPmhlaWdodCkKKyAgICB7CisgICAgICAgIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2Vk
OwogICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBO
VUxMLCAwKTsKQEAgLTM1Miw2ICs1NTIsNDcgQEAgdm9pZCBUZXh0dXJlOjpzdWJJbWFnZShHTGlu
dCB4b2Zmc2V0LCBHTAogICAgIH0KIAogICAgIGltZy0+ZGlydHkgPSB0cnVlOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmlt
ZykKK3sKKyAgICBpZiAod2lkdGggKyB4b2Zmc2V0ID4gaW1nLT53aWR0aCB8fCBoZWlnaHQgKyB5
b2Zmc2V0ID4gaW1nLT5oZWlnaHQpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0g
Z2V0Rm9ybWF0KCkpCisgICAgeworICAgICAgICBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsK
KyAgICB1cGRhdGVSZWdpb24ubGVmdCA9IHhvZmZzZXQ7CisgICAgdXBkYXRlUmVnaW9uLnJpZ2h0
ID0geG9mZnNldCArIHdpZHRoOworICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20gPSB5b2Zmc2V0ICsg
aGVpZ2h0OworICAgIHVwZGF0ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OworCisgICAgRDNETE9DS0VE
X1JFQ1QgbG9ja2VkOworICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVj
dCgmbG9ja2VkLCAmdXBkYXRlUmVnaW9uLCAwKTsKKworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBHTHNp
emVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwor
ICAgICAgICBpbnQgcm93cyA9IGltYWdlU2l6ZSAvIGlucHV0UGl0Y2g7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcm93czsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHko
KHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKiko
KEJZVEUqKXBpeGVscyArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7CisgICAgICAgIH0K
KyAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgfQorCisgICAgaW1nLT5k
aXJ0eSA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCkBAIC00NDIsNyArNjgzLDcgQEAgaW50IFRleHR1cmU6
OmxldmVsQ291bnQoKSBjb25zdAogICAgIHJldHVybiBtQmFzZVRleHR1cmUgPyBtQmFzZVRleHR1
cmUtPkdldExldmVsQ291bnQoKSA6IDA7CiB9CiAKLVRleHR1cmUyRDo6VGV4dHVyZTJEKENvbnRl
eHQgKmNvbnRleHQpIDogVGV4dHVyZShjb250ZXh0KQorVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1
aW50IGlkKSA6IFRleHR1cmUoaWQpCiB7CiAgICAgbVRleHR1cmUgPSBOVUxMOwogICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gTlVMTDsKQEAgLTQ2NCw2ICs3MDUsMTEgQEAgR0xlbnVtIFRleHR1cmUy
RDo6Z2V0VGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKIH0KIAorR0xl
bnVtIFRleHR1cmUyRDo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUltYWdlQXJy
YXlbMF0uZm9ybWF0OworfQorCiAvLyBXaGlsZSBPcGVuR0wgZG9lc24ndCBjaGVjayB0ZXh0dXJl
IGNvbnNpc3RlbmN5IHVudGlsIGRyYXctdGltZSwgRDNEOSByZXF1aXJlcyBhIGNvbXBsZXRlIHRl
eHR1cmUKIC8vIGZvciByZW5kZXItdG8tdGV4dHVyZSAoc3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBX
ZSBoYXZlIG5vIHdheSBvZiBrZWVwaW5nIGluZGl2aWR1YWwgaW5jb25zaXN0ZW50IGxldmVscy4K
IC8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGljdWxhciBsZXZlbCBvZiB0aGUgdGV4dHVyZSBtdXN0
IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmljIGZvcm1hdCwgd2lkdGggYW5kIGhlaWdodC4KQEAg
LTUyMiw2ICs3NjgsMTMgQEAgdm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBH
TAogICAgIFRleHR1cmU6OnNldEltYWdlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtsZXZlbF0pOwogfQogCit2b2lkIFRl
eHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1J
bWFnZUFycmF5W2xldmVsXSk7Cit9CisKIHZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdLnN1cmZhY2UgIT0g
TlVMTCk7CkBAIC01NTksMTcgKzgxMiwzMSBAQCB2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChH
TGludCBsZXZlbCwgCiAKIHZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKIHsKLSAgICBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAm
bUltYWdlQXJyYXlbbGV2ZWxdKTsKLSAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBp
eGVscywgJm1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CiB9CiAKLXZvaWQg
VGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1
ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdl
QXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkQ6OmNv
cHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAq
c291cmNlKQogewogICAgIGlmIChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KSkKICAgICB7CiAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwogICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CiAgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKyAgICB9CiAKICAgICBpZiAod2lk
dGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKICAgICB7CkBA
IC01OTEsNyArODU4LDcgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwg
RwogICAgIG1JbWFnZUFycmF5W2xldmVsXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKIH0KIAot
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFn
ZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnNvdXJjZSkKIHsKICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxd
LndpZHRoIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0uaGVpZ2h0KQog
ICAgIHsKQEAgLTY4OSw2ICs5NTYsMTEgQEAgYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcGxldGUoKSBj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRleHR1cmUyRDo6aXNDb21wcmVzc2Vk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEZvcm1hdCgpKTsKK30KKwog
Ly8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0
dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTg3MSwxNiArMTE0MywxNyBA
QCB2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKICAgICB9CiB9CiAKLUNvbG9yYnVm
ZmVyICpUZXh0dXJlMkQ6OmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCitSZW5kZXJidWZm
ZXIgKlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIoR0xlbnVtIHRhcmdldCkKIHsKICAgICBpZiAo
dGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCiAgICAgewotICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIChDb2xvcmJ1ZmZlciAqKU5VTEwpOworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKICAgICB9
CiAKICAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1D
b2xvcmJ1ZmZlclByb3h5ID0gbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdl
dCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBu
ZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5LT5hZGRSZWYoKTsKICAgICB9CiAKICAgICByZXR1cm4gbUNvbG9yYnVmZmVy
UHJveHk7CkBAIC04OTgsNyArMTE3MSw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlMkQ6
OmdldFJlbmRlclQKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1UZXh0dXJlQ3ViZU1h
cDo6VGV4dHVyZUN1YmVNYXAoQ29udGV4dCAqY29udGV4dCkgOiBUZXh0dXJlKGNvbnRleHQpCitU
ZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpCiB7
CiAgICAgbVRleHR1cmUgPSBOVUxMOwogCkBAIC05MjcsNiArMTIwMCwxMSBAQCBHTGVudW0gVGV4
dHVyZUN1YmVNYXA6OmdldFRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIEdMX1RFWFRVUkVfQ1VC
RV9NQVA7CiB9CiAKK0dMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0Rm9ybWF0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0OworfQorCiB2b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKICAgICBzZXRJ
bWFnZSgwLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwpAQCAtOTU3LDYgKzEyMzUsMTMgQEAgdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdaKEdMaW50IAogICAgIHNldEltYWdlKDUsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscyk7CiB9CiAKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJ
bWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgpOworCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKHdpZHRoLCBoZWlnaHQs
IGludGVybmFsRm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRl
eChmYWNlKV1bbGV2ZWxdKTsKK30KKwogdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChH
TGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIGludCBmYWNlID0gZmFj
ZUluZGV4KGZhY2VUYXJnZXQpOwpAQCAtOTk0LDggKzEyNzksMTggQEAgdm9pZCBUZXh0dXJlQ3Vi
ZU1hcDo6Y29tbWl0UmVjdChHTGVudW0gZgogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFn
ZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgVGV4
dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNl
KV1bbGV2ZWxdKTsKLSAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKSkKKyAgICB7CisgICAgICAg
IGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIH0KK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdM
ZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29t
cHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6
ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0pKQorICAgIHsK
KyAgICAgICAgY29tbWl0UmVjdChmYWNlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCk7CisgICAgfQogfQogCiAvLyBUZXN0cyBmb3IgR0wgdGV4dHVyZSBvYmplY3QgY29t
cGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KQEAg
LTEwNjQsNiArMTM1OSwxMSBAQCBib29sIFRleHR1cmVDdWJlTWFwOjppc0NvbXBsZXRlKCkgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVz
c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEZvcm1hdCgpKTsKK30K
KwogLy8gQ29uc3RydWN0cyBhIERpcmVjdDNEIDkgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewpAQCAtMTI3OCw3ICsx
NTc4LDcgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVUZXh0dXJlKEdMaQogICAgIHJl
dHVybiAhdGV4dHVyZU9rYXk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShH
TGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291
cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weUltYWdlKEdMZW51bSBmYWNlLCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKQogewogICAg
IHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgoZmFjZSk7CiAKQEAgLTEyODcsNiAr
MTU4NywxMCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIGZhCiAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwogICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVy
ZSwgdHJ1ZSk7CiAgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG5lZWRSZW5kZXJUYXJn
ZXQoKTsKKyAgICB9CiAKICAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKIApAQCAtMTM0MCw3
ICsxNjQ0LDcgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRDdQogICAg
IHJldHVybiAoU1VDQ0VFREVEKGhyKSkgPyBzdXJmYWNlIDogTlVMTDsKIH0KIAotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkKIHsKICAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXS53aWR0aDsKIApAQCAtMTM1Niw3
ICsxNjYwLDcgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bQogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBnZXRSZW5kZXJUYXJnZXQoZmFjZSk7CisgICAg
ICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKICAgICB9CiAKICAgICBpZiAobGV2ZWwgPCBsZXZlbENv
dW50KCkpCkBAIC0xNDQwLDE4ICsxNzQ0LDE5IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVy
YXRlTWlwbWFwcygpCiAgICAgfQogfQogCi1Db2xvcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6Omdl
dENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpCitSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFw
OjpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQogewogICAgIGlmICghSXNDdWJlbWFwVGV4
dHVyZVRhcmdldCh0YXJnZXQpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCAoQ29sb3JidWZmZXIgKilOVUxMKTsKKyAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFyZ2V0KTsKIAogICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNl
XSA9IG5ldyBUZXh0dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpOworICAgICAgICBt
RmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBUZXh0dXJlQ29s
b3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2Vd
LT5hZGRSZWYoKTsKICAgICB9CiAKICAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwpAQCAt
MTQ3NSw2ICsxNzgwLDE2IEBAIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpUZXh0
dXIKICAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVy
ZVRhcmdldCh0YXJnZXQpKTsKIH0KIAordm9pZCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6YWRkUmVmKCkgY29uc3QKK3sKKyAgICBtVGV4dHVyZS0+YWRkUmVmKCk7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OnJlbGVhc2UoKSBjb25zdAorewor
ICAgIG1UZXh0dXJlLT5yZWxlYXNlKCk7Cit9CisKIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJl
OjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBpZiAo
bVJlbmRlclRhcmdldCkgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwpAQCAtMTQ4NCwxNCArMTc5
OSwxOSBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTo6VGV4dHVyZUNvbG9yCiAgICAgcmV0
dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CiAKLWludCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eTo6Z2V0V2lkdGgoKQoraW50IFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5Ojpn
ZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRXaWR0aCgpOwogfQog
Ci1pbnQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCgpCitpbnQg
VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmdldEhlaWdodCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRIZWlnaHQoKTsKIH0KIAorR0xlbnVtIFRleHR1cmU6OlRl
eHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpnZXRGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZS0+Z2V0Rm9ybWF0KCk7Cit9CisKIH0KSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCShy
ZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKIG5hbWVzcGFjZSBnbAogewotY2xhc3MgQ29udGV4
dDsKIGNsYXNzIEJsaXQ7CiAKIGVudW0KQEAgLTM0LDEwICszMywxMCBAQCBlbnVtCiAgICAgTUFY
X1RFWFRVUkVfTEVWRUxTID0gMTIgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsK
IAotY2xhc3MgVGV4dHVyZQorY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAog
ewogICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dHVyZShDb250ZXh0ICpjb250ZXh0KTsKKyAg
ICBleHBsaWNpdCBUZXh0dXJlKEdMdWludCBpZCk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7
CiAKQEAgLTU2LDE1ICs1NSwxOSBAQCBjbGFzcyBUZXh0dXJlCiAgICAgR0x1aW50IGdldFdpZHRo
KCkgY29uc3Q7CiAgICAgR0x1aW50IGdldEhlaWdodCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBH
TGVudW0gZ2V0Rm9ybWF0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdCA9IDA7
CiAKICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldFRleHR1cmUoKTsKLSAgICB2aXJ0dWFs
IENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CisgICAgdmly
dHVhbCBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7CiAKICAgICBib29sIGlzRGly
dHkoKSBjb25zdDsKIAorICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJF
X0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7IC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4g
aWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlz
IG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KKwogICBwcm90ZWN0
ZWQ6CiAgICAgY2xhc3MgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHk7CiAgICAgZnJpZW5kIGNsYXNz
IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OwpAQCAtNzQsMTAgKzc3LDE0IEBAIGNsYXNzIFRleHR1
cmUKICAgICAgICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkoVGV4dHVyZSAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CiAgICAgICAgICAgICAvLyB0YXJnZXQgaXMgYSAyRC1saWtlIHRleHR1cmUg
dGFyZ2V0IChHTF9URVhUVVJFXzJEIG9yIG9uZSBvZiB0aGUgY3ViZSBmYWNlIHRhcmdldHMpCiAK
KyAgICAgICAgdmlydHVhbCB2b2lkIGFkZFJlZigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVsZWFzZSgpIGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFJlbmRlclRhcmdldCgpOwogCi0gICAgICAgIHZpcnR1YWwgaW50IGdldFdpZHRoKCk7Ci0g
ICAgICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpOworICAgICAgICB2aXJ0dWFsIGludCBnZXRX
aWR0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBnZXRIZWlnaHQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBHTGVudW0gZ2V0Rm9ybWF0KCkgY29uc3Q7CiAKICAgICAgIHByaXZhdGU6
CiAgICAgICAgIFRleHR1cmUgKm1UZXh0dXJlOwpAQCAtMTAyLDEzICsxMDksMTAgQEAgY2xhc3Mg
VGV4dHVyZQogICAgIHN0YXRpYyBEM0RGT1JNQVQgc2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQp
OwogICAgIGludCBpbWFnZVBpdGNoKGNvbnN0IEltYWdlJiBpbWcpIGNvbnN0OwogCi0gICAgR0xl
bnVtIG1NaW5GaWx0ZXI7Ci0gICAgR0xlbnVtIG1NYWdGaWx0ZXI7Ci0gICAgR0xlbnVtIG1XcmFw
UzsKLSAgICBHTGVudW0gbVdyYXBUOwotCiAgICAgdm9pZCBzZXRJbWFnZShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKLSAgICB2b2lkIHN1
YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIGJvb2wgc3ViSW1hZ2Uo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIGJvb2wgc3Vi
SW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKIAogICAgIHZvaWQgbmVlZFJlbmRlclRhcmdl
dCgpOwogCkBAIC0xMjgsNDUgKzEzMiw3MiBAQCBjbGFzcyBUZXh0dXJlCiAKICAgICBCbGl0ICpn
ZXRCbGl0dGVyKCk7CiAKKyAgICBpbnQgbGV2ZWxDb3VudCgpIGNvbnN0OworCiAgICAgdW5zaWdu
ZWQgaW50IG1XaWR0aDsKICAgICB1bnNpZ25lZCBpbnQgbUhlaWdodDsKLQotICAgIGludCBsZXZl
bENvdW50KCkgY29uc3Q7CisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7CisgICAgR0xlbnVtIG1NYWdG
aWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBHTGVudW0gbVdyYXBUOwogCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwogCi0gICAgQ29udGV4
dCAqbUNvbnRleHQ7CisgICAgdm9pZCBsb2FkSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7CisKKyAgICB2b2lkIGxvYWRBbHBoYUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1p
bmFuY2VJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OworICAgIHZvaWQgbG9hZFJHQlVCeXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZFJHQjU2
NUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQVVCeXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxv
YWRSR0JBNDQ0NEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JBNTU1MUltYWdlRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAg
ICB2b2lkIGxvYWRCR1JBSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CiAKICAgICBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKm1CYXNl
VGV4dHVyZTsgLy8gVGhpcyBpcyBhIHdlYWsgcG9pbnRlci4gVGhlIGRlcml2ZWQgY2xhc3MgaXMg
YXNzdW1lZCB0byBvd24gYSBzdHJvbmcgcG9pbnRlci4KLSAgICBib29sIG1EaXJ0eU1ldGFEYXRh
OwotICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKIAogICAgIGJvb2wgbURpcnR5OworICAgIGJvb2wg
bURpcnR5TWV0YURhdGE7CisgICAgYm9vbCBtSXNSZW5kZXJhYmxlOwogCi0gICAgdm9pZCBsb2Fk
SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCwgc3RkOjpz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVT
dXJmYWNlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBJbWFn
ZSAqaW1nKTsKIH07CiAKIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiB7CiAgIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBUZXh0dXJlMkQoQ29udGV4dCAqY29udGV4dCk7CisgICAgZXhw
bGljaXQgVGV4dHVyZTJEKEdMdWludCBpZCk7CiAKICAgICB+VGV4dHVyZTJEKCk7CiAKICAgICBH
TGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRl
cmJ1ZmZlciAqc291cmNlKTsKLSAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlciAqc291cmNlKTsKKyAgICB2b2lkIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgY29weUltYWdlKEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOworICAgIHZv
aWQgY29weVN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVy
YnVmZmVyU3RvcmFnZSAqc291cmNlKTsKIAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIENvbG9yYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihH
TGVudW0gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIo
R0xlbnVtIHRhcmdldCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZTJEKTsKQEAgLTE3NCwzMCArMjA1LDI5IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1
YmxpYyBUZXh0dXJlCiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmNyZWF0ZVRl
eHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0
dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdDsKIAorICAgIGJvb2wgcmVk
ZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKIAogICAgIEltYWdlIG1JbWFnZUFycmF5W01BWF9URVhUVVJFX0xFVkVMU107CiAKICAg
ICBJRGlyZWN0M0RUZXh0dXJlOSAqbVRleHR1cmU7CiAKLSAgICBUZXh0dXJlQ29sb3JidWZmZXJQ
cm94eSAqbUNvbG9yYnVmZmVyUHJveHk7Ci0KLSAgICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7Ci0KLSAgICB2aXJ0dWFsIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsKIH07
CiAKIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIHsKICAgcHVibGljOgot
ICAgIGV4cGxpY2l0IFRleHR1cmVDdWJlTWFwKENvbnRleHQgKmNvbnRleHQpOworICAgIGV4cGxp
Y2l0IFRleHR1cmVDdWJlTWFwKEdMdWludCBpZCk7CiAKICAgICB+VGV4dHVyZUN1YmVNYXAoKTsK
IAogICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Rm9ybWF0KCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
ICAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKQEAgLTIwNiwx
NSArMjM2LDE5IEBAIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKICAgICB2
b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldElt
YWdlTmVnWihHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKIAorICAgIHZvaWQgc2V0Q29tcHJlc3Nl
ZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CisKICAgICB2b2lkIHN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXIgKnNvdXJjZSk7Ci0gICAgdm9p
ZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgUmVuZGVyYnVmZmVyICpzb3VyY2UpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2Vk
KEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgY29weUltYWdlKEdMZW51bSBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291
cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOwogCiAgICAg
Ym9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgQ29s
b3JidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpOworICAgIHZpcnR1YWwgUmVu
ZGVyYnVmZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKIAogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CkBAIC0yMjIsNiAr
MjU2LDcgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZpcnR1
YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogCiAgICAgdmlydHVhbCBib29sIGRpcnR5
SW1hZ2VEYXRhKCkgY29uc3Q7CiAKQEAgLTI0MSw5ICsyNzYsNyBAQCBjbGFzcyBUZXh0dXJlQ3Vi
ZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0
dXJlOwogCi0gICAgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkgKm1GYWNlUHJveGllc1s2XTsKLQot
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KTsKKyAgICBSZW5kZXJidWZmZXIgKm1GYWNlUHJveGllc1s2XTsKIH07CiB9CiAKSW5kZXg6
IEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIAogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICBpZiAo
dGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVS
X0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpA
QCAtMTg5LDcgKzE4OSwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbEJpbmRGcmFtZWJ1ZmZlcihHTGVu
dW0gCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09IEdMX0ZSQU1FQlVGRkVS
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRSZWFkRnJhbWVi
dWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUgfHwgdGFyZ2V0ID09
IEdMX0ZSQU1FQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmJpbmREcmF3RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTU1OSw3ICs1NjcsNyBA
QCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1CiAKICAgICB0cnkKICAg
ICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIpCisgICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0sIDApOwogICAgICAgICB9
CkBAIC01NjgsNyArNTc2LDE1IEBAIEdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHUKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
KCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29t
cGxldGVuZXNzKCk7CiAgICAgICAgIH0KQEAgLTcyMCwyMiArNzM2LDEwNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmICghZ2w6OklzVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICBpZiAobGV2ZWwgPCAw
IHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUykKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAw
IHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVMUykKKyAgICAgICAgaWYgKHdpZHRoIDwg
MCB8fCBoZWlnaHQgPCAwIHx8IChsZXZlbCA+IDAgJiYgIWdsOjppc1BvdzIod2lkdGgpKSB8fCAo
bGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKGhlaWdodCkpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdl
U2l6ZSA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCB8fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4gMCAmJiAh
Z2w6OmlzUG93MihoZWlnaHQpKSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUgPCAwKQorICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBs
ZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToK
KyAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgIGlmICh3
aWR0aCAhPSBoZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
d2lkdGggPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdo
dCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICB9CisKKyAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGJvcmRlciAhPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gdWx0aW1hdGVseSB3ZSBkb24ndCBzdXBwb3J0
IGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8v
IGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2gg
ZmFpbGVkCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6
OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRV
UkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworCisgICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQogICAgIHsKQEAgLTc2MywxNyArODY0LDk1
IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQKICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8
fCAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4gMCAmJiAhZ2w6
OmlzUG93MihoZWlnaHQpKSB8fCBpbWFnZVNpemUgPCAwKQorICAgICAgICBpZiAoeG9mZnNldCA8
IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgCisgICAgICAg
ICAgICAobGV2ZWwgPiAwICYmICFnbDo6aXNQb3cyKHdpZHRoKSkgfHwgKGxldmVsID4gMCAmJiAh
Z2w6OmlzUG93MihoZWlnaHQpKSB8fCBpbWFnZVNpemUgPCAwKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoeG9mZnNldCAhPSAwIHx8IHlvZmZzZXQgIT0gMCkKKyAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgor
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7IC8vIFRoZSB0ZXh0dXJlIGJlaW5nIG9wZXJhdGVkIG9uIGlzIG5vdCBhIGNvbXByZXNz
ZWQgdGV4dHVyZS4KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGZvcm1hdCBzd2l0Y2ggaGFzIGZhaWxlZC4KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAhPSBnbDo6Q29tcHV0ZUNvbXBy
ZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQgIT0gMCB8fCB5b2Zmc2V0ICUgNCAhPSAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7IC8vIHdlIHdhaXQgdG8gY2hlY2sgdGhlIG9mZnNldHMgdW50aWwgdGhpcyBwb2lu
dCwgYmVjYXVzZSB0aGUgbXVsdGlwbGUtb2YtZm91ciByZXN0cmljdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGV4aXN0
IHVubGVzcyBEWFQxIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+aXND
b21wcmVzc2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0
V2lkdGgoKSkgfHwgCisgICAgICAgICAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVp
Z2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2Vk
KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6
ZSwgZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+aXNDb21w
cmVzc2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lk
dGgoKSkgfHwgCisgICAgICAgICAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0
ICE9IHRleHR1cmUtPmdldEhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkBAIC04MzQs
NiArMTAxMyw4IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29weVRleEltYWdlMkQoR0xlbnVtIHQKICAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX1JHQjoK
ICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOiAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRl
ZCBoZXJlLCBidXQgaWYgdGhleSBhcmUgdW5zdXBwb3J0ZWQgYWx0b2dldGhlciwKKyAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAvLyBhIGRpZmZlcmVudCBl
cnJvciBpcyBnZW5lcmF0ZWQgdGhhbiBvdGhlcndpc2UuIFRoYXQgaXMgaGFuZGxlZCBiZWxvdy4K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CkBAIC04NDgsOCArMTAyOSwzMSBAQCB2b2lkIF9f
c3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVyKCktPmdldENvbG9yYnVmZmVyKCk7CisgICAgICAgICAgICBpZiAo
aW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fCAKKyAg
ICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3Vw
cG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoKS0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OkNvbG9yYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoKTsKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC04NTgsNiArMTA2MiwxMSBAQCB2b2lk
IF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CkBA
IC04NzAsNiArMTA3OSwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51
bSB0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlz
Q29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlCkBAIC05MTYsOCArMTEzMCwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlU
ZXhTdWJJbWFnZTJEKEdMZW51CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGNvbnRleHQtPmdldEZyYW1lYnVm
ZmVyKCktPmdldENvbG9yYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBp
ZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOwogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKQEAgLTkyNyw2ICsxMTUxLDExIEBAIHZv
aWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlMkQoR0xlbnUKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHRleHR1cmUt
PmNvcHlTdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgc291cmNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1
YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCkBAIC05MzgsNiArMTE2NywxMSBAQCB2b2lkIF9f
c3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5
U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgc291cmNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE1NTks
NyArMTc5Myw4IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiB8fCBy
ZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICBpZiAoKHRhcmdl
dCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdM
RSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIHx8
IHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0xNTY4
LDkgKzE4MDMsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKTsKKyAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOworICAgICAgICAgICAgR0x1
aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
UkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJh
bWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCB8fCAhZnJhbWVidWZmZXIpCisgICAgICAg
ICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZmZXIpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KQEAgLTE2MDQsNyArMTg1MCw3IEBAIHZvaWQgX19zdGRjYWxsIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0wKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRh
cmdldCAhPSBHTF9GUkFNRUJVRkZFUikKKyAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJV
RkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTE2MzYsNiArMTg4MiwxMSBA
QCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICAgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHN3aXRjaCAo
dGV4dGFyZ2V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKQEAgLTE2NjcsOSArMTkxOCwyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJh
bWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBO
VUxMOworICAgICAgICAgICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlcigpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0
UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9
IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwIHx8ICFm
cmFtZWJ1ZmZlcikKKyAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwIHx8ICFm
cmFtZWJ1ZmZlcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQpAQCAtMTc3MCw2ICsyMDMyLDEx
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHQKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjIyNSwxNCArMjQ5MiwyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEZy
YW1lYnVmZmVyQXR0YWNobWVuCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCisgICAg
ICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFX
X0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xF
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVC
VUZGRVIpCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsK
KyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUo
KSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRUeXBlOwpAQCAtMjI0MCwxNiArMjUyMiwxNiBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVuCiAgICAgICAgICAgICBz
d2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
Q09MT1JfQVRUQUNITUVOVDA6ICAgIAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0g
Y29udGV4dC0+Z2V0RnJhbWVidWZmZXIoKS0+Z2V0Q29sb3JidWZmZXJUeXBlKCk7Ci0gICAgICAg
ICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdl
dENvbG9yYnVmZmVySGFuZGxlKCk7IAorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0g
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoKTsgCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVO
VDogICAgIAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gY29udGV4dC0+Z2V0RnJh
bWVidWZmZXIoKS0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNo
bWVudEhhbmRsZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldERlcHRoYnVmZmVySGFu
ZGxlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0
RGVwdGhidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAKLSAgICAgICAg
ICAgICAgICBhdHRhY2htZW50VHlwZSA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGNv
bnRleHQtPmdldEZyYW1lYnVmZmVyKCktPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAg
ICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
VHlwZSgpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBkZWZhdWx0OiByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgIH0KQEAgLTI1MDgsNyArMjc5MCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGUKICAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfUkVEX1NJWkU6
CiAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlci0+aXNDb2xvcmJ1ZmZlcigpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlciktPmdldFJlZFNpemUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRl
cmJ1ZmZlci0+Z2V0U3RvcmFnZSgpKS0+Z2V0UmVkU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjUxOCw3ICsyODAw
LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZQogICAgICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgogICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJidWZmZXItPmlzQ29sb3JidWZmZXIoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihy
ZW5kZXJidWZmZXIpLT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PGdsOjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlci0+Z2V0U3RvcmFn
ZSgpKS0+Z2V0R3JlZW5TaXplKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICB7CkBAIC0yNTI4LDcgKzI4MTAsNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlCiAgICAgICAgICAgICAgIGNhc2UgR0xfUkVO
REVSQlVGRkVSX0JMVUVfU0laRToKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5p
c0NvbG9yYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0
Qmx1ZVNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGds
OjpDb2xvcmJ1ZmZlcio+KHJlbmRlcmJ1ZmZlci0+Z2V0U3RvcmFnZSgpKS0+Z2V0Qmx1ZVNpemUo
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIHsKQEAgLTI1MzgsNyArMjgyMCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGUKICAgICAgICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0la
RToKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyLT5pc0NvbG9yYnVmZmVyKCkpCiAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nh
c3Q8Z2w6OkNvbG9yYnVmZmVyKj4ocmVuZGVyYnVmZmVyKS0+Z2V0QWxwaGFTaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6Q29sb3JidWZmZXIqPihy
ZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKSktPmdldEFscGhhU2l6ZSgpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewpAQCAtMjU0OCw3
ICsyODMwLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZQogICAg
ICAgICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgogICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJidWZmZXItPmlzRGVwdGhidWZmZXIoKSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxnbDo6RGVwdGhidWZm
ZXIqPihyZW5kZXJidWZmZXIpLT5nZXREZXB0aFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpEZXB0aGJ1ZmZlcio+KHJlbmRlcmJ1ZmZlci0+Z2V0
U3RvcmFnZSgpKS0+Z2V0RGVwdGhTaXplKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CkBAIC0yNTU4LDEzICsyODQwLDI1IEBAIHZv
aWQgX19zdGRjYWxsIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGUKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgogICAgICAgICAgICAgICAgIGlmIChyZW5k
ZXJidWZmZXItPmlzU3RlbmNpbGJ1ZmZlcigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PGdsOjpTdGVuY2lsYnVmZmVyKj4ocmVu
ZGVyYnVmZmVyKS0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PGdsOjpTdGVuY2lsYnVmZmVyKj4ocmVuZGVyYnVmZmVyLT5nZXRTdG9y
YWdlKCkpLT5nZXRTdGVuY2lsU2l6ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfQU5HTEU6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0U2FtcGxlcygpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0y
OTkzLDcgKzMyODcsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYmZ2KEdMdWlu
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBnbDo6QXR0cmlidXRlU3RhdGUgYXR0cmliU3RhdGUgPSBj
b250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgICAgICAgICBjb25zdCBn
bDo6QXR0cmlidXRlU3RhdGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoaW5kZXgpOwogCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAg
ewpAQCAtMzAxMyw3ICszMzA3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJm
dihHTHVpbgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3Vu
ZEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUu
bUJvdW5kQnVmZmVyLmlkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
IGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgogICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNDsgKytpKQpAQCAtMzA0Niw3ICszMzQwLDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRWZXJ0ZXhBdHRyaWJpdihHTHVpbgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OkF0dHJp
YnV0ZVN0YXRlIGF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5k
ZXgpOworICAgICAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0ZVN0YXRlICZhdHRyaWJTdGF0ZSA9
IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAogICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKQEAgLTMwNjYsNyArMzM2MCw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW4KICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0
ZS5tQm91bmRCdWZmZXI7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1C
b3VuZEJ1ZmZlci5pZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBj
YXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7ICsraSkKQEAgLTM0ODEsNiArMzc3NSwxNyBAQCB2b2lkIF9fc3RkY2FsbCBn
bFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X0ZPUk1BVDoKICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgICAgIHsKQEAgLTM1
MjEsMTAgKzM4MjYsMTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIo
dgogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFO
R0xFKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBUUkFDRSgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRo
ID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKLSAgICAgICAgICB0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBUUkFDRSgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHNpemVpIHNhbXBsZXMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0
LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAg
ICB7CkBAIC0zNTQzLDEyICszODQ4LDE1IEBAIHZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZShHTGUKICAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6CiAgICAgICAgICAgY2FzZSBH
TF9SR0I1NjU6CiAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgICAgICBj
YXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6
CisgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lk
dGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVOREVS
QlVGRkVSX1NJWkUpCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCB3aWR0
aCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUgfHwgaGVpZ2h0ID4gZ2w6Ok1BWF9SRU5ERVJC
VUZGRVJfU0laRSB8fCBzYW1wbGVzIDwgMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CkBAIC0zNTU3LDcgKzM4NjUsMTMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZQogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVuZGVy
YnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgIGlmIChzYW1wbGVzID4gY29udGV4dC0+
Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpOwor
ICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CkBA
IC0zNTY1LDE1ICszODc5LDIwIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZShHTGUKICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6RGVwdGhidWZmZXIod2lkdGgsIGhl
aWdodCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
bmV3IGdsOjpEZXB0aGJ1ZmZlcih3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6CiAgICAgICAgICAgICAg
IGNhc2UgR0xfUkdCNV9BMToKICAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6Q29sb3JidWZmZXIod2lk
dGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4
X09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShuZXcgZ2w6OkNvbG9yYnVmZmVyKHdpZHRo
LCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyKG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcih3aWR0aCwg
aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFn
ZShuZXcgZ2w6OlN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UobmV3
IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIod2lkdGgsIGhlaWdodCwgc2FtcGxlcykpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwpAQCAtMzU4Niw2ICszOTA1LDExIEBAIHZv
aWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKICAgICB9CiB9CiAKK3ZvaWQg
X19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7Cit9CisKIHZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292ZXJhZ2Uo
R0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpCiB7CiAgICAgVFJBQ0UoIihHTGNsYW1w
ZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFsdWUsIGludmVydCk7CkBA
IC0zOTU4LDYgKzQyODIsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZQogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9CR1JBX0VY
VDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8gZXJyb3IgY2FzZXMgZm9yIGNv
bXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRsZWQgYmVsb3cKKyAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICAgICAgYnJlYWs7IAogICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIH0KQEAgLTM5NzEsNiArNDMwNywxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleElt
YWdlMkQoR0xlbnVtIHRhcmdlCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUIHx8CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC00MTQ2LDYg
KzQ0OTUsMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNz
ZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVs
cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4
dHVyZVRhcmdldCh0YXJnZXQpKQpAQCAtNDE1Nyw2ICs0NTExLDExIEBAIHZvaWQgX19zdGRjYWxs
IGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlCkBAIC00OTY1LDcgKzUzMjQsNyBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250
ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBH
TF9UUlVFKSwgc3RyaWRlLCBwdHIpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5cGUsIChu
b3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDk5OCw2ICs1MzU3LDU0IEBAIHZvaWQgX19z
dGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRj
YWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGlu
dCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0
WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCit7CisgICAgVFJBQ0UoIihHTGludCBzcmNY
MCA9ICVkLCBHTGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9
ICVkLCAiCisgICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdM
aW50IGRzdFgxID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVs
ZCBtYXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwg
c3JjWTAsIHNyY1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChtYXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklU
IHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCkpICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzcmNYMSAtIHNyY1gwICE9IGRzdFgxIC0gZHN0WDAgfHwg
c3JjWTEgLSBzcmNZMCAhPSBkc3RZMSAtIGRzdFkwKQorICAgICAgICB7CisgICAgICAgICAgICBF
UlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBw
b3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpID09IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50
YXRpb24uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVm
ZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZ
MSwgbWFzayk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwogdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJv
cmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQog
ewpAQCAtNTAyNyw2ICs1NDM0LDcgQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZQogICAgIHN0YXRpYyBjb25zdCBFeHRlbnNpb24gZ2xFeHRlbnNpb25zW10gPQogICAg
IHsKICAgICAgICAgeyJnbFRleEltYWdlM0RPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbFRleEltYWdlM0RPRVN9LAorICAgICAgICB7ImdsQmxpdEZyYW1l
YnVmZmVyQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSln
bEJsaXRGcmFtZWJ1ZmZlckFOR0xFfSwKICAgICB9OwogCiAgICAgZm9yIChpbnQgZXh0ID0gMDsg
ZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9uKTsgZXh0KyspCklu
ZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiA2NjYxMSkKKysrIEFOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDExICsx
NDQsMTMgQEAgRVhQT1JUUwogICAgIGdsVmlld3BvcnQgICAgICAgICAgICAgICAgICAgICAgQDE0
MgogCiAgICAgOyBFeHRlbnNpb25zCi0gICAgZ2xUZXhJbWFnZTNET0VTCQkJCQlAMTQzCisgICAg
Z2xUZXhJbWFnZTNET0VTICAgICAgICAgICAgICAgICBAMTQzCisgICAgZ2xCbGl0RnJhbWVidWZm
ZXJBTkdMRSAgICAgICAgICBAMTQ5CisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVBTkdMRSBAMTUwCiAgICAgCiAgICAgOyBFR0wgZGVwZW5kZW5jaWVzCi0gICAgZ2xDcmVhdGVD
b250ZXh0CQkJCQlAMTQ0IE5PTkFNRQotICAgIGdsRGVzdHJveUNvbnRleHQJCQkJQDE0NSBOT05B
TUUKLSAgICBnbE1ha2VDdXJyZW50CQkJCQlAMTQ2IE5PTkFNRQotICAgIGdsR2V0Q3VycmVudENv
bnRleHQJCQkJQDE0NyBOT05BTUUKKyAgICBnbENyZWF0ZUNvbnRleHQgICAgICAgICAgICAgICAg
IEAxNDQgTk9OQU1FCisgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAgICBAMTQ1IE5P
TkFNRQorICAgIGdsTWFrZUN1cnJlbnQgICAgICAgICAgICAgICAgICAgQDE0NiBOT05BTUUKKyAg
ICBnbEdldEN1cnJlbnRDb250ZXh0ICAgICAgICAgICAgIEAxNDcgTk9OQU1FCiAgICAgZ2xHZXRQ
cm9jQWRkcmVzcyAgICAgICAgICAgICAgICBAMTQ4IE5PTkFNRQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IEFOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBBTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJKHJldmlzaW9u
IDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTcsMTAgKzIxNywxOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuXFJlZkNvdW50T2JqZWN0LmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cUmVuZGVyYnVmZmVyLmNw
cCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
UmVzb3VyY2VNYW5hZ2VyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cU2hhZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0y
OTksMTAgKzMwNywxOCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuXFJlZkNvdW50T2JqZWN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuXFJlbmRlcmJ1ZmZlci5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLlxSZXNvdXJjZU1hbmFnZXIu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii5c
U2hhZGVyLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlz
aW9uIDY2NjExKQorKysgQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExLDYgKzExLDcgQEAKIAogI2RlZmluZSBHTF9BUElDQUxMCiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKICNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgpJbmRleDogQU5HTEUvc3JjL2xpYkdM
RVN2Mi91dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gNjY2MTEpCisrKyBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNDkgQEAgR0xzaXplaSBDb21w
dXRlUGl0Y2goR0xzaXplaSB3aWR0aCwgR0xlbgogICAgIHJldHVybiAocmF3UGl0Y2ggKyBhbGln
bm1lbnQgLSAxKSAmIH4oYWxpZ25tZW50IC0gMSk7CiB9CiAKK0dMc2l6ZWkgQ29tcHV0ZUNvbXBy
ZXNzZWRQaXRjaChHTHNpemVpIHdpZHRoLCBHTGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAo
Zm9ybWF0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDoKKyAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
QVNTRVJUKHdpZHRoICUgNCA9PSAwKTsKKworICAgIHJldHVybiA4ICogd2lkdGggLyA0OworfQor
CitHTHNpemVpIENvbXB1dGVDb21wcmVzc2VkU2l6ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiA4ICogKEdMc2l6ZWkp
Y2VpbCgoZmxvYXQpd2lkdGggLyA0LjBmKSAqIChHTHNpemVpKWNlaWwoKGZsb2F0KWhlaWdodCAv
IDQuMGYpOworfQorCitib29sIElzQ29tcHJlc3NlZChHTGVudW0gZm9ybWF0KQoreworICAgIGlm
KGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CisgICAgICAgZm9y
bWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKIC8vIFJldHVybnMgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiBhIHNpbmds
ZSB0ZXhlbCBpbiBhbiBJbWFnZQogaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpCiB7CkBAIC0xOTYsNiArMjM5LDcgQEAgaW50IENvbXB1dGVQaXhlbFNpemUo
R0xlbnVtIGZvcm1hdCwgR0xlbgogICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiBy
ZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogMjsKICAgICAgICAgICBjYXNlIEdMX1JHQjog
ICAgICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDM7CiAgICAgICAgICAg
Y2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgY2hhcikgKiA0
OworICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2ln
bmVkIGNoYXIpICogNDsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjI4LDYgKzI3Miw3IEBAIGJvb2wgQ2hlY2tUZXh0dXJl
Rm9ybWF0VHlwZShHTGVudW0gZm9ybWEKICAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAg
IHsKICAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoK
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgogICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgpAQCAtNTk5LDEyICs2NDQsMzEgQEAgRDNERk9STUFUIENv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbgogICAgIHN3aXRjaCAoZm9ybWF0KQogICAgIHsK
ICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6ICAgICAgICAgICAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OworICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAg
Y2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKICAg
ICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1Owor
ICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhC
ODsKICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5D
SUxfSU5ERVg4OiAgICAgICByZXR1cm4gRDNERk1UX0QyNFM4OworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0lOREVYODogICAgICAgCisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiBy
ZXR1cm4gRDNERk1UX0QyNFM4OwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
cmV0dXJuIEQzREZNVF9BOFI4RzhCODsKICAgICB9CiB9CiAKK0dMc2l6ZWkgR2V0U2FtcGxlc0Zy
b21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKQoreworICAgIGlmICh0
eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiB0eXBlOworfQorCitEM0RNVUxUSVNBTVBMRV9UWVBFIEdl
dE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKK3sKKyAgICBpZiAo
c2FtcGxlcyA8PSAxKQorICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOworfQorCiB9
CkluZGV4OiBBTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFO
R0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmgJKHJldmlzaW9uIDY2NjExKQorKysgQU5HTEUv
c3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBA
QAogCiAjZGVmaW5lIEdMX0FQSUNBTEwKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KICNpbmNsdWRlIDxkM2Q5Lmg+CiAKIG5hbWVzcGFjZSBnbApAQCAt
MjgsNiArMjksOSBAQCBpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqCiAK
IGludCBDb21wdXRlUGl4ZWxTaXplKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIEdMc2l6
ZWkgQ29tcHV0ZVBpdGNoKEdMc2l6ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCBhbGlnbm1lbnQpOworR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFBpdGNoKEdMc2l6
ZWkgd2lkdGgsIEdMZW51bSBmb3JtYXQpOworR0xzaXplaSBDb21wdXRlQ29tcHJlc3NlZFNpemUo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQpOworYm9vbCBJc0Nv
bXByZXNzZWQoR0xlbnVtIGZvcm1hdCk7CiBib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xl
bnVtIHRhcmdldCk7CiBib29sIElzVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKIGJvb2wg
Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CkBAIC01
Niw2ICs2MCw4IEBAIHVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3QKIGJv
b2wgQ29udmVydFByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgcHJp
bWl0aXZlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUg
KmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwogRDNERk9STUFUIENv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CitEM0RNVUxUSVNBTVBMRV9U
WVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7CitHTHNp
emVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlw
ZSk7CiAKIH0KIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2NjExKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0wMSAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJvbGwgQU5HTEUgdW5kZXIgd2Via2l0IHRvIHI0MDIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDA0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06IFVwZGF0ZSB0aGUgY29kZSB0byB1
c2UgbmV3ZXIgQU5HTEUgaW50ZXJmYWNlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKwogMjAxMC0wOC0zMSAgS2VubmV0aCBSdXNzZWxs
ICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDY2NjExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDYgQEAKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAKLSNpbmNsdWRlICJBTkdM
RS9SZXNvdXJjZUxpbWl0cy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAi
QXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKQEAgLTE4NiwyMyAr
MTg1LDIzIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKIAogICAg
IFRCdWlsdEluUmVzb3VyY2UgQU5HTEVSZXNvdXJjZXM7CiAKLSAgICBBTkdMRVJlc291cmNlcy5t
YXhWZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyk7Ci0g
ICAgQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBBTkdMRVJlc291cmNl
cy5tYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5tYXhWYXJ5aW5nVmVjdG9y
cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAwOwot
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0g
ICAgQU5HTEVSZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0g
ICAgQU5HTEVSZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMg
PSAwOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJ
QlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0
b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdf
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBBTkdMRVJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBBTkdMRVJlc291cmNl
cy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBBTkdMRVJlc291cmNl
cy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVy
ZUltYWdlVW5pdHMpOworICAgIEFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMgPSAwOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyk7CiAKICAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBBTkdMRVJl
c291cmNlcy5tYXhEcmF3QnVmZmVycyA9IDE7CisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMgPSAxOwogICAgIAogICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKICAgICAK
</data>
<flag name="review"
          id="55192"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="55193"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>